diff --git a/modules/preventivi/src/Import/CSV.php b/modules/preventivi/src/Import/CSV.php new file mode 100644 index 000000000..62cbc3967 --- /dev/null +++ b/modules/preventivi/src/Import/CSV.php @@ -0,0 +1,139 @@ +. + */ + +namespace Modules\Preventivi\Import; + +use Carbon\Carbon; +use Importer\CSVImporter; +use Modules\Anagrafiche\Anagrafica; +use Modules\Anagrafiche\Tipo as TipoAnagrafica; +use Modules\Articoli\Articolo as ArticoloOriginale; +use Modules\Preventivi\Components\Articolo; +use Modules\Preventivi\Preventivo; +use Modules\Preventivi\Stato; +use Modules\TipiIntervento\Tipo as TipoSessione; +/** + * Struttura per la gestione delle operazioni di importazione (da CSV) dei Preventivi. + * + * @since 2.4.44 + */ +class CSV extends CSVImporter +{ + public function getAvailableFields() + { + return [ + [ + 'field' => 'numero', + 'label' => 'Numero', + 'primary_key' => true, + ], + [ + 'field' => 'nome', + 'label' => 'Nome preventivo', + ], + [ + 'field' => 'descrizione', + 'label' => 'Descrizione preventivo', + ], + [ + 'field' => 'ragione_sociale', + 'label' => 'Cliente', + ], + [ + 'field' => 'idtipointervento', + 'label' => 'Tipo attività', + ], + [ + 'field' => 'data_bozza', + 'label' => 'Data', + ], + [ + 'field' => 'codice', + 'label' => 'Codice articolo', + ], + [ + 'field' => 'qta', + 'label' => 'Quantità riga', + ], + [ + 'field' => 'data_evasione', + 'label' => 'Data prevista evasione riga', + ], + [ + 'field' => 'prezzo_unitario', + 'label' => 'Prezzo unitario riga', + ], + ]; + } + + public function import($record) + { + $database = database(); + $primary_key = $this->getPrimaryKey(); + + $id_preventivo = $database->fetchOne('SELECT id FROM `co_preventivi` WHERE `numero`='.prepare($record['numero']))['id']; + $preventivo = Preventivo::find($id_preventivo); + + if (empty($preventivo)) { + $anagrafica = Anagrafica::where('ragione_sociale', $record['ragione_sociale'])->first(); + + if (empty($anagrafica)) { + $anagrafica = Anagrafica::build($record['ragione_sociale']); + $tipo_cliente = TipoAnagrafica::where('descrizione', 'Cliente')->first(); + $anagrafica->tipologie = [$tipo_cliente->id]; + $anagrafica->save(); + } + + $tipo = TipoSessione::find($record['idtipointervento']) ?: TipoSessione::where('codice', 'GEN')->first(); + + + $preventivo = Preventivo::build($anagrafica, $tipo, $record['nome'], new Carbon($record['data_bozza']), 0); + $preventivo->numero = $record['numero']; + $preventivo->idstato = Stato::where('descrizione', 'Bozza')->first()->id; + $preventivo->descrizione = $record['descrizione']; + $preventivo->save(); + } + + // Individuazione articolo + $articolo_orig = ArticoloOriginale::where('codice', $record['codice'])->first(); + if (!empty($articolo_orig)) { + $articolo = Articolo::build($preventivo, $articolo_orig); + + $articolo->descrizione = $articolo_orig->descrizione; + $articolo->um = $articolo_orig->um ?: null; + $articolo->data_evasione = new Carbon($record['data_evasione']) ?: null; + + $idiva = $articolo_orig->idiva_vendita ?: ($anagrafica->idiva_vendite ?: setting('Iva predefinita')); + + $articolo->setPrezzoUnitario($record['prezzo_unitario'], $idiva); + $articolo->qta = $record['qta']; + + $articolo->save(); + } + } + + public static function getExample() + { + return [ + ['Numero', 'Nome Preventivo', 'Descrizione Preventivo', 'Cliente', 'Tipo Attività', 'Data', 'Codice Articolo', 'Quantità riga', 'Data prevista evasione riga', 'Prezzo unitario riga'], + ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2023', '001', '2', '30/04/2023', '50'], + ['15', 'Preventivo Materiali', 'Preventivo iniziale', 'Rossi', 'Generico', '27/04/2023', '043', '1', '10/05/2023', '100'], + ]; + } +} diff --git a/update/2_4_45.sql b/update/2_4_45.sql new file mode 100644 index 000000000..9b614a868 --- /dev/null +++ b/update/2_4_45.sql @@ -0,0 +1,2 @@ +-- Aggiunto import Preventivi +INSERT INTO `zz_imports` (`id`, `id_module`, `name`, `class`, `created_at`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name`='Preventivi'), 'Preventivi', 'Modules\\Preventivi\\Import\\CSV', NULL); \ No newline at end of file