Backoffice Preventivi — Krèios
Backend + backoffice collegato al configuratore 3D. Riceve i prodotti configurati, li accumula in un preventivo (carrello lato server con token), alla conferma raccoglie i dati del cliente, genera un PDF riassuntivo e invia le email a cliente e amministratore.
Componenti
- Laravel 13 + Filament 3 (questa cartella): API pubblica del carrello (
/api/carrello/*) e pannello admin (/admin). - App cliente Vue 3 (
cliente/): riepilogo carrello + form contatti + conferma (nessun iframe). - Configuratore (
../src): la modifica insrc/js/starter.jssostituisce il vecchiopostMessagecon una chiamata diretta all'API e mostra un pulsante "Vai al preventivo".
Flusso
- L'utente configura un prodotto nel configuratore e clicca "Aggiungi al preventivo".
starter.jsinviaPOST /api/carrello/aggiungi(consistema,type, dimensioni, prezzo, payload, screenshot PNG). Il backend crea/aggiorna unpreventivo(statobozza) identificato da untokensalvato inlocalStorage.- Il pulsante "Vai al preventivo" apre l'app cliente passando il token:
/preventivo/?token=XXX. - L'app cliente mostra il carrello, l'utente compila i dati e conferma →
POST /api/carrello/{token}/conferma. - Il backend crea il
cliente, imposta lo stato ainviato, genera il PDF e invia le email (cliente con PDF allegato + notifica admin). Il preventivo è visibile nel backoffice.
Setup
# 1. Backend Laravel (da questa cartella)
composer install
# .env già configurato: MySQL 127.0.0.1 / root / (no password) / DB kreios_preventivi
php artisan migrate --seed # crea le tabelle + utente admin
php artisan storage:link
php artisan serve --port=8000 # API + admin su http://localhost:8000
# 2. Frontend: configuratore + app cliente, compilati in public/ (dalla root del repo)
cd ..
./build.sh # -> public/configuratore e public/preventivo
Configuratore e app cliente sono serviti da questo backend: http://localhost:8000/configuratore/?sistema=pvc&type=finestra_2_ante
e http://localhost:8000/preventivo/. In sviluppo ./dev.sh (root) avvia Laravel e ricompila i frontend
a ogni modifica. Dettagli in ../docs/PREVENTIVI_BACKOFFICE.md.
Credenziali admin (seed di default)
- URL: http://localhost:8000/admin
- Email:
admin@kreiosinfissi.it— Password:password
Email in sviluppo
MAIL_MAILER=log: le email finiscono in storage/logs/laravel.log (incluso il PDF allegato in base64).
In produzione configurare SMTP nel .env.
Configurazione (.env Laravel)
| Variabile | Descrizione |
|---|---|
DB_* |
MySQL: 127.0.0.1, root, no password, kreios_preventivi |
ADMIN_NOTIFY_EMAIL |
Email che riceve la notifica di nuovo preventivo |
APP_FRONTEND_CLIENTE_URL |
URL dell'app cliente, solo se non servita da qui (default APP_URL/preventivo) |
CORS_ALLOWED_ORIGINS |
Origini esterne autorizzate all'API (default *; i frontend serviti da qui non ne hanno bisogno) |
Frontend
Configuratore e app cliente chiamano l'API sulla stessa origine (${location.origin}/api): nessuna
variabile da impostare. VITE_PREVENTIVI_API_BASE (root) / VITE_API_BASE (cliente/) servono solo per
un'API su un altro dominio. Il link "Vai al preventivo" usa frontend_cliente_url da GET /api/config.
Modello dati
clienti— anagrafica cliente.preventivi— un preventivo/carrello:token,numero,stato(bozza→inviato→in_lavorazione→chiuso),totale(IVA inclusa),pdf_path.preventivo_items— righe:sistema,type,nome_modello, dimensioni,quantita, prezzi,payload(JSON della configurazione),immagine_path(screenshot decodificato).
Il payload del configuratore mescola stringhe e oggetti listino: App\Support\ConfigurazioneFormatter
lo normalizza in righe {label, value} con etichette italiane, usato sia dal PDF che dal backoffice.
Branding
Palette allineata al configuratore Krèios (../src/assets/style.css): teal #12373C (primario) e oro
#ffd700 (call-to-action). Il logo (../src/assets/img/kreios.jpg) è copiato in public/images/kreios-logo.jpg
(Laravel/Filament/PDF/email) e in cliente/public/kreios-logo.jpg (app cliente Vue).
API
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /api/config |
Configurazione pubblica (URL corrente dell'app cliente) |
| POST | /api/carrello/aggiungi |
Aggiunge un prodotto (crea il carrello se manca il token) |
| GET | /api/carrello/{token} |
Ritorna il carrello (solo stato bozza) |
| DELETE | /api/carrello/{token}/item/{id} |
Rimuove una riga |
| POST | /api/carrello/{token}/conferma |
Finalizza: cliente + PDF + email |