Cosa fa questo modulo
Modulo di esportazione dati da datatable applicativi verso file scaricabili in formato Excel (XLSX, XLS, CSV, ODS) tramite maatwebsite/laravel-excel (wrapper PhpSpreadsheet de facto standard ecosistema Laravel) e in formato PDF tramite barryvdh/laravel-dompdf (default HTML→PDF semplice) o barryvdh/laravel-snappy (wkhtmltopdf, render più fedele per layout complessi) o spatie/browsershot (headless Chrome via Puppeteer/Playwright, miglior qualità per CSS moderno e webfont). Excel — architettura: classe Export per dataset (es. OrdersExport, BookingsExport, InvoicesExport, PatientsExport) che implementa interfacce Maatwebsite (FromQuery per query Eloquent lazy chunked, FromCollection per dataset piccoli, FromArray, FromIterator per stream custom; WithHeadings per riga intestazione, WithMapping per trasformare ogni riga in array di celle, WithColumnFormatting per format numerici/date/valuta/percentuali, WithStyles per stili (header bold + sfondo, righe alternate zebra, bordi), WithColumnWidths o ShouldAutoSize per larghezza, WithEvents per macro su AfterSheet (freeze panes, filtri colonna autofilter, conditional formatting, totali in fondo, gruppi righe collassabili), WithCustomStartCell per offset top, WithDrawings per logo/immagini embedded, WithTitle e WithMultipleSheets per file multi-sheet (es. fatturato + dettaglio righe + grafico). Performance: FromQuery con chunkSize configurato (default 1000) + queue export (ShouldQueue + Queueable) per dataset >10K righe, scrittura su disk via store($filename, $disk) e notifica utente via mail/notification con link download quando job completa (NotifiesOnFailure su fallimento), batched per multi-sheet, memory limit gestito via ini_set in job. Formati colonna: NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE, FORMAT_DATE_DDMMYYYY, FORMAT_PERCENTAGE_00, FORMAT_NUMBER_COMMA_SEPARATED1, custom per IVA/CF/IBAN, locale italiano (decimal comma, thousand dot). Sheet multipli: builder fluente per fatture (sheet riepilogo + sheet righe + sheet IVA), report periodici (un sheet per mese), inventario (sheet per categoria), bookings con sheet attivi + cancellati + draft. CSV: opzione delimiter (; per Italia/Excel, , internazionale), enclosure ", BOM UTF-8 per Excel Windows, encoding ISO-8859-1 per legacy. PDF — architettura: view Blade dedicata (resources/views/exports/pdf/{report}.blade.php) con layout base (header con logo brand + dati azienda + intestazione documento, footer con paginazione + dati legali P.IVA/sede/REA + data generazione + URL/QR verifica opzionale, watermark CONFIDENZIALE/BOZZA opzionale, page break controllabili), CSS print-friendly (size A4/A3 portrait/landscape, margini configurabili, font safe Arial/DejaVu Sans per supporto unicode it/en/es/de/fr/русский/中文/日本語), tabelle con thead repeated su page break, totali in fondo, righe alternate. DomPDF: HTML+CSS2 base, leggero (no dipendenze sistema), limitazioni CSS3/flex/grid, buono per fatture/ricevute/contratti standard. Snappy/wkhtmltopdf: render WebKit, ottimo per layout complessi e fedeltà PDF (richiede binario wkhtmltopdf installato server, deprecato upstream ma stabile). Browsershot/Chrome headless: render moderno (flex, grid, webfont Google, SVG, chart Chart.js, JS), richiede Node+Puppeteer+Chromium, ideale per PDF complessi (preventivi, dashboard, report con grafici). Routing scelta: factory pattern che sceglie driver in base a complessità template e a flag config (semplice→DomPDF, moderno→Browsershot). UI utente: pulsanti Export su ogni datatable (Excel/CSV/PDF) con dropdown opzioni (export filtered/all, scelta colonne visibili, scelta sheet, formato data, separator CSV, password protect PDF opzionale), tooltip preview formato. Dataset grandi: per export >50K righe in foreground sostituito da job in background con email/notification quando pronto, link valido 7 giorni su S3/disk dedicato con signed URL, progress bar via broadcast Pusher/Reverb opzionale, retry idempotente su fallimento. Personalizzazione branding: settings UI per logo, palette colori, font (locale), footer custom per cliente whitelabel, multi-azienda (header dinamico per company di appartenenza utente). Filtri rispettati: l'export rispetta sempre i filtri/ordering/search della datatable origine (passaggio request params alla query export), esclude colonne sensibili per ruolo (es. operatore non vede colonna CF/IBAN), supporto column visibility persistito per utente. Sicurezza: signed URL per download (Storage::temporaryUrl), token TTL breve, audit log export (chi ha esportato cosa, quante righe, filtri applicati) integrato con #8330 audit log, rate limit export anti-abuso (max N export/ora per utente), watermark utente in PDF (email/timestamp) per identificazione leak, mascheramento PII opzionale (CF parziale, IBAN ultime 4), restrizione per ruolo (admin → tutto, operatore → solo own scope, agente → solo proprie commissioni), antivirus scan file prima di pubblicare se aperto a utenti esterni. Compliance: GDPR (export PII tracciato in registro trattamenti, motivazione export documentata, retention file 7-30 giorni poi soft-delete), fatturazione elettronica IT (PDF non sostituisce XML SdI ma utile come copia di cortesia), conservazione digitale a norma (per documenti legali serve firma+timbro temporale, gestita da modulo dedicato, qui solo export). Template engine: motore Blade per PDF, helper @currency, @date, @percentage, @cf_masked, @iban_masked, partial header/footer riusabili tra report, multi-lingua via __() con file translation per i label. Casi d'uso: export elenco prenotazioni/ordini per giorno/settimana/mese, export anagrafica clienti per import CRM esterno, export listino prezzi PDF per stampa cartacea/email, export estratto conto fornitore, export report fatturato per commercialista (Excel multi-sheet), export riepilogo provvigioni agenti, export reportistica HR (presenze, ferie, payroll preview), export inventario magazzino, export liste appuntamenti medici/ristorante, export pratiche legali, report periodico schedulato (vedi #8344 scheduler) salvato su S3 e inviato per email. Integrazioni: gestionali Footility (Casarile, Holiday Self Drive, Altramusica, TMK) hanno tutti datatable con export; e-commerce (export ordini Shopify/Woo); admin Filament/Nova export nativo enhanced via questo modulo; mail (#8331) per invio file generati; queue (#dipendenze) per background. Differenza da #8341 GA4/analytics export (lì è export metrics aggregati da provider esterno, qui è export dati applicativi RDBMS), da #8326 reportistica/dashboard (lì visualizzazione interattiva, qui dump tabellare offline), da fatturazione elettronica IT (lì XML SdI legale, qui PDF cortesia/Excel operativo). Costo: 1 giorno setup libreria + classe Export base, 0.3-1 giorno per nuovo report (template Excel/PDF, mapping colonne, filtri), 1-2 giorni per dashboard branding multi-tenant + scheduler reportistica.
Esempi d'uso