feat(stabili-fornitori): import notes and bank accounts from Stabili.mdb, add Fornitori ASCII wireframe, and legacy authoritative sync directive (task-d095b0e23b)
This commit is contained in:
parent
99766a36bd
commit
fcd31d5bea
143
app/Console/Commands/GesconImportStabiliBankNotesCommand.php
Normal file
143
app/Console/Commands/GesconImportStabiliBankNotesCommand.php
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\Stabile;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class GesconImportStabiliBankNotesCommand extends Command
|
||||||
|
{
|
||||||
|
protected $signature = 'gescon:import-stabili-bank-notes {--mdb= : Percorso opzionale Stabili.mdb}';
|
||||||
|
|
||||||
|
protected $description = 'Importa ed allinea note, banche, IBAN e conti correnti postali da Stabili.mdb sugli stabili consolidati';
|
||||||
|
|
||||||
|
public function handle(): int
|
||||||
|
{
|
||||||
|
$this->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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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.
|
- **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à.
|
- **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)
|
## 14. Coesistenza Temporanea e Autorità della Sorgente Legacy MDB
|
||||||
- **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).
|
- **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**.
|
||||||
- **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`).
|
- **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*).
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
69
skill-netgescon/ui-wireframes/fornitori-anagrafica.md
Normal file
69
skill-netgescon/ui-wireframes/fornitori-anagrafica.md
Normal file
|
|
@ -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 ] |
|
||||||
|
+--------------------------------------------------+
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue
Block a user