# Documentazione Progetto HTT QRCode ## πŸ“‹ Indice 1. [Panoramica del Progetto](#panoramica-del-progetto) 2. [Struttura del Progetto](#struttura-del-progetto) 3. [Bootstrap e Installazione](#bootstrap-e-installazione) 4. [Architettura dell'Applicazione](#architettura-dellapplicazione) 5. [Modifica di Elementi della Pagina](#modifica-di-elementi-della-pagina) 6. [FunzionalitΓ  Principali](#funzionalitΓ -principali) 7. [Database e Modelli](#database-e-modelli) 8. [Sviluppo e Debug](#sviluppo-e-debug) --- ## πŸ“– Panoramica del Progetto **HTT QRCode** Γ¨ un'applicazione web Laravel per la gestione di articoli industriali con generazione e scansione di codici QR. L'applicazione permette di: - βœ… Gestire un catalogo di articoli con parametri tecnici - βœ… Generare QR Code univoci per ogni articolo - βœ… Stampare etichette con QR Code in formato PDF - βœ… Scansionare QR Code per visualizzare informazioni pubbliche - βœ… Importare articoli da file Excel - βœ… Autenticazione utenti con Laravel Breeze ### Stack Tecnologico - **Backend**: Laravel 12 (PHP 8.2+) - **Frontend**: Blade Templates + TailwindCSS 3 + Alpine.js - **Database**: SQLite (default) / MySQL - **QR Code**: SimpleSoftwareIO/simple-qrcode - **PDF**: Barryvdh/laravel-dompdf - **Excel**: PHPOffice/PhpSpreadsheet - **Build Tool**: Vite --- ## πŸ—οΈ Struttura del Progetto ``` htt-qrcode/ β”œβ”€β”€ app/ β”‚ β”œβ”€β”€ Http/ β”‚ β”‚ β”œβ”€β”€ Controllers/ β”‚ β”‚ β”‚ β”œβ”€β”€ Admin/ β”‚ β”‚ β”‚ β”‚ └── ArticoloController.php # CRUD articoli + QR Code β”‚ β”‚ β”‚ β”œβ”€β”€ ProfileController.php # Gestione profilo utente β”‚ β”‚ β”‚ └── PublicArticoloController.php # Scanner pubblico β”‚ β”‚ └── Requests/ # Form Request validation β”‚ β”œβ”€β”€ Models/ β”‚ β”‚ β”œβ”€β”€ Articolo.php # Model principale β”‚ β”‚ └── User.php # Model utente β”‚ └── Providers/ β”‚ └── AppServiceProvider.php β”‚ β”œβ”€β”€ database/ β”‚ β”œβ”€β”€ migrations/ β”‚ β”‚ β”œβ”€β”€ 0001_01_01_000000_create_users_table.php β”‚ β”‚ └── 2026_01_17_134622_create_articolos_table.php β”‚ └── seeders/ β”‚ β”œβ”€β”€ AdminUserSeeder.php # Crea utente admin β”‚ β”œβ”€β”€ ArticoloSeeder.php # Import Excel + dati fake β”‚ └── DatabaseSeeder.php β”‚ β”œβ”€β”€ resources/ β”‚ β”œβ”€β”€ views/ β”‚ β”‚ β”œβ”€β”€ admin/ β”‚ β”‚ β”‚ └── articoli/ β”‚ β”‚ β”‚ β”œβ”€β”€ index.blade.php # Lista articoli β”‚ β”‚ β”‚ β”œβ”€β”€ create.blade.php # Form creazione β”‚ β”‚ β”‚ β”œβ”€β”€ edit.blade.php # Form modifica β”‚ β”‚ β”‚ β”œβ”€β”€ show.blade.php # Dettaglio articolo β”‚ β”‚ β”‚ └── pdf-qrcodes.blade.php # Template PDF QR β”‚ β”‚ β”œβ”€β”€ public/ β”‚ β”‚ β”‚ β”œβ”€β”€ scanner.blade.php # Pagina scanner β”‚ β”‚ β”‚ └── articolo.blade.php # Vista pubblica articolo β”‚ β”‚ β”œβ”€β”€ layouts/ β”‚ β”‚ β”‚ β”œβ”€β”€ app.blade.php # Layout principale β”‚ β”‚ β”‚ └── guest.blade.php # Layout pubblico β”‚ β”‚ └── components/ # Componenti Blade riutilizzabili β”‚ β”œβ”€β”€ css/ β”‚ β”‚ └── app.css # TailwindCSS β”‚ └── js/ β”‚ β”œβ”€β”€ app.js # Entry point JavaScript β”‚ └── bootstrap.js # Axios config β”‚ β”œβ”€β”€ routes/ β”‚ β”œβ”€β”€ web.php # Rotte principali β”‚ β”œβ”€β”€ auth.php # Rotte autenticazione (Breeze) β”‚ └── console.php β”‚ β”œβ”€β”€ public/ β”‚ β”œβ”€β”€ index.php # Entry point Laravel β”‚ └── build/ # Assets compilati da Vite β”‚ β”œβ”€β”€ config/ # File di configurazione β”œβ”€β”€ storage/ # File storage e cache β”œβ”€β”€ tests/ # Test automatici β”œβ”€β”€ vendor/ # Dipendenze Composer β”‚ β”œβ”€β”€ .env.example # Template variabili ambiente β”œβ”€β”€ composer.json # Dipendenze PHP β”œβ”€β”€ package.json # Dipendenze JavaScript β”œβ”€β”€ artisan # CLI Laravel β”œβ”€β”€ vite.config.js # Configurazione Vite └── tailwind.config.js # Configurazione TailwindCSS ``` --- ## πŸš€ Bootstrap e Installazione ### Prerequisiti Assicurati di avere installato: - **PHP 8.2+** con estensioni: `pdo`, `mbstring`, `xml`, `gd`, `zip` - **Composer** (https://getcomposer.org/) - **Node.js 18+** e **npm** (https://nodejs.org/) - **Git** ### Installazione Passo-Passo #### 1. Clona il Repository ```bash cd /path/to/your/projects git clone htt-qrcode cd htt-qrcode ``` #### 2. Installa le Dipendenze PHP ```bash composer install ``` Questo installerΓ  tutte le dipendenze definite in `composer.json`: - Laravel Framework - Laravel Breeze (autenticazione) - SimpleSoftwareIO QR Code - Barryvdh DomPDF - PHPOffice PhpSpreadsheet #### 3. Configura l'Ambiente ```bash # Copia il file .env.example in .env cp .env.example .env # Genera la chiave dell'applicazione php artisan key:generate ``` #### 4. Configura il Database Apri il file `.env` e configura il database. Per SQLite (default): ```env DB_CONNECTION=sqlite ``` Crea il file database: ```bash touch database/database.sqlite ``` Per MySQL: ```env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=htt_qrcode DB_USERNAME=root DB_PASSWORD=your_password ``` #### 5. Esegui le Migrazioni ```bash php artisan migrate ``` Questo creerΓ  le tabelle: - `users` - Utenti del sistema - `articoli` - Articoli con QR Code - `cache`, `jobs`, `sessions` - Tabelle di sistema #### 6. Popola il Database (Opzionale) ```bash # Crea un utente admin e articoli di esempio php artisan db:seed # Solo utente admin (email: admin@example.com, password: password) php artisan db:seed --class=AdminUserSeeder # Solo articoli di esempio php artisan db:seed --class=ArticoloSeeder ``` #### 7. Installa le Dipendenze Frontend ```bash npm install ``` Questo installerΓ : - Vite - TailwindCSS - Alpine.js - Axios #### 8. Compila gli Asset ```bash # Per sviluppo (con hot reload) npm run dev # Per produzione npm run build ``` #### 9. Avvia il Server di Sviluppo In terminali separati: ```bash # Terminal 1: Server PHP php artisan serve # Terminal 2: Vite (hot reload) npm run dev ``` **OPPURE** usa il comando composer personalizzato che avvia tutto insieme: ```bash composer run dev ``` Questo comando avvia automaticamente: - Server PHP (porta 8000) - Queue listener - Log tail (pail) - Vite dev server #### 10. Accedi all'Applicazione Apri il browser e vai a: - **Homepage**: http://localhost:8000 - **Login**: http://localhost:8000/login - **Dashboard**: http://localhost:8000/dashboard (richiede autenticazione) **Credenziali default** (se hai eseguito il seeder): - Email: `admin@example.com` - Password: `password` --- ## πŸ›οΈ Architettura dell'Applicazione ### Pattern MVC (Model-View-Controller) Laravel segue il pattern MVC: #### **Model** (app/Models/) ```php // Articolo.php - Rappresenta un articolo nel database class Articolo extends Model { protected $fillable = ['codice_articolo', 'ciclo', 'descrizione', ...]; // Generazione automatica QR Code alla creazione protected static function boot() { ... } } ``` #### **Controller** (app/Http/Controllers/) ```php // ArticoloController.php - Gestisce le richieste CRUD class ArticoloController extends Controller { public function index() // GET /admin/articoli public function create() // GET /admin/articoli/create public function store() // POST /admin/articoli public function show() // GET /admin/articoli/{id} public function edit() // GET /admin/articoli/{id}/edit public function update() // PUT /admin/articoli/{id} public function destroy() // DELETE /admin/articoli/{id} } ``` #### **View** (resources/views/) ```blade @foreach ($articoli as $articolo) {{ $articolo->codice_articolo }} ... @endforeach ``` ### Flusso delle Richieste 1. **Richiesta HTTP** β†’ `routes/web.php` 2. **Middleware** (autenticazione, CSRF) β†’ filtra la richiesta 3. **Controller** β†’ elabora la logica 4. **Model** β†’ interagisce con il database 5. **View** β†’ renderizza l'HTML 6. **Risposta HTTP** β†’ ritorna al browser ### Rotte Principali ```php // routes/web.php // Rotte pubbliche Route::get('/', ...); // Homepage Route::get('/scanner', ...); // Scanner QR pubblico Route::get('/articolo/{qr_code}', ...); // Vista articolo pubblico // Rotte autenticate Route::middleware('auth')->group(function () { Route::resource('admin/articoli', ArticoloController::class); Route::get('admin/articoli/{id}/qrcode', ...); // Genera QR Route::get('admin/articoli/{id}/qrcode/download', ...); // Download QR Route::get('admin/articoli-print-qrcodes', ...); // Stampa PDF Route::post('admin/articoli-import', ...); // Import Excel }); ``` --- ## 🎨 Modifica di Elementi della Pagina ### Esempio Pratico: Modificare il Pulsante "Nuovo Articolo" Seguiamo un esempio concreto per capire come modificare la UI dell'applicazione. #### Obiettivo Cambiare il colore e il testo del pulsante "Nuovo Articolo" nella pagina index degli articoli. #### Passo 1: Individua il File Il file Γ¨: `resources/views/admin/articoli/index.blade.php` Puoi trovarlo: - Guardando la route: `Route::resource('admin/articoli', ...)` β†’ metodo `index()` - Il controller ritorna: `view('admin.articoli.index')` β†’ `resources/views/admin/articoli/index.blade.php` #### Passo 2: Trova l'Elemento Apri `resources/views/admin/articoli/index.blade.php` e cerca il pulsante (linea ~16): ```blade + Nuovo Articolo ``` #### Passo 3: Modifica l'Elemento **Prima** (blu): ```blade class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" + Nuovo Articolo ``` **Dopo** (verde con icona): ```blade class="bg-green-600 hover:bg-green-800 text-white font-bold py-2 px-4 rounded shadow-lg" βž• Aggiungi Articolo ``` #### Passo 4: Salva e Verifica 1. Salva il file 2. Se hai `npm run dev` attivo, Vite rileva automaticamente il cambiamento 3. Ricarica la pagina nel browser 4. Il pulsante sarΓ  ora verde con il nuovo testo! ### Anatomia delle Classi TailwindCSS ``` bg-green-600 β†’ Background verde hover:bg-green-800 β†’ Background verde scuro al passaggio del mouse text-white β†’ Testo bianco font-bold β†’ Testo in grassetto py-2 β†’ Padding verticale (sopra/sotto) px-4 β†’ Padding orizzontale (sinistra/destra) rounded β†’ Bordi arrotondati shadow-lg β†’ Ombra grande ``` ### Altri Esempi Comuni #### 1. Modificare il Titolo della Pagina **File**: `resources/views/admin/articoli/index.blade.php` (linea ~4) ```blade

