From cde3fb0e823bb648ad87c51dce12c489e38064ce Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Tue, 3 Dec 2024 13:20:42 +0100 Subject: [PATCH] feat: gestione flag aggiunta e/o aggiornamento righe import --- modules/anagrafiche/src/Import/CSV.php | 27 +++++++----- modules/articoli/src/Import/CSV.php | 21 ++++++--- modules/impianti/src/Import/CSV.php | 23 ++++++---- modules/import/actions.php | 2 +- modules/import/edit.php | 12 ++++- modules/interventi/src/Import/CSV.php | 8 +++- modules/listini_cliente/src/Import/CSV.php | 7 ++- modules/partitario/src/Import/CSV.php | 51 +++++++++++++++------- modules/preventivi/src/Import/CSV.php | 7 ++- src/Importer/CSVImporter.php | 6 +-- src/Importer/ImporterInterface.php | 4 +- 11 files changed, 114 insertions(+), 54 deletions(-) diff --git a/modules/anagrafiche/src/Import/CSV.php b/modules/anagrafiche/src/Import/CSV.php index d581b703d..822001564 100644 --- a/modules/anagrafiche/src/Import/CSV.php +++ b/modules/anagrafiche/src/Import/CSV.php @@ -235,7 +235,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); @@ -248,6 +248,21 @@ class CSV extends CSVImporter unset($record['cognome']); unset($record['nome']); + // Ricerca di eventuale anagrafica corrispondente sulla base del campo definito come primary_key (es. codice) + if (!empty($primary_key)) { + $anagrafica = Anagrafica::where($primary_key, '=', trim((string) $record[$primary_key]))->first(); + } + + // Controllo se creare o aggiornare il record + if (($anagrafica && !$update_record) || (!$anagrafica && !$add_record)) { + return; + } + + // Se non trovo nessuna anagrafica corrispondente, allora la creo + if (empty($anagrafica)) { + $anagrafica = Anagrafica::build($record['ragione_sociale']); + } + // Individuazione del tipo dell'anagrafica $tipologie = []; if (!empty($record['tipologia'])) { @@ -331,16 +346,6 @@ class CSV extends CSVImporter } } - // Ricerca di eventuale anagrafica corrispondente sulla base del campo definito come primary_key (es. codice) - if (!empty($primary_key)) { - $anagrafica = Anagrafica::where($primary_key, '=', trim((string) $record[$primary_key]))->first(); - } - - // Se non trovo nessuna anagrafica corrispondente, allora la creo - if (empty($anagrafica)) { - $anagrafica = Anagrafica::build($record['ragione_sociale']); - } - // Impedisco di aggiornare l'anagrafica Azienda if ($anagrafica->id == $id_azienda) { return false; diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index 2af82ba19..8e1c4aae8 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -260,10 +260,23 @@ class CSV extends CSVImporter } } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); + + // Individuazione articolo e generazione + $articolo = null; + // Ricerca sulla base della chiave primaria se presente + if (!empty($primary_key)) { + $articolo = Articolo::where($primary_key, $record[$primary_key])->withTrashed()->first(); + } + + // Controllo se creare o aggiornare il record + if (($articolo && !$update_record) || (!$articolo && !$add_record)) { + return; + } + $url = $record['immagine']; unset($record['immagine']); @@ -308,12 +321,6 @@ class CSV extends CSVImporter } } - // Individuazione articolo e generazione - $articolo = null; - // Ricerca sulla base della chiave primaria se presente - if (!empty($primary_key)) { - $articolo = Articolo::where($primary_key, $record[$primary_key])->withTrashed()->first(); - } if (empty($articolo)) { $articolo = Articolo::build($record['codice'], $categoria, $sottocategoria); $articolo->setTranslation('title', $record['descrizione']); diff --git a/modules/impianti/src/Import/CSV.php b/modules/impianti/src/Import/CSV.php index c0dfc97e3..9a31da3f0 100644 --- a/modules/impianti/src/Import/CSV.php +++ b/modules/impianti/src/Import/CSV.php @@ -98,7 +98,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); @@ -110,6 +110,17 @@ class CSV extends CSVImporter } if (!empty($anagrafica)) { + $impianto = null; + // Ricerca sulla base della chiave primaria se presente + if (!empty($primary_key)) { + $impianto = Impianto::where($primary_key, $record[$primary_key])->first(); + } + + // Controllo se creare o aggiornare il record + if (($impianto && !$update_record) || (!$impianto && !$add_record)) { + return; + } + $url = $record['immagine']; unset($record['immagine']); @@ -154,21 +165,15 @@ class CSV extends CSVImporter } // Individuazione impianto e generazione - $impianto = null; - - // Ricerca sulla base della chiave primaria se presente - if (!empty($primary_key)) { - $impianto = Impianto::where($primary_key, $record[$primary_key])->first(); - $impianto->nome = $record['nome']; - } if (empty($impianto)) { - $impianto = Impianto::build($record['matricola'], $record['nome'], $categoria, $record['cliente']); + $impianto = Impianto::build($record['matricola'], $record['nome'], $categoria, $anagrafica->id); } if (!empty($record['data'])) { $impianto->data = $record['data']; } + $impianto->nome = $record['nome']; $impianto->idanagrafica = $anagrafica->idanagrafica; $impianto->id_marca = $id_marca; $impianto->id_modello = $record['modello']; diff --git a/modules/import/actions.php b/modules/import/actions.php index 523ed75e5..f52915567 100755 --- a/modules/import/actions.php +++ b/modules/import/actions.php @@ -97,7 +97,7 @@ switch (filter('op')) { $csv->init(); } - $count = $csv->importRows($offset, $limit); + $count = $csv->importRows($offset, $limit, post('update_record'), post('add_record')); $more = $count == $limit; // Operazioni di finalizzazione per l'importazione diff --git a/modules/import/edit.php b/modules/import/edit.php index da31b30ce..b358efb50 100755 --- a/modules/import/edit.php +++ b/modules/import/edit.php @@ -56,11 +56,19 @@ if (empty($id_record)) {
-
+
{[ "type": "checkbox", "label": "'.tr('Importa prima riga').'", "name": "include_first_row", "extra":"", "value": "1" ]}
-
+
+ {[ "type": "checkbox", "label": "'.tr('Aggiorna record esistenti').'", "name": "update_record", "extra":"", "value": "1" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Crea record mancanti').'", "name": "add_record", "extra":"", "value": "1" ]} +
+ +
{[ "type": "select", "label": "'.tr('Chiave primaria').'", "name": "primary_key", "values": '.json_encode($campi_disponibili).', "value": "'.$primary_key.'" ]}
'; diff --git a/modules/interventi/src/Import/CSV.php b/modules/interventi/src/Import/CSV.php index 7e21ed1a9..1b55c7f35 100644 --- a/modules/interventi/src/Import/CSV.php +++ b/modules/interventi/src/Import/CSV.php @@ -99,7 +99,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); @@ -116,12 +116,16 @@ class CSV extends CSVImporter if (!empty($anagrafica)) { $intervento = null; - // Ricerca sulla base della chiave primaria se presente if (!empty($primary_key)) { $intervento = Intervento::where($primary_key, $record[$primary_key])->first(); } + // Controllo se creare o aggiornare il record + if (($intervento && !$update_record) || (!$intervento && !$add_record)) { + return; + } + // Verifico tipo e stato per creare l'intervento if (empty($record['tipo'])) { $tipo = TipoIntervento::where('codice', 'GEN')->first(); diff --git a/modules/listini_cliente/src/Import/CSV.php b/modules/listini_cliente/src/Import/CSV.php index ee0f6d6f3..3e0119f86 100644 --- a/modules/listini_cliente/src/Import/CSV.php +++ b/modules/listini_cliente/src/Import/CSV.php @@ -58,7 +58,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $id_listino = $database->fetchOne('SELECT id FROM mg_listini WHERE nome = '.prepare($record['nome_listino']))['id']; @@ -71,6 +71,11 @@ class CSV extends CSVImporter $articolo_listino = Articolo::where('id_articolo', $id_articolo)->where('id_listino', $id_listino)->first(); + // Controllo se creare o aggiornare il record + if (($articolo_listino && !$update_record) || (!$articolo_listino && !$add_record)) { + return; + } + if (!$articolo_listino) { $articolo_listino = Articolo::build($articolo_originale, $id_listino); } diff --git a/modules/partitario/src/Import/CSV.php b/modules/partitario/src/Import/CSV.php index 09953d8b3..bda3ed534 100755 --- a/modules/partitario/src/Import/CSV.php +++ b/modules/partitario/src/Import/CSV.php @@ -57,7 +57,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); @@ -72,23 +72,44 @@ class CSV extends CSVImporter // Estraggo il conto, $idpianodeiconti2 = $database->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE numero='.prepare($codice_conto2))['id']; - if (empty($idpianodeiconti2) && empty($codice_conto3)) { - $database->insert('co_pianodeiconti2', [ - 'numero' => $codice_conto2, - 'descrizione' => $record['descrizione'], - 'idpianodeiconti1' => $idpianodeiconti1, - 'dir' => $record['dir'], - ]); - } elseif (!empty($idpianodeiconti2) && !empty($codice_conto3)) { - $idpianodeiconti3 = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE numero='.prepare($codice_conto3).' AND idpianodeiconti2='.prepare($idpianodeiconti2))['id']; - - if (empty($idpianodeiconti3)) { - $database->insert('co_pianodeiconti3', [ - 'numero' => $codice_conto3, + if ($add_record) { + if (empty($idpianodeiconti2) && empty($codice_conto3)) { + $database->insert('co_pianodeiconti2', [ + 'numero' => $codice_conto2, 'descrizione' => $record['descrizione'], - 'idpianodeiconti2' => $idpianodeiconti2, + 'idpianodeiconti1' => $idpianodeiconti1, 'dir' => $record['dir'], ]); + } elseif (!empty($idpianodeiconti2) && !empty($codice_conto3)) { + $idpianodeiconti3 = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE numero='.prepare($codice_conto3).' AND idpianodeiconti2='.prepare($idpianodeiconti2))['id']; + + if (empty($idpianodeiconti3)) { + $database->insert('co_pianodeiconti3', [ + 'numero' => $codice_conto3, + 'descrizione' => $record['descrizione'], + 'idpianodeiconti2' => $idpianodeiconti2, + 'dir' => $record['dir'], + ]); + } + } + } + if ($update_record) { + if (!empty($idpianodeiconti2) && empty($codice_conto3)) { + $database->update('co_pianodeiconti2', [ + 'descrizione' => $record['descrizione'], + ], [ + 'id' => $idpianodeiconti2, + ]); + } elseif (!empty($idpianodeiconti2) && !empty($codice_conto3)) { + $idpianodeiconti3 = $database->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE numero='.prepare($codice_conto3).' AND idpianodeiconti2='.prepare($idpianodeiconti2))['id']; + + if (!empty($idpianodeiconti3)) { + $database->update('co_pianodeiconti3', [ + 'descrizione' => $record['descrizione'], + ], [ + 'id' => $idpianodeiconti3, + ]); + } } } } diff --git a/modules/preventivi/src/Import/CSV.php b/modules/preventivi/src/Import/CSV.php index 3d8264fb9..40637c87f 100644 --- a/modules/preventivi/src/Import/CSV.php +++ b/modules/preventivi/src/Import/CSV.php @@ -84,7 +84,7 @@ class CSV extends CSVImporter ]; } - public function import($record) + public function import($record, $update_record = true, $add_record = true) { $database = database(); $primary_key = $this->getPrimaryKey(); @@ -92,6 +92,11 @@ class CSV extends CSVImporter $id_preventivo = $database->fetchOne('SELECT id FROM `co_preventivi` WHERE `numero`='.prepare($record['numero']))['id']; $preventivo = Preventivo::find($id_preventivo); + // Controllo se creare o aggiornare il record + if (($preventivo && !$update_record) || (!$preventivo && !$add_record)) { + return; + } + if (empty($preventivo)) { $anagrafica = Anagrafica::where('ragione_sociale', $record['ragione_sociale'])->first(); diff --git a/src/Importer/CSVImporter.php b/src/Importer/CSVImporter.php index d6dfa6c0d..9a7da38b9 100644 --- a/src/Importer/CSVImporter.php +++ b/src/Importer/CSVImporter.php @@ -92,7 +92,7 @@ abstract class CSVImporter implements ImporterInterface return $rows; } - public function importRows($offset, $length) + public function importRows($offset, $length, $update_record = true, $add_record = true) { $rows = $this->getRows($offset, $length); foreach ($rows as $row) { @@ -100,13 +100,13 @@ abstract class CSVImporter implements ImporterInterface $record = $this->getRecord($row); // Importazione del record - $this->import($record); + $this->import($record, $update_record, $add_record); } return count($rows); } - abstract public function import($record); + abstract public function import($record, $update_record, $add_record); public function getPrimaryKey() { diff --git a/src/Importer/ImporterInterface.php b/src/Importer/ImporterInterface.php index e374bff14..b356c8fbc 100644 --- a/src/Importer/ImporterInterface.php +++ b/src/Importer/ImporterInterface.php @@ -69,14 +69,14 @@ interface ImporterInterface * * @return int */ - public function importRows($offset, $length); + public function importRows($offset, $length, $update_record, $add_record); /** * Gestisce le operazioni di importazione per un singolo record. * * @return bool */ - public function import($record); + public function import($record, $update_record, $add_record); /** * Restituisce la chiave primaria impostata dall'utente.