Cosa fa questo modulo
Modulo foundation che fornisce uno scaffolding CRUD generico per gestire qualunque anagrafica applicativa (clienti, fornitori, agenti, pazienti, mezzi, prodotti, listini, sedi, dipendenti, contatti, lead) tramite componenti Livewire 3 riusabili con datatable server-side ricca di funzionalità e form modal per create/update validati, evitando di ri-implementare from scratch le stesse operazioni su ogni nuovo modello. Architettura: classe base AbstractAnagraficaResource (config-driven) che dichiara model, label singolare/plurale, icona, colonne datatable (chiave, label, sortable, searchable, filtrabile, formatter callback, visibilità per ruolo, badge/pill per enum, link a entità correlata), filtri (testuali con LIKE, select con opzioni statiche o query dinamica, date range con preset oggi/settimana/mese/trimestre/anno/custom, boolean tri-state, multi-select tag), form schema (campi raggruppati in tab/sezioni, tipi text/email/tel/url/number/decimal/date/datetime/select/multiselect/textarea/wysiwyg-tinymce/file-upload con dropzone/image-crop, repeatable/relation belongsToMany pivot, conditional show/required basato su altri campi, regole validation Laravel inline o FormRequest dedicato, default e auto-suggest), azioni di riga (view drawer, edit modal, delete con conferma + motivo opzionale, duplicate, archive/restore soft delete, custom callback per workflow business come «invia welcome email», «sincronizza CRM», «genera fattura»), azioni bulk (delete selected, export selected, change status, assegna a operatore, tag bulk apply, send mail mass, merge duplicati). Componente Livewire DataTable: paginazione server-side (default 25 righe, scelta utente 10/25/50/100/250 persistita in cookie/session), sort multi-colonna (toggle asc/desc, indicatore visivo, priorità), search globale debounced 300ms con full-text MySQL/PostgreSQL o LIKE multi-colonna o Scout/Meilisearch/Typesense quando configurato, filtri sidebar collassabile con badge contatore filtri attivi e pulsante reset, persistenza filtri/sort/page in querystring per shareability e back/forward browser, selezione righe (checkbox singola + master + select all across pages con count e clear), colonne riordinabili e show/hide persistita per utente, sticky header e first column su scroll, righe espandibili per drill-down (es. ordini di un cliente, righe di una fattura), inline edit per campi semplici (toggle bool, select status), keyboard navigation (frecce, enter per open, esc per close), loading skeleton + empty state illustrato + error state con retry, accessibilità ARIA, responsive con card view sotto md breakpoint. Form modal/drawer (alternativi via prop): wire:model lazy/defer/blur configurabile per ridurre roundtrip, validation real-time on blur con messaggi inline localizzati, auto-save bozza in localStorage anti-perdita, dirty-state warning su chiusura/navigation, copia-incolla da Excel su campi tabellari, autocomplete remoto belongsTo (debounced search async via wire:method, creazione inline «+ Nuovo» con sub-modal se il related model è registrato), upload file con preview e progress, signed URL per scaricare file privati, CF/P.IVA validator italiano integrato (mod11 + check Anagrafe Tributaria opzionale), IBAN validator con BIC lookup, indirizzo con autocomplete Google Places/Nominatim + estrazione provincia/CAP/ISTAT, telefono con prefisso internazionale (libphonenumber), email con MX check opzionale, multi-step wizard per anagrafiche complesse. Export: integrazione diretta con #8328 (Excel/PDF), rispetto filtri attivi, scelta colonne, push in coda per >5K righe con notifica. Audit log: ogni create/update/delete tracciato automaticamente via #8330 con diff old↔new (esclusione campi sensibili). Permessi: integrazione con spatie/laravel-permission per gating CRUD per ruolo (view-any/view/create/update/delete/restore/force-delete) + scope owner/team via Policy, hidden fields per ruolo (es. operatore non vede note interne), readonly mode per ruolo viewer. Soft delete + restore: archive con motivo, recycle bin filtrabile dedicato con bulk restore/force-delete, scheduled purge >N giorni. Import: CSV/Excel via modulo dedicato (mapping colonne, dry-run preview errori, dedup su chiavi naturali, rollback su errori fatali, log row-level), batch upsert idempotente. Multi-tenancy: scope automatico per company/team via global scope su model, supporto multi-azienda con switch tenant in topbar. Localizzazione: label/messaggi via __() per IT/EN/altre, formati data/numeri/valuta locali. Performance: query ottimizzata (select solo colonne visibili, eager load relazioni necessarie, cache count per dataset grandi se filtri assenti, indici DB suggeriti dal modulo via comando artisan suggest:indexes), virtual scroll opzionale per liste lunghe, debounce input, ottimizzazione query Livewire (wire:model.lazy default su filtri), morph chunk per export, paginazione cursor su tabelle >1M righe. UI: design system Footility/Tailwind, dark mode, dense/comfortable mode, icone lucide/heroicons, toast notifications dopo azioni, conferma distruttive con modal + typing confirm per delete massivo, breadcrumbs e quick filters chip. Generator: comando artisan make:anagrafica {Model} che scaffolda Resource class, view Blade, route, policy, factory, seed, migration suggerita, partendo da schema DB esistente (introspezione doctrine/dbal) o da prompt interattivo. Casi d'uso: gestionali (clienti Casarile/Holiday/Altramusica/TMK, fornitori, dipendenti, mezzi, listini), CRM (lead, contatti, opportunità, account), e-commerce (prodotti, categorie, varianti, magazzini), sanità (pazienti, prestazioni, sale), legale (pratiche, controparti, documenti), education (studenti, corsi, docenti), HR (candidati, assunti, contratti), real estate (immobili, proprietari, conduttori). Differenza da Filament/Nova/Backpack admin generators (prodotti commerciali general-purpose con curva di apprendimento e licenza): qui scaffolding custom owned, integrato col design system Footility, allineato con #8328 export, #8330 audit log, #8331 mail. Differenza da datatable statiche jQuery DataTables legacy (no reattività server-side native, no validazione integrata, no scope multi-tenant). Costo: 2-3 giorni componente base AbstractAnagraficaResource + datatable Livewire, 0.5-1 giorno per nuova anagrafica registrata (config schema + form + colonne + policy), 1-2 giorni generator artisan + introspezione DB.
Esempi d'uso