{{ __('Gestione Articoli') }}

πŸ“¦ Catalogo Articoli

``` #### 2. Cambiare i Colori delle Righe della Tabella **File**: `resources/views/admin/articoli/index.blade.php` (linea ~73) ```blade ``` #### 3. Modificare il Placeholder della Ricerca **File**: `resources/views/admin/articoli/index.blade.php` (linea ~35) ```blade placeholder="Cerca per codice, descrizione o ciclo..." placeholder="πŸ” Inserisci il codice articolo o una parola chiave..." ``` #### 4. Aggiungere un Messaggio di Benvenuto **File**: `resources/views/admin/articoli/index.blade.php` Aggiungi dopo il tag `...`: ```blade

πŸ‘‹ Benvenuto nel gestionale!

Gestisci i tuoi articoli e genera QR Code in pochi click.

``` ### Workflow di Modifica Completo ``` 1. Identifica la rotta β†’ routes/web.php 2. Trova il controller β†’ app/Http/Controllers/ 3. Individua la view β†’ resources/views/ 4. Modifica il template Blade 5. (Opzionale) Modifica il CSS β†’ resources/css/app.css 6. (Opzionale) Aggiungi JS β†’ resources/js/app.js 7. Salva e verifica nel browser ``` --- ## βš™οΈ FunzionalitΓ  Principali ### 1. Gestione Articoli (CRUD) - **Crea**: Form con validazione per tutti i campi - **Leggi**: Lista paginata con ricerca - **Aggiorna**: Modifica dati esistenti - **Elimina**: Cancellazione con conferma ### 2. QR Code **Generazione Automatica**: ```php // Model Articolo.php - boot() method $articolo->qr_code = $articolo->id . '-' . time(); // Esempio: "42-1737235200" ``` **Download Singolo**: - PNG 300x300px, error correction H - Formato nome: `qr-{codice_articolo}.png` **Stampa Multipla**: - Selezione multipla con checkbox - PDF A4 con griglia di QR Code - Template: `resources/views/admin/articoli/pdf-qrcodes.blade.php` ### 3. Import Excel **Formato Supportato**: XLSX, XLS **Colonne Richieste**: ``` UBICAZIONE β”œβ”€β”€ Codice Articolo (obbligatorio) β”œβ”€β”€ Ciclo β”œβ”€β”€ Diametro β”œβ”€β”€ Descrizione β”œβ”€β”€ Posizione └── Quantita PARAMETRI TECNOLOGICI β”œβ”€β”€ Tipo Lavorazione β”œβ”€β”€ Materiale da lavorare β”œβ”€β”€ Maximum Thickness β”œβ”€β”€ Speed RPM β”œβ”€β”€ Feed β”œβ”€β”€ Max Thrust A β”œβ”€β”€ Min Torque A └── Quantita Fori ``` **ModalitΓ **: - **Merge** (default): aggiorna esistenti, crea nuovi - **Clean Import**: elimina tutto e re-importa ### 4. Scanner Pubblico - Accessibile senza autenticazione - Route: `/scanner` - Utilizza API HTML5 per fotocamera - Reindirizza a `/articolo/{qr_code}` dopo scansione --- ## πŸ’Ύ Database e Modelli ### Tabella `articoli` ```sql CREATE TABLE articoli ( id INTEGER PRIMARY KEY AUTOINCREMENT, codice_articolo VARCHAR(255) UNIQUE NOT NULL, ciclo VARCHAR(255), diametro VARCHAR(255), descrizione TEXT, posizione VARCHAR(255), quantita INTEGER DEFAULT 0, tipo_lavorazione VARCHAR(255), materiale_lavorare VARCHAR(255), maximum_thickness VARCHAR(255), speed_rpm INTEGER, feed DECIMAL(8,2), max_thrust_a VARCHAR(255), min_torque_a VARCHAR(255), quantita_fori INTEGER, qr_code VARCHAR(255) UNIQUE, created_at TIMESTAMP, updated_at TIMESTAMP ); ``` ### Model Eloquent ```php // Query Builder Examples // Tutti gli articoli Articolo::all(); // Paginati Articolo::paginate(15); // Con ricerca Articolo::where('codice_articolo', 'like', "%{$search}%") ->orWhere('descrizione', 'like', "%{$search}%") ->get(); // Trova per QR Code Articolo::where('qr_code', $qrCode)->firstOrFail(); // Crea nuovo Articolo::create([ 'codice_articolo' => 'ART001', 'descrizione' => 'Descrizione...', ... ]); // Aggiorna $articolo->update(['quantita' => 100]); // Elimina $articolo->delete(); ``` --- ## πŸ› οΈ Sviluppo e Debug ### Comandi Artisan Utili ```bash # Crea controller php artisan make:controller NomeController # Crea model con migration php artisan make:model NomeModel -m # Crea migration php artisan make:migration create_nome_table # Esegui migrazioni php artisan migrate # Rollback ultima migrazione php artisan migrate:rollback # Reset database php artisan migrate:fresh --seed # Crea seeder php artisan make:seeder NomeSeeder # Pulisci cache php artisan cache:clear php artisan config:clear php artisan view:clear # Lista rotte php artisan route:list # Avvia Tinker (REPL) php artisan tinker ``` ### Debug con Laravel Debugbar Installa (opzionale): ```bash composer require barryvdh/laravel-debugbar --dev ``` Mostra query SQL, variabili, performance, ecc. ### Logs ```bash # Monitora i log in tempo reale php artisan pail # Oppure tail -f storage/logs/laravel.log ``` ### Testing ```bash # Esegui tutti i test php artisan test # Test specifico php artisan test --filter NomeTest ``` ### Vite + HMR (Hot Module Replacement) Durante lo sviluppo, Vite rileva automaticamente le modifiche a: - `resources/css/app.css` - `resources/js/app.js` - `resources/views/**/*.blade.php` E ricarica il browser automaticamente! --- ## πŸ“š Risorse Aggiuntive - **Laravel Docs**: https://laravel.com/docs/12.x - **Tailwind CSS**: https://tailwindcss.com/docs - **Alpine.js**: https://alpinejs.dev/ - **Simple QR Code**: https://www.simplesoftwareio.com/docs/simple-qrcode - **DomPDF**: https://github.com/barryvdh/laravel-dompdf --- ## 🀝 Supporto Per problemi o domande: 1. Controlla i log: `storage/logs/laravel.log` 2. Verifica le variabili in `.env` 3. Consulta la documentazione Laravel 4. Usa `php artisan tinker` per testare query --- **Buon sviluppo! πŸš€**