1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-07 11:13:44 +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();
$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;

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();
$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']);

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();
$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'];

View File

@ -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

View File

@ -56,11 +56,19 @@ if (empty($id_record)) {
<input type="hidden" name="op" value="import">
<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" ]}
</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.'" ]}
</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();
$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();

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();
$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);
}

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();
$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,
]);
}
}
}
}

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();
$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();

View File

@ -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()
{

View File

@ -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.