Guida completa alle operazioni per tutti i ruoli
Aggiornato marzo 2026Dipendente aziendale. Può prenotare, modificare e cancellare il proprio pasto. Accede a /utente.php.
Gestisce dipendenti, buoni, menu e visualizza report. Accede a /admin.php. Può anche usare le funzioni utente e cuoca.
Operatore mensa. Scansiona QR/matricole al momento della consumazione. Accede a /cuoca/cuoca.php.
| Orario | Evento | Chi è coinvolto | Note |
|---|---|---|---|
| 09:00 | Le notifiche push smettono di partire fino alle 13:30 | Utente | Silenzio notifiche mattutino |
| 11:00 | Apre la finestra "prenota nuovo giorno" (replacement) | Utente | Solo se si ha già una prenotazione attiva per oggi |
| 13:30 | Cutoff prenotazione odierna — la prenotazione di oggi diventa "scaduta" e la finestra replacement si chiude | Utente | Il sistema la mostra come scaduta; il record resta nel DB. Il replacement richiede prenotazione attiva → dopo le 13:30 non è più possibile. |
| 13:35 | Cron chiude le prenotazioni non scannerizzate | Cuoca | used_at = data_consumazione 13:35:00 sulle prenotazioni IS NULL |
| 13:45 circa | Prima notifica push della giornata parte agli utenti senza prenotazione | Utente | Ogni 15 min fino alle 09:00 del giorno dopo (se non ancora notificato) |
| 15:00 (giorno precedente) |
Cutoff modifica/cancella — non è più possibile toccare la prenotazione del giorno lavorativo successivo | Utente Admin | Conta il giorno lavorativo precedente (salta weekend e festivi) |
| Operazione | Quando è possibile | Condizioni |
|---|---|---|
| Nuova prenotazione | Qualsiasi ora, per date future | Saldo buoni > 0 · Nessuna prenotazione attiva · Data = giorno lavorativo |
| Modifica prenotazione attiva | Prima delle 15:00 del giorno lavorativo precedente | Prenotazione esistente · Non ancora consumata |
| Cancellazione prenotazione | Solo passando dall'ufficio (admin) | Date future: sempre · Oggi: solo prima delle 09:30 · Buoni vengono restituiti |
| Replacement (prenota altro giorno) | Solo tra le 11:00 e le 13:30 | Avere prenotazione attiva per OGGI · Saldo buoni > 0 · Nuovo giorno > oggi |
| Visualizza saldo buoni | Sempre | — |
| Visualizza storico pasti | Sempre | — |
| Download menu | Sempre (se caricato dall'admin) | Menu settimana corrente e prossima |
| Attivare notifiche push | Sempre | Browser compatibile · Permesso notifiche concesso |
| Azione | Dettaglio |
|---|---|
| Aggiungi dipendente | Nome, cognome, email, password (min 4 char). Il numero matricola viene assegnato automaticamente dal sistema. |
| Modifica dipendente | Nome, cognome, email, password (opzionale). Il numero matricola non è modificabile. |
| Elimina dipendente | Rimuove dipendente e tutti i dati correlati (prenotazioni, movimenti buoni, sessioni). Operazione irreversibile. |
| Azione | Condizione |
|---|---|
| Modifica prenotazione | Date future: sempre · Oggi: solo prima delle 09:30 · Date passate: mai (nessun vincolo sulle 15:00 del giorno precedente — regola solo per l'utente) |
| Cancella prenotazione | Date future: sempre · Oggi: prima delle 09:30 · I buoni vengono restituiti |
| Riepilogo giornaliero/mensile | Visualizza il numero totale di prenotazioni per data |
| Azione | Dettaglio |
|---|---|
| Aggiunge buoni | Inserisce un movimento di tipo "acquisto". Il trigger aggiorna automaticamente il saldo. |
| Visualizza saldo | Saldo attuale per ogni dipendente |
| Storico movimenti | Tutti i movimenti (acquisto, uso, rettifica, bonus, storno) |
| Azione | Dettaglio |
|---|---|
| Upload manuale menu | Carica immagine o PDF per la settimana corrente e/o prossima. Formati: png, jpg, jpeg, gif, webp, pdf. Max 10MB. |
| Aggiornamento automatico da email | Il cron scarica il PDF allegato alle email di cinzia@mollificiolecchese.it con "menu" in oggetto o allegato, e lo salva automaticamente. |
| Rotazione menu | Ogni settimana il menu "prossima" diventa "corrente" automaticamente. |
/cuoca/cuoca.php. Può selezionare la data di consumazione (default: oggi) e scansionare le matricole.
| Stato risposta | Significato | Azione consigliata |
|---|---|---|
| ✅ OK | Prenotazione trovata e marcata come consumata (used_at = NOW()) |
Servire il pasto |
| 🔁 GRACE | Scansione ripetuta entro 60 secondi dalla prima (ri-passata accidentale) | Ignorare, il pasto è già stato segnato |
| ⛔ USED | Prenotazione già consumata in precedenza (oltre 60s fa) | Non servire. Mostra orario prima consumazione. |
| ❌ NOT FOUND | Nessuna prenotazione trovata per questa matricola nella data selezionata | Verificare la data o contattare l'amministrazione |
used_at = 13:35:00. La cuoca può continuare a scansionare dopo le 13:35 solo se aveva già scansionato prima (prenotazioni con used_at NULL non ce ne sono più).
/utente.php/utente.phpused_at = 13:35:00)used_at IS NULL e last_notified_date < oggi → invia notificalast_notified_date = oggi)| Tipo movimento | Chi lo genera | Effetto sul saldo |
|---|---|---|
acquisto |
Admin aggiunge buoni manualmente | + incrementa |
uso |
Utente effettua una prenotazione | − decrementa |
bonus |
Bonus automatici del sistema | + incrementa |
rettifica |
Correzione manuale admin | ± dipende dal valore |
storno |
Cancellazione prenotazione | + ripristino buono |
| Job | Schedule | Cosa fa |
|---|---|---|
| close_prenotazioni.php | 35 13 * * * | Imposta used_at = 13:35:00 su tutte le prenotazioni di oggi non ancora scannerizzate. Permette al cron push di distinguere prenotazioni "aperte" da "scadute". |
| push_notifications.php | */15 * * * * | Ogni 15 minuti, nella finestra 13:30–09:00, invia una notifica push agli utenti che non hanno prenotazioni attive (used_at IS NULL) e non sono già stati notificati oggi. |
| aggiorna_menu.php | configurabile | Controlla la casella Gmail, scarica il PDF del menu allegato alle email di Cinzia, e aggiorna automaticamente il menu corrente/prossima settimana. |
close_prenotazioni.php dal browser: https://prenotazionimensa.mydigitaltools.it/trigger_close.php?token=mensa_close_2026trigger_push.php?token=mensa_push_2026
Accede a /utente.php, sceglie data, primo, secondo (e note opzionali). Il sistema scala 1 buono dal saldo e assegna il numero matricola per il QR.
Prima delle 15:00 del giorno lavorativo precedente, l'utente può modificare primo/secondo/note o cancellare (con restituzione del buono).
La prenotazione è attiva. Tra le 11:00 e le 13:30 l'utente può facoltativamente prenotare un altro giorno futuro (replacement) senza toccare quella di oggi.
La cuoca legge il QR/matricola. Se la prenotazione esiste e used_at IS NULL, viene marcata come consumata con used_at = NOW(). Risposta: ✅ OK.
Il cron close_prenotazioni.php imposta used_at = 13:35:00 su tutte le prenotazioni di oggi non scannerizzate. Da questo momento nessuna prenotazione odierna risulta "aperta".
Il cron push verifica chi non ha prenotazioni con used_at IS NULL e non è stato ancora notificato oggi. Invia il promemoria "Non hai ancora prenotato il pranzo!".
Se l'utente ha già una prenotazione futura (inserita tramite replacement), questa diventerà la nuova "attiva" il giorno successivo. Altrimenti dovrà prenotare ex-novo.