Files
kreios/backoffice
carmine.savino 0f0764367f feat: remove obsolete glass configurations, add title import functionality
- Deleted the `vetro.json` file containing glass configurations.
- Introduced `ImportaTitoliAction` to facilitate importing model titles from Excel.
- Created `TitoliModelliImporter` for handling title import logic and updating existing models.
- Updated `SistemaResource` to include the new title import action.
- Modified `ConfigurazioneModello` to adjust the model name retrieval logic.
- Changed `ListinoImporter` to make the alias constant public.
- Added tests for title import functionality, ensuring correct updates and creation of new models.
2026-10-23 11:15:28 +02:00
..
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-07-17 11:34:15 +02:00
2026-10-20 18:40:59 +02:00
2026-07-17 11:34:15 +02:00

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 in src/js/starter.js sostituisce il vecchio postMessage con una chiamata diretta all'API e mostra un pulsante "Vai al preventivo".

Flusso

  1. L'utente configura un prodotto nel configuratore e clicca "Aggiungi al preventivo".
  2. starter.js invia POST /api/carrello/aggiungi (con sistema, type, dimensioni, prezzo, payload, screenshot PNG). Il backend crea/aggiorna un preventivo (stato bozza) identificato da un token salvato in localStorage.
  3. Il pulsante "Vai al preventivo" apre l'app cliente passando il token: /preventivo/?token=XXX.
  4. L'app cliente mostra il carrello, l'utente compila i dati e conferma → POST /api/carrello/{token}/conferma.
  5. Il backend crea il cliente, imposta lo stato a inviato, 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)

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