Architettura del Sistema
- Frontend: HTML, CSS, JavaScript
- Backend: PHP 8.0+ con PDO
- Database: MariaDB / MySQL
- Worker: Script CLI PHP per processare comande
- Stampa: Integrazione CUPS via comando
lp
Struttura del Database
Tabelle Principali
CATEGORIE
Categorie di prodotti (Pizze, Bevande, ecc.)
ID_Categoria(INT, PRIMARY KEY)Nome_Categoria(VARCHAR)
REPARTI
Reparti di produzione (Cucina, Bar, Pizzeria)
ID_Reparto(INT, PRIMARY KEY)Nome_Reparto(VARCHAR)Nome_Stampante_LAN(VARCHAR) - Coda CUPS
PRODOTTI
Catalogo prodotti
ID_Prodotto(INT, PRIMARY KEY)Descrizione(VARCHAR)Prezzo(DECIMAL)Codice_Prodotto(VARCHAR, UNIQUE)ID_Categoria(FK β CATEGORIE)ID_Reparto(FK β REPARTI)
TAVOLI
Tavoli e opzioni servizio
ID_Tavolo(INT, PRIMARY KEY)Nome_Tavolo(VARCHAR)Tipo_Servizio(ENUM: 'tavolo', 'asporto')
ORDINI
Ordini effettuati
ID_Ordine(INT, PRIMARY KEY)ID_Tavolo(FK β TAVOLI)Nome_Cliente(VARCHAR)Numero_Coperti(INT)Totale_Ordine(DECIMAL)Staff(BOOLEAN) - Flag ordine staffSconto(DECIMAL) - Importo scontoData_Ora(DATETIME)
DETTAGLI_ORDINE
Righe ordine (prodotti ordinati)
ID_Dettaglio(INT, PRIMARY KEY)ID_Ordine(FK β ORDINI)ID_Prodotto(FK β PRODOTTI)Quantita(INT)Prezzo_Bloccato(DECIMAL)
COMANDE
Comande da stampare per i reparti
ID_Comanda(INT, PRIMARY KEY)ID_Ordine(FK β ORDINI)Nome_Stampante_LAN(VARCHAR)Testo_Comanda(TEXT)Stato(ENUM: 'pending', 'sent', 'error')Tentativi(INT)Data_Creazione(DATETIME)Data_Invio(DATETIME, NULL)
Flusso Ordine
- Utente crea ordine tramite
public/cassa.php - Frontend chiama
api/salva_ordine.phpcon dati ordine - Backend:
- Salva record in
ORDINI - Salva righe in
DETTAGLI_ORDINE - Crea comande per reparto in
COMANDE - Tenta stampa immediata (se
lpdisponibile)
- Salva record in
- Worker CLI (
scripts/worker_process_comande.php):- Eseguito periodicamente (cron/systemd)
- Trova comande con stato 'pending' o 'error'
- Tenta stampa tramite
lp -d queue file - Aggiorna stato a 'sent' o 'error'
Organizzazione File
RICEVUTE/
βββ api/ # Endpoint API REST
βββ config/ # Configurazione e autenticazione
βββ docs/ # Documentazione
β βββ site/ # Sito documentazione HTML
βββ public/ # File web-accessible
β βββ assets/ # CSS e JavaScript
β βββ cassa.php # Creazione ordini
β βββ report.php # Report vendite
β βββ admin.php # Pannello admin
βββ scripts/ # Script CLI e worker
βββ sql/ # Schema database
βββ src/ # Classi PHP
Worker Process Comande
Lo script scripts/worker_process_comande.php processa le comande in coda:
Parametri CLI
--limit=N: Numero massimo comande da processare (default: 20)--max-tries=N: Tentativi massimi per comanda (default: 5)
Stati Comanda
pending: In attesa di stampasent: Stampata con successoerror: Errore stampa (verrΓ ritentata se Tentativi < max)
Esecuzione Periodica
Opzione 1 - Cron (ogni minuto):
* * * * * /usr/bin/php /path/worker_process_comande.php --limit=20
Opzione 2 - Systemd timer (raccomandato):
sudo systemctl enable --now worker_comande.timer
Sicurezza
- SQL Injection: Prepared statements con PDO
- XSS: Sanificazione input e output escaping
- CSRF: Token per azioni critiche
- Sessioni: Flag secure, httponly, samesite
- Password: Hash con
password_hash() - HTTPS: Raccomandato in produzione
Feature Speciali
Ordini Staff
Flag Staff = true in tabella ORDINI:
- Totale automaticamente a β¬0.00
- Esclusi da report ricavi
- Comande comunque stampate per preparazione
Sconti
Campo Sconto in tabella ORDINI:
- Importo sottratto dal totale
- Mostrato su ricevuta cliente
- Incluso in report ricavi
Coperti
Gestione automatica costo coperto:
- Basato su numero coperti e tariffa configurata
- Automaticamente 0 per ordini asporto