diff --git a/modules/anagrafiche/src/Import/CSV.php b/modules/anagrafiche/src/Import/CSV.php index 63674b9b4..6be7b4df4 100644 --- a/modules/anagrafiche/src/Import/CSV.php +++ b/modules/anagrafiche/src/Import/CSV.php @@ -2,10 +2,10 @@ namespace Modules\Anagrafiche\Import; -use Imports\CSVImport; +use Importer\CSVImporter; use Modules\Anagrafiche\Anagrafica; -class CSV extends CSVImport +class CSV extends CSVImporter { public function getAvailableFields() { @@ -249,11 +249,6 @@ class CSV extends CSVImport return; } - // se non imposto nessun codice evito di resettare quello calcolato automaticamente o già presente - if (empty($record['codice'])) { - unset($record['codice']); - } - $anagrafica->fill($record); $anagrafica->tipologie = $tipologie; $anagrafica->save(); diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 4fbe99a15..af2ecdb4b 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -16,6 +16,10 @@ class Articolo extends Model use SoftDeletes; use RecordTrait; + protected $guarded = [ + 'qta', + ]; + protected $table = 'mg_articoli'; public static function build($codice, $nome, Categoria $categoria = null, Categoria $sottocategoria = null) diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index 044b8430d..c65fa5195 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -2,10 +2,12 @@ namespace Modules\Articoli\Import; -use Imports\CSVImport; -use Modules\Anagrafiche\Anagrafica; +use Importer\CSVImporter; +use Modules\Articoli\Articolo; +use Modules\Articoli\Categoria; +use Modules\Iva\Aliquota; -class CSV extends CSVImport +class CSV extends CSVImporter { public function getAvailableFields() { @@ -58,20 +60,20 @@ class CSV extends CSVImport ], ], [ - 'field' => 'id_categoria', + 'field' => 'categoria', 'label' => 'Categoria', 'names' => [ 'Categoria', - 'id_categoria', + 'categoria', 'idcategoria', ], ], [ - 'field' => 'id_sottocategoria', + 'field' => 'sottocategoria', 'label' => 'Sottocategoria', 'names' => [ 'Sottocategoria', - 'id_sottocategoria', + 'sottocategoria', 'idsottocategoria', ], ], @@ -94,11 +96,11 @@ class CSV extends CSVImport ], ], [ - 'field' => 'idiva_vendita', + 'field' => 'codice_iva_vendita', 'label' => 'Codice IVA vendita', 'names' => [ 'Codice IVA vendita', - 'idiva_vendita', + 'codice_iva_vendita', ], ], [ @@ -117,100 +119,60 @@ class CSV extends CSVImport $database = database(); $primary_key = $this->getPrimaryKey(); + // Fix per campi con contenuti derivati da query implicite + if (!empty($record['id_fornitore'])) { + $record['id_fornitore'] = $database->fetchOne('SELECT idanagrafica AS id FROM an_anagrafiche WHERE LOWER(ragione_sociale) = LOWER('.prepare($record['id_fornitore']).')')['id']; + } + + // Gestione categoria e sottocategoria + if (!empty($record['categoria'])) { + // Categoria + $categoria = Categoria::where('nome', $record['categoria'])->first(); + if (empty($categoria)) { + $categoria = Categoria::build($record['categoria']); + } + + // Sotto-categoria + $sottocategoria = null; + if (!empty($record['sottocategoria'])) { + $sottocategoria = Categoria::where('nome', $record['sottocategoria']) + ->where('parent', $categoria->id) + ->first(); + + if (empty($sottocategoria)) { + $sottocategoria = Categoria::build($record['categoria']); + $sottocategoria->parent()->associate($categoria); + $sottocategoria->save(); + } + } + } + + // Individuazione dell'IVA di vendita tramite il relativo Codice + $aliquota = null; + if (!empty($record['codice_iva_vendita'])) { + $aliquota = Aliquota::where('codice', $record['codice_iva_vendita'])->first(); + } + unset($record['codice_iva_vendita']); + + // Individuazione articolo e generazione + $articolo = Articolo::where($primary_key, $record[$primary_key])->first(); + if (empty($articolo)) { + $articolo = Articolo::build($record['codice'], $record['descrizione'], $categoria, $sottocategoria); + } + + $articolo->idiva_vendita = $aliquota->id; + $articolo->attivo = 1; + + // Esportazione della quantità indicata $qta = $record['qta']; unset($record['qta']); - $record['attivo'] = 1; + // Salvataggio delle informazioni generali + $articolo->fill($record); + $articolo->save(); - // Fix per campi con contenuti derivati da query implicite - if (!empty($record['id_fornitore'])) { - $record['id_fornitore'] = $database->fetchOne('SELECT idanagrafica AS id FROM an_anagrafiche WHERE LOWER(ragione_sociale) = LOWER('.prepare($record['v']).')')['id']; - } - - // Categorie - if (!empty($record['id_categoria'])) { - $rs_cat = $database->select('mg_categorie', 'id', [ - 'nome' => $record['id_categoria'], - ]); - - if (empty($rs_cat[0]['id'])) { - $database->insert('mg_categorie', [ - 'nome' => $record['id_categoria'], - ]); - $record['id_categoria'] = $database->lastInsertedID(); - } else { - $record['id_categoria'] = $rs_cat[0]['id']; - } - } - - // Sottocategorie - if (!empty($record['id_sottocategoria'])) { - $rs_cat2 = $database->select('mg_categorie', 'id', [ - 'nome' => $record['id_sottocategoria'], - 'parent' => $record['id_categoria'], - ]); - - if (empty($rs_cat2[0]['id'])) { - $database->insert('mg_categorie', [ - 'nome' => $record['id_sottocategoria'], - 'parent' => $record['id_categoria'], - ]); - $record['id_sottocategoria'] = $database->lastInsertedID(); - } else { - $record['id_sottocategoria'] = $rs_cat2[0]['id']; - } - } - - // Um - if (!empty($record['um'])) { - $rs_um = $database->select('mg_unitamisura', 'id', [ - 'valore' => $record['um'], - ]); - - if (empty($rs_um[0]['id'])) { - $database->insert('mg_unitamisura', [ - 'valore' => $record['um'], - ]); - } - } - - // Codice --> ID IVA vendita - if (!empty($record['idiva_vendita'])) { - $rs_iva = $database->select('co_iva', 'id', [ - 'codice' => $record['idiva_vendita'], - ]); - - if (!empty($rs_iva[0]['id'])) { - $record['idiva_vendita'] = $rs_iva[0]['id']; - } - } - - // Insert o update - $insert = true; - if (!empty($primary_key)) { - $rs = $database->select('mg_articoli', $primary_key, [ - $primary_key => $record[$primary_key], - ]); - - $insert = !in_array($record[$primary_key], $rs[0]); - } - - // Insert - if ($insert) { - $record['id_categoria'] = (empty($record['id_categoria'])) ? 0 : $record['id_categoria']; - $database->insert('mg_articoli', $record); - add_movimento_magazzino($database->lastInsertedID(), $qta, [], 'Movimento da import', date()); - } - // Update - else { - $database->update('mg_articoli', $record, [$primary_key => $record[$primary_key]]); - - $rs = $database->select('mg_articoli', 'id', [ - $primary_key => $record[$primary_key], - ]); - - add_movimento_magazzino($rs[0]['id'], $qta, [], 'Movimento da import', date()); - } + // Movimentazione della quantità registrata + $articolo->movimenta($qta, tr('Movimento da importazione')); } public static function getExample() diff --git a/modules/import/actions.php b/modules/import/actions.php index c5c43dcf1..894ab83fd 100755 --- a/modules/import/actions.php +++ b/modules/import/actions.php @@ -61,7 +61,7 @@ switch (filter('op')) { $primary_key = post('primary_key'); $csv->setPrimaryKey($primary_key); - $count = $csv->importSet($offset, $limit); + $count = $csv->importRows($offset, $limit); $more = $count == $limit; echo json_encode([ diff --git a/modules/import/edit.php b/modules/import/edit.php index 47164a70e..dcc2d32ef 100755 --- a/modules/import/edit.php +++ b/modules/import/edit.php @@ -45,8 +45,8 @@ if (empty($id_record)) { '; // Lettura delle prime righe disponibili - $righe = $csv->get(0, 10); - $prima_riga = $righe[0]; + $righe = $csv->getRows(0, 10); + $prima_riga = $csv->getHeader(); $numero_colonne = count($prima_riga); // Trasformazione dei nomi indicati per i campi in lowercase diff --git a/src/Imports/CSVImport.php b/src/Importer/CSVImporter.php similarity index 81% rename from src/Imports/CSVImport.php rename to src/Importer/CSVImporter.php index 323dc71d6..3e61c33fe 100644 --- a/src/Imports/CSVImport.php +++ b/src/Importer/CSVImporter.php @@ -1,11 +1,11 @@ getRows(0, 1); + + return array_shift($first_row); + } + + public function getRows($offset, $length) { $rows = []; for ($i = 0; $i < $length; ++$i) { @@ -61,17 +62,11 @@ abstract class CSVImport return $rows; } - /** - * @param $offset - * @param $length - * - * @return int - */ - public function importSet($offset, $length) + public function importRows($offset, $length) { $associations = $this->getColumnAssociations(); - $rows = $this->get($offset, $length); + $rows = $this->getRows($offset, $length); foreach ($rows as $row) { // Interpretazione della riga come record $record = []; @@ -89,31 +84,18 @@ abstract class CSVImport return count($rows); } - /** - * @param $record - * - * @return bool - */ abstract public function import($record); - /** - * @return mixed - */ public function getPrimaryKey() { return $this->primary_key; } - /** - * @param $field_key - */ public function setPrimaryKey($field_key) { $this->primary_key = $this->getAvailableFields()[$field_key]['field']; } - abstract public static function getExample(); - public static function createExample($filepath) { $content = static::getExample(); diff --git a/src/Importer/ImporterInterface.php b/src/Importer/ImporterInterface.php new file mode 100644 index 000000000..6cce64b20 --- /dev/null +++ b/src/Importer/ImporterInterface.php @@ -0,0 +1,90 @@ +