Sistema di prenotazione multi-salone con gestione intelligente della capacità per giorno, slot temporali e sovrapposizioni concorrenti.
Prima di capire come vengono gestite le sovrapposizioni, è essenziale comprendere i quattro pilastri del sistema.
Scenari reali ordinati per complessità crescente, con visualizzazione temporale e analisi slot per slot.
| Orario | Sovrapposizioni attive | Posti liberi | Nuova DONNA? | Nuovo UOMO? |
|---|---|---|---|---|
| 09:00 | 6 (5 DONNA + 1 UOMO) | 0 | ❌ NO | ❌ NO |
| 09:10 | 5 (5 DONNA) | 1 | ✅ 1 sola | ✅ 1 solo |
| 10:00 | 0 | 6 | ✅ fino a 6 | ✅ fino a 6 |
| Orario | Prenotazioni sovrapposte | Liberi/6 | Nuova DONNA? |
|---|---|---|---|
| 09:00 | D1 = 1 | 5 | ✅ fino a 5 |
| 09:10 | D1 + D2 + D3 = 3 | 3 | ✅ fino a 3 |
| 09:20 | D1 + D2 + D3 + D4 = 4 | 2 | ✅ fino a 2 |
| 09:30 | D1 + D2 + D3 + D4 + U1 = 5 | 1 | ✅ 1 sola |
| 09:40 | D2 + D3 + D4 + B1 = 4 | 2 | ✅ fino a 2 |
| 10:00 | D2 + D3 + D4 = 3 | 3 | ✅ fino a 3 |
| 10:10 | D4 = 1 | 5 | ✅ fino a 5 |
| 10:20 | 0 | 6 | ✅ fino a 6 |
Ultimo slot disponibile: 09:00. Due utenti aprono la pagina, vedono lo slot verde, cliccano "Conferma" quasi contemporaneamente.
BEGIN TRANSACTION;
SELECT id FROM prenotazioni WHERE ... FOR UPDATE; ← blocca le righe
-- Utente A: 0 conflitti → INSERT ✅ → COMMIT
-- Utente B: arriva dopo, trova 1 conflitto ≥ 1 → ROLLBACK ❌
Il Combo (n_slot = 2) ha durate molto diverse nei vari giorni. Questo influenza quante prenotazioni si sovrappongono e quindi la capacità effettiva.
| Giorno | durata_slot | n_collaboratori | Durata Combo | Prenotazioni/ora | Slot 09:00 pieno dopo… |
|---|---|---|---|---|---|
| Martedì | 20 min | 5 | 40 min | ~1,5/ora per collaboratore | 5 Combo contemporanei alle 09:00 → pieno |
| Mercoledì | 20 min | 5 | 40 min | ~1,5/ora per collaboratore | 5 Combo contemporanei → pieno |
| Giovedì | 30 min | 1 | 60 min | 1/ora | 1 solo Combo alle 09:00 → pieno fino alle 10:00 |
| Venerdì | 10 min | 6 | 20 min | 3/ora per collaboratore | 6 Combo contemporanei → pieno |
| Sabato | 10 min | 1 | 20 min | 3/ora | 1 solo Combo → pieno per 20 minuti |
| Situazione | Condizione | Risultato |
|---|---|---|
| Slot completamente libero | 0 sovrapposizioni < n_collaboratori | ✅ Disponibile |
| Slot parzialmente occupato | X sovrapposizioni < n_collaboratori | ✅ Disponibile |
| Slot al limite | X sovrapposizioni = n_collaboratori | ❌ Pieno |
| Giorno chiuso | aperto = 0 | ❌ Chiuso |
| Servizio cade in pausa pranzo | ora_fine > pausa_inizio | ❌ Slot non generato |
| Data passata | data < oggi | ❌ Non prenotabile |
| Chiusura straordinaria | data IN chiusure | ❌ Chiuso |
| Doppia prenotazione concorrente | SELECT FOR UPDATE + count ≥ n_collab. | ⚠️ Secondo utente rifiutato |