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
EventDialogs 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
reserved → paid → confirmed → completed
Alternativní stavy: excused, no_show_paid, no_show_unpaid, cancelled, cancelled_late, auto_cancelled_unpaid