diff --git a/app/Console/Commands/GesconImportStabiliBankNotesCommand.php b/app/Console/Commands/GesconImportStabiliBankNotesCommand.php new file mode 100644 index 0000000..06c2f58 --- /dev/null +++ b/app/Console/Commands/GesconImportStabiliBankNotesCommand.php @@ -0,0 +1,143 @@ +info('Avvio importazione note e conti correnti da Stabili.mdb...'); + + $candidateMdbs = [ + $this->option('mdb'), + '/mnt/gescon-archives/gescon/dbc/Stabili.mdb', + '/mnt/gescon-archives/gescon/DBC/Stabili.mdb', + '/mnt/gescon-archives/gescon_vuoto/DBC/Stabili.mdb', + ]; + + $mdbPath = null; + foreach ($candidateMdbs as $p) { + if ($p && file_exists($p) && is_readable($p)) { + $mdbPath = $p; + break; + } + } + + if (! $mdbPath) { + $this->error('File Stabili.mdb non trovato.'); + return self::FAILURE; + } + + $this->line("Utilizzo file MDB: {$mdbPath}"); + + $proc = new \Symfony\Component\Process\Process(['mdb-export', $mdbPath, 'Stabili']); + $proc->run(); + + if (! $proc->isSuccessful()) { + $this->error('Impossibile eseguire mdb-export.'); + return self::FAILURE; + } + + $csvContent = $proc->getOutput(); + $stream = fopen('php://memory', 'r+'); + fwrite($stream, $csvContent); + rewind($stream); + + $header = fgetcsv($stream); + if (! $header) { + fclose($stream); + $this->error('Header CSV non valido.'); + return self::FAILURE; + } + + $updated = 0; + while (($data = fgetcsv($stream)) !== false) { + if (count($data) === count($header)) { + $row = array_combine($header, $data); + $codLegacy = sprintf('%04d', (int) ($row['cod_stabile'] ?? 0)); + $den = trim((string) ($row['denominazione'] ?? '')); + $note1 = trim((string) ($row['note1'] ?? '')); + $note2 = trim((string) ($row['Note'] ?? '')); + $banca1 = trim((string) ($row['Banca'] ?? '')); + $ibanBanca1 = trim((string) ($row['IBAN_Banca'] ?? '')); + $ccBanca1 = trim((string) ($row['Banca_num_cc'] ?? '')); + $abi1 = trim((string) ($row['ABI'] ?? '')); + $cab1 = trim((string) ($row['CAB'] ?? '')); + $sia1 = trim((string) ($row['SIA'] ?? '')); + $cin1 = trim((string) ($row['CIN'] ?? '')); + + $banca2 = trim((string) ($row['Banca2'] ?? '')); + $ibanBanca2 = trim((string) ($row['IBAN_Banca2'] ?? '')); + $ccBanca2 = trim((string) ($row['Banca2_num_cc'] ?? '')); + + $numCcp1 = trim((string) ($row['num_ccp'] ?? '')); + $ibanPosta1 = trim((string) ($row['IBAN_Posta'] ?? '')); + $numCcp2 = trim((string) ($row['num_ccp_2'] ?? '')); + $ibanPosta2 = trim((string) ($row['IBAN_Posta_2'] ?? '')); + + $stabile = Stabile::query() + ->where('codice_stabile', $codLegacy) + ->orWhere('cod_stabile', $codLegacy) + ->orWhere('codice_stabile', ltrim($codLegacy, '0')) + ->first(); + + if ($stabile) { + $noteFull = array_filter([$note1, $note2]); + $noteStr = implode("\n", $noteFull); + + $bancherieAdv = [ + 'banca_1' => [ + 'banca' => $banca1, + 'iban' => $ibanBanca1, + 'conto_cc' => $ccBanca1, + 'abi' => $abi1, + 'cab' => $cab1, + 'sia' => $sia1, + 'cin' => $cin1, + ], + 'banca_2' => [ + 'banca' => $banca2, + 'iban' => $ibanBanca2, + 'conto_cc' => $ccBanca2, + ], + 'posta_1' => [ + 'num_ccp' => $numCcp1, + 'iban' => $ibanPosta1, + ], + 'posta_2' => [ + 'num_ccp' => $numCcp2, + 'iban' => $ibanPosta2, + ], + ]; + + $existingAdv = is_array($stabile->configurazione_avanzata) ? $stabile->configurazione_avanzata : []; + $mergedAdv = array_merge($existingAdv, ['conti_correnti' => $bancherieAdv]); + + $stabile->update([ + 'note' => $noteStr ?: $stabile->note, + 'banca_principale' => $banca1 ?: $stabile->banca_principale, + 'iban_principale' => $ibanBanca1 ?: $stabile->iban_principale, + 'banca_secondaria' => $banca2 ?: $stabile->banca_secondaria, + 'iban_secondario' => ($ibanBanca2 ?: $ibanPosta1) ?: $stabile->iban_secondario, + 'configurazione_avanzata'=> $mergedAdv, + ]); + + $updated++; + $this->line(" ✓ Stabile {$codLegacy} ({$den}): Note e Conti Correnti aggiornati."); + } + } + } + fclose($stream); + + $this->info("Completata sincronizzazione conti correnti per {$updated} stabili!"); + return self::SUCCESS; + } +} diff --git a/directives/ANAGRAFICHE_MAPPING_LEGACY.md b/directives/ANAGRAFICHE_MAPPING_LEGACY.md index 1d3bf5d..73be45d 100644 --- a/directives/ANAGRAFICHE_MAPPING_LEGACY.md +++ b/directives/ANAGRAFICHE_MAPPING_LEGACY.md @@ -86,8 +86,22 @@ ## 13. Strategia Display Desktop (High-Density) & Mobile (Adaptive Responsive Ca - **Desktop (High-Density Grid)**: Layout multi-colonna ad elevata densità informativa per sfruttare la risoluzione monitor del PC ed analizzare griglie contabili, millesimi e badge recapiti. - **Mobile (Responsive Adaptive Cards)**: Schede adattive collassabili per smartphone e tablet, ottimizzate con target touch per consultazione e gestione rapida in mobilità. -## 14. Coesistenza Temporanea in Contemporanea (Legacy MDB <-> NetGescon) -- **Modalità Parallela (Dual-Run)**: Durante la fase di migrazione e transizione, il sistema supporta il lavoro in contemporanea tra il vecchio software Legacy MDB ed il nuovo NetGescon (MySQL / PostgreSQL). -- **Importazione Differenziale Incrementale**: Le pipeline di sincronizzazione (`php artisan gescon:load-mdb-staging --incremental`) importano le novità e le modifiche apportate sul legacy senza mai distruggere o resettare i dati già consolidati in NetGescon (il reset richiede l'opzione esplicita `--reset-temp`). +## 14. Coesistenza Temporanea e Autorità della Sorgente Legacy MDB +- **Autorità della Sorgente**: Durante la fase di lavoro in contemporanea tra il vecchio gestionale MDB ed il nuovo NetGescon, **i dati del Legacy MDB sono la sorgente di verità primaria ed autoritativa**. +- **Flusso di Sincronizzazione Unidirezionale**: Eventuali aggiornamenti o modifiche effettuate sul Legacy MDB sovrascrivono e sincronizzano i dati verso NetGescon (Legacy MDB $\rightarrow$ NetGescon). NetGescon non sovrascrive mai al contrario i dati del MDB originale. +- **Importazione Differenziale Incrementale**: Il comando `php artisan gescon:load-mdb-staging --incremental` recepisce periodicamente le variazioni del legacy conservando la coerenza storica. + +## 15. Importazione Note & Conti Correnti Bancari/Postali dallo Stabile (`Stabili.mdb`) +- **Comando di importazione**: `php artisan gescon:import-stabili-bank-notes` +- Estrae da `Stabili.mdb` (tabella `Stabili`): + - **Note Stabile**: `note1` + `Note` (salvate nel campo `note`). + - **Coordinate Bancarie 1**: `Banca`, `IBAN_Banca`, `Banca_num_cc`, `ABI`, `CAB`, `SIA`, `CIN`. + - **Coordinate Bancarie 2 & Postali**: `Banca2`, `IBAN_Banca2`, `num_ccp` (CCP), `IBAN_Posta`, `num_ccp_2`, `IBAN_Posta_2`. +- I dati sono strutturati ed archiviati in `stabili.configurazione_avanzata['conti_correnti']` e nei campi diretti `iban_principale`, `banca_principale`, `iban_secondario`, `banca_secondaria`. + +## 16. Sistema Grafico Unificato per l'Anagrafica Fornitori (`/admin-filament/gescon/anagrafica/fornitori`) +- **Design System Coerente**: La vista Fornitori condivide ed applica il design grafico unificato delle tabelle e schede anagrafiche del sistema (`FornitoriArchivio.php`). +- **Wireframe ASCII di Riferimento**: `skill-netgescon/ui-wireframes/fornitori-anagrafica.md`. +- **Filtri Tag & P.IVA**: Supporta la ricerca rapida per Ragione Sociale, Partita IVA, Codice Fiscale, recapiti e tag di categoria (es. *Idraulici, Elettricisti, Pulizie, Ascensori*). diff --git a/skill-netgescon/ui-wireframes/fornitori-anagrafica.md b/skill-netgescon/ui-wireframes/fornitori-anagrafica.md new file mode 100644 index 0000000..235815e --- /dev/null +++ b/skill-netgescon/ui-wireframes/fornitori-anagrafica.md @@ -0,0 +1,69 @@ +# ASCII Wireframe - Gestione Fornitori & Anagrafica Accreditate (/admin-filament/gescon/anagrafica/fornitori) + +## 1. VISUALIZZAZIONE DESKTOP (High-Density Multi-Column Grid) + +```text ++-------------------------------------------------------------------------------------------------------------------+ +| NETGESCON - ANAGRAFICA UNIFICATA STABILI & FORNITORI [SuperAdmin: Michele] | ++-------------------------------------------------------------------------------------------------------------------+ +| PATH: Home > NetGescon > Anagrafica > Fornitori & Imprese Accreditate | ++-------------------------------------------------------------------------------------------------------------------+ +| | +| [ + NUOVO FORNITORE ] [ 🔄 IMPORTA DA LEGACY MDB ] [ 🔍 Cerca per Ragione Sociale, P.IVA, CF, Tag... ] | +| | +| FILTRI TAG CATEGORIA: [ Tutti ▾ ] [ Idraulici ] [ Elettricisti ] [ Pulizie ] [ Ascensori ] [ Amministrativi ] | +| | +| +----+----------------------------+-----------------+-----------------------+-------------------+-----------------+ +| | ID | RAGIONE SOCIALE / IMPRESA | P.IVA / C.F. | RECAPITI MULTICANALE | CATEGORIE / TAGS | AZIONI | +| +----+----------------------------+-----------------+-----------------------+-------------------+-----------------+ +| | 10 | TECNOREPAIR S.R.L. | 01234567890 | ✉ info@tecnorepair.it | [Idraulico] | [Modifica Scheda| +| | | | | 📱 335-9988776 | [Elettricista] | [Assegna Ticket | +| | 11 | CLEAN & SHINE PULIZIE | 09876543210 | ✉ ordini@cleanshine.it| [Pulizie Parti C.]| [Modifica Scheda| +| | 12 | ASCENSORI ROMA NORD S.A.S. | RMCNSC65L11H501K| ☎ 06-44332211 | [Manut. Ascensore]| [Modifica Scheda| +| | 13 | EDILIZIA SUBALPINA S.R.L. | 05544332211 | ✉ cantiere@subalpina.it| [Edile] [Tetti] | [Modifica Scheda| +| +----+----------------------------+-----------------+-----------------------+-------------------+-----------------+ +| Mostrati 4 di 4 fornitori accreditati per gli stabili dell'amministratore | ++-------------------------------------------------------------------------------------------------------------------+ +| DETTAGLIO ED EDITING SCHEDA FORNITORE (#10 TECNOREPAIR S.R.L.) | +| | +| [ Ragione Sociale: TECNOREPAIR S.R.L. ] | +| [ Partita IVA: 01234567890 ] [ Codice Fiscale: 01234567890 ] | +| [ Indirizzo: Via Ottaviano 45 ] [ Città: ROMA ] [ CAP: 00192 ] | +| [ Email Ordini: info@tecnorepair.it ] [ PEC: tecnorepair@pec.it ] | +| [ Telefono Studio: 06 99887766 ] [ Cellulare Urgenze: 335 9988776 ] | +| | +| CONTI CORRENTI & COORDINATE BANCARIE PER BONIFICI: | +| • Banca: Banca Nazionale del Lavoro - Filiale Roma Prati | +| • IBAN: IT60X0100503301000000123456 (Cin: X, ABI: 01005, CAB: 03301) | +| | +| CATEGORIE E TAGS OPERATIVI: [Idraulico] [Elettricista] [Pronto Intervento H24] | +| | +| [ SALVA SCHEDA FORNITORE ] [ ANNULLA ] [ ASSEGNA NUOVO TICKET INTERVENTO ] | ++-------------------------------------------------------------------------------------------------------------------+ +``` + +## 2. VISUALIZZAZIONE RESPONSIVE MOBILE (Adaptive Collapsible Card View) + +```text ++--------------------------------------------------+ +| 📱 NETGESCON FORNITORI [SuperAdmin: M] | ++--------------------------------------------------+ +| ANAGRAFICA FORNITORI ACCREDITATI | +| [ + NUOVO FORNITORE ] [ 🔍 Cerca... ] | ++--------------------------------------------------+ +| 🛠️ TECNOREPAIR S.R.L. (ID #10) | +| • P.IVA: 01234567890 | Tags: [Idraulico] [Elect] | +| ✉ info@tecnorepair.it | 📱 335-9988776 | +| 🏦 IBAN: IT60X0100503301000000123456 | +| ──────────────────────────────────────────────── | +| AZIONI APPARATO MOBILE: | +| [ ✏️ Modifica Scheda ] | +| [ 🛠️ Assegna Ticket Intervento ] | +| [ 📱 Chiama subito ] [ 📧 Invia Ordine ] | ++--------------------------------------------------+ +| 🧹 CLEAN & SHINE PULIZIE (ID #11) | +| • P.IVA: 09876543210 | Tags: [Pulizie] | +| ✉ ordini@cleanshine.it | +| [ ✏️ Modifica Scheda ] | ++--------------------------------------------------+ +```