. */ namespace Modules\Impianti\Import; use Importer\CSVImporter; use Models\Upload; use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Sede; use Modules\Impianti\Categoria; use Modules\Impianti\Impianto; use Models\Module; /** * Struttura per la gestione delle operazioni di importazione (da CSV) degli Impianti. * * @since 2.4.52 */ class CSV extends CSVImporter { public function getAvailableFields() { return [ [ 'field' => 'matricola', 'label' => 'Matricola', 'primary_key' => true, ], [ 'field' => 'immagine', 'label' => 'Immagine', 'names' => [ 'Immagine', 'Foto', ], ], [ 'field' => 'import_immagine', 'label' => 'Import immagine', ], [ 'field' => 'nome', 'label' => 'Nome', ], [ 'field' => 'cliente', 'label' => 'Cliente', ], [ 'field' => 'telefono', 'label' => 'Telefono', ], [ 'field' => 'id_categoria', 'label' => 'Categoria', ], [ 'field' => 'id_sottocategoria', 'label' => 'Sottocategoria', ], [ 'field' => 'sede', 'label' => 'Sede', ], [ 'field' => 'descrizione', 'label' => 'Descrizione', ], [ 'field' => 'data', 'label' => 'Data installazione', ], ]; } public function import($record) { $database = database(); $primary_key = $this->getPrimaryKey(); if (!empty($record['telefono'])) { $anagrafica = Anagrafica::where('telefono', $record['telefono'])->first(); } if (!empty($anagrafica)) { $url = $record['immagine']; unset($record['immagine']); // Gestione categoria e sottocategoria $categoria = null; $sottocategoria = null; if (empty($record['id_categoria'])) { $record['id_categoria'] = 'Nessuna'; } // Categoria $categoria = Categoria::where('nome', strtolower($record['id_categoria']))->first(); if (empty($categoria)) { $categoria = Categoria::build($record['id_categoria']); } // Sotto-categoria if (!empty($record['id_sottocategoria'])) { $sottocategoria = Categoria::where('nome', $record['id_sottocategoria']) ->where('parent', $categoria->id) ->first(); if (empty($sottocategoria)) { $sottocategoria = Categoria::build($record['id_sottocategoria']); $sottocategoria->parent()->associate($categoria); $sottocategoria->save(); } } // 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(); } if (empty($impianto)) { $impianto = Impianto::build($record['matricola'], $record['nome'], $categoria, $record['cliente']); } if (!empty($record['data'])) { $impianto->data = $record['data']; $impianto->save(); } $impianto->id_sottocategoria = $sottocategoria['id']; $impianto->idanagrafica = $anagrafica->idanagrafica; $impianto->save(); if (!empty($record['sede'])) { $sede = Sede::where('nomesede', $record['sede']) ->where('idanagrafica', $anagrafica->idanagrafica) ->first(); $impianto->idsede = $sede->id; $impianto->save(); } // Gestione immagine if (!empty($url) && !empty($record['import_immagine'])) { $file_content = file_get_contents($url); if (!empty($file_content)) { if ($record['import_immagine'] == 2 || $record['import_immagine'] == 4) { \Uploads::deleteLinked([ 'id_module' => Module::find('Impianti')->id, 'id_record' => $impianto->id, ]); $database->update('my_impianti', [ 'immagine' => '', ], [ 'id' => $impianto->id, ]); } $name = 'immagine_'.$impianto->id.'.'.Upload::getExtensionFromMimeType($file_content); $upload = \Uploads::upload($file_content, [ 'name' => 'Immagine', 'category' => 'Immagini', 'original_name' => $name, 'id_module' => Module::find('Impianti')->id, 'id_record' => $impianto->id, ], [ 'thumbnails' => true, ]); $filename = $upload->filename; if ($record['import_immagine'] == 1 || $record['import_immagine'] == 2) { if (!empty($filename)) { $database->update('my_impianti', [ 'immagine' => $filename, ], [ 'id' => $impianto->id, ]); } } } } unset($record['import_immagine']); } } public static function getExample() { return [ ['Matricola', 'Immagine', 'Import immagine', 'Nome', 'Cliente', 'Telefono', 'Categoria', 'Sottocategoria', 'Sede', 'Descrizione', 'Data installazione'], ['00001', 'https://openstamanager.com/moduli/budget/budget.webp', '2', 'Lavatrice', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca1', '', '', '2023-01-01'], ['00002', 'https://openstamanager.com/moduli/3cx/3cx.webp', '2', 'Caldaia', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca2', '', '', '2023-03-06'], ['00003', 'https://openstamanager.com/moduli/disponibilita-tecnici/tecnici.webp', '2', 'Forno', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca3', '', '', '2023-04-01'], ['00004', 'https://openstamanager.com/moduli/distinta-base/distinta.webp', '2', 'Lavastoviglie', 'Mario Rossi', '+39 0429 60 25 12', 'Elettrodomestici', 'Marca4', '', '', '2023-08-06'], ]; } }