1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-14 10:30:51 +01:00

feat: gestione flag aggiunta e/o aggiornamento righe import

This commit is contained in:
MatteoPistorello 2024-12-03 13:20:42 +01:00
parent 7cf05e56e3
commit cde3fb0e82
11 changed files with 114 additions and 54 deletions

View File

@ -235,7 +235,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $primary_key = $this->getPrimaryKey();
@ -248,6 +248,21 @@ class CSV extends CSVImporter
unset($record['cognome']); unset($record['cognome']);
unset($record['nome']); 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 // Individuazione del tipo dell'anagrafica
$tipologie = []; $tipologie = [];
if (!empty($record['tipologia'])) { 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 // Impedisco di aggiornare l'anagrafica Azienda
if ($anagrafica->id == $id_azienda) { if ($anagrafica->id == $id_azienda) {
return false; return false;

View File

@ -260,10 +260,23 @@ class CSV extends CSVImporter
} }
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $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']; $url = $record['immagine'];
unset($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)) { if (empty($articolo)) {
$articolo = Articolo::build($record['codice'], $categoria, $sottocategoria); $articolo = Articolo::build($record['codice'], $categoria, $sottocategoria);
$articolo->setTranslation('title', $record['descrizione']); $articolo->setTranslation('title', $record['descrizione']);

View File

@ -98,7 +98,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $primary_key = $this->getPrimaryKey();
@ -110,6 +110,17 @@ class CSV extends CSVImporter
} }
if (!empty($anagrafica)) { 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']; $url = $record['immagine'];
unset($record['immagine']); unset($record['immagine']);
@ -154,21 +165,15 @@ class CSV extends CSVImporter
} }
// Individuazione impianto e generazione // 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)) { 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'])) { if (!empty($record['data'])) {
$impianto->data = $record['data']; $impianto->data = $record['data'];
} }
$impianto->nome = $record['nome'];
$impianto->idanagrafica = $anagrafica->idanagrafica; $impianto->idanagrafica = $anagrafica->idanagrafica;
$impianto->id_marca = $id_marca; $impianto->id_marca = $id_marca;
$impianto->id_modello = $record['modello']; $impianto->id_modello = $record['modello'];

View File

@ -97,7 +97,7 @@ switch (filter('op')) {
$csv->init(); $csv->init();
} }
$count = $csv->importRows($offset, $limit); $count = $csv->importRows($offset, $limit, post('update_record'), post('add_record'));
$more = $count == $limit; $more = $count == $limit;
// Operazioni di finalizzazione per l'importazione // Operazioni di finalizzazione per l'importazione

View File

@ -56,11 +56,19 @@ if (empty($id_record)) {
<input type="hidden" name="op" value="import"> <input type="hidden" name="op" value="import">
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Importa prima riga').'", "name": "include_first_row", "extra":"", "value": "1" ]} {[ "type": "checkbox", "label": "'.tr('Importa prima riga').'", "name": "include_first_row", "extra":"", "value": "1" ]}
</div> </div>
<div class="col-md-4"> <div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Aggiorna record esistenti').'", "name": "update_record", "extra":"", "value": "1" ]}
</div>
<div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Crea record mancanti').'", "name": "add_record", "extra":"", "value": "1" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "'.tr('Chiave primaria').'", "name": "primary_key", "values": '.json_encode($campi_disponibili).', "value": "'.$primary_key.'" ]} {[ "type": "select", "label": "'.tr('Chiave primaria').'", "name": "primary_key", "values": '.json_encode($campi_disponibili).', "value": "'.$primary_key.'" ]}
</div> </div>
</div>'; </div>';

View File

@ -99,7 +99,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $primary_key = $this->getPrimaryKey();
@ -116,12 +116,16 @@ class CSV extends CSVImporter
if (!empty($anagrafica)) { if (!empty($anagrafica)) {
$intervento = null; $intervento = null;
// Ricerca sulla base della chiave primaria se presente // Ricerca sulla base della chiave primaria se presente
if (!empty($primary_key)) { if (!empty($primary_key)) {
$intervento = Intervento::where($primary_key, $record[$primary_key])->first(); $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 // Verifico tipo e stato per creare l'intervento
if (empty($record['tipo'])) { if (empty($record['tipo'])) {
$tipo = TipoIntervento::where('codice', 'GEN')->first(); $tipo = TipoIntervento::where('codice', 'GEN')->first();

View File

@ -58,7 +58,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$id_listino = $database->fetchOne('SELECT id FROM mg_listini WHERE nome = '.prepare($record['nome_listino']))['id']; $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(); $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) { if (!$articolo_listino) {
$articolo_listino = Articolo::build($articolo_originale, $id_listino); $articolo_listino = Articolo::build($articolo_originale, $id_listino);
} }

View File

@ -57,7 +57,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $primary_key = $this->getPrimaryKey();
@ -72,6 +72,7 @@ class CSV extends CSVImporter
// Estraggo il conto, // Estraggo il conto,
$idpianodeiconti2 = $database->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE numero='.prepare($codice_conto2))['id']; $idpianodeiconti2 = $database->fetchOne('SELECT id FROM co_pianodeiconti2 WHERE numero='.prepare($codice_conto2))['id'];
if ($add_record) {
if (empty($idpianodeiconti2) && empty($codice_conto3)) { if (empty($idpianodeiconti2) && empty($codice_conto3)) {
$database->insert('co_pianodeiconti2', [ $database->insert('co_pianodeiconti2', [
'numero' => $codice_conto2, 'numero' => $codice_conto2,
@ -92,6 +93,26 @@ class CSV extends CSVImporter
} }
} }
} }
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,
]);
}
}
}
}
public static function getExample() public static function getExample()
{ {

View File

@ -84,7 +84,7 @@ class CSV extends CSVImporter
]; ];
} }
public function import($record) public function import($record, $update_record = true, $add_record = true)
{ {
$database = database(); $database = database();
$primary_key = $this->getPrimaryKey(); $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']; $id_preventivo = $database->fetchOne('SELECT id FROM `co_preventivi` WHERE `numero`='.prepare($record['numero']))['id'];
$preventivo = Preventivo::find($id_preventivo); $preventivo = Preventivo::find($id_preventivo);
// Controllo se creare o aggiornare il record
if (($preventivo && !$update_record) || (!$preventivo && !$add_record)) {
return;
}
if (empty($preventivo)) { if (empty($preventivo)) {
$anagrafica = Anagrafica::where('ragione_sociale', $record['ragione_sociale'])->first(); $anagrafica = Anagrafica::where('ragione_sociale', $record['ragione_sociale'])->first();

View File

@ -92,7 +92,7 @@ abstract class CSVImporter implements ImporterInterface
return $rows; return $rows;
} }
public function importRows($offset, $length) public function importRows($offset, $length, $update_record = true, $add_record = true)
{ {
$rows = $this->getRows($offset, $length); $rows = $this->getRows($offset, $length);
foreach ($rows as $row) { foreach ($rows as $row) {
@ -100,13 +100,13 @@ abstract class CSVImporter implements ImporterInterface
$record = $this->getRecord($row); $record = $this->getRecord($row);
// Importazione del record // Importazione del record
$this->import($record); $this->import($record, $update_record, $add_record);
} }
return count($rows); return count($rows);
} }
abstract public function import($record); abstract public function import($record, $update_record, $add_record);
public function getPrimaryKey() public function getPrimaryKey()
{ {

View File

@ -69,14 +69,14 @@ interface ImporterInterface
* *
* @return int * @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. * Gestisce le operazioni di importazione per un singolo record.
* *
* @return bool * @return bool
*/ */
public function import($record); public function import($record, $update_record, $add_record);
/** /**
* Restituisce la chiave primaria impostata dall'utente. * Restituisce la chiave primaria impostata dall'utente.