Skip to content

Kalendář

Cesta: / nebo /Calendar
Komponenta: src/pages/Calendar.jsx
Role: Admin

Centrální rozhraní aplikace. Slouží ke správě všech termínů, blokací a dovolených.

Pohledy

Pohled Popis
Týdenní — terapeuté Každý terapeut má vlastní sloupec, zobrazuje celý tým najednou
Týdenní — místnosti Každá místnost jako sloupec, viditelnost obsazenosti prostor
Měsíční přehled Přehled termínů v rámci měsíce
Agenda Seřazený seznam nadcházejících termínů

Funkce

  • Kliknutí na volný slot → otevře EventDialog s předvyplněným časem, terapeutem a místností
  • Drag & drop pro přesunutí termínu na jiný čas
  • Filtry: výběr konkrétních terapeutů a místností v postranním panelu
  • Detekce konfliktů v reálném čase (překryv termínů, kapacita místnosti)
  • Automatické logování všech změn do ActivityLog

EventDialog — vytvoření termínu

Nejkomplexnější komponenta aplikace (src/components/calendar/EventDialog.jsx).

Workflow

flowchart TD
    A[Klik na slot v kalendáři] --> B[Otevře EventDialog]
    B --> C[Výběr typu: termín / blokace / dovolená]
    C --> D[Výběr data a terapeuta]
    D --> E[Výpočet volných slotů]
    E --> F[Výběr výkonu a slotu]
    F --> G[Výběr místnosti]
    G --> H[Výběr klienta — povinné pro termín]
    H --> I[Uložení → CalendarEvent.create]
    I --> J[ActivityLog záznam]
    J --> K{Nový termín?}
    K -- ano --> L[Nabídka platebního odkazu / e-mailu]
    K -- ne --> M[Konec]

Logika volných slotů

Pro každý AvailabilityBlock terapeuta na dané datum:
  1. Filtr podle service_types (pokud vybrán výkon)
  2. Generuj sloty po 30 min od start_time do end_time − duration
  3. Vyřaď sloty s konfliktem (překryv s existujícími CalendarEvent)
  4. Zobraz jen :00 a :30 sloty (čistší UX)

Ruční mód: Admin může přepnout na ruční zadání časů — obejde logiku volných slotů.

Validace před uložením

  • Povinná pole (terapeut, datum, čas, klient pro appointment)
  • Konflikt s existující událostí terapeuta
  • Kapacita místnosti (room.capacity)
  • Zda termín leží v aktivním AvailabilityBlock

Typy událostí

Typ Popis
appointment Termín s klientem — vyžaduje klienta, výkon
blockage Blokace terapeuta (osobní, administrativa)
vacation Dovolená — může být celodenní

Stavy termínu

reservedpaidconfirmedcompleted

Alternativní stavy: excused, no_show_paid, no_show_unpaid, cancelled, cancelled_late, auto_cancelled_unpaid