2020-08-06 18:51:56 +02:00
< ? php
namespace Modules\Articoli\Import ;
2020-08-07 10:14:09 +02:00
use Importer\CSVImporter ;
use Modules\Articoli\Articolo ;
use Modules\Articoli\Categoria ;
use Modules\Iva\Aliquota ;
2020-08-06 18:51:56 +02:00
2020-08-07 11:05:08 +02:00
/**
* Struttura per la gestione delle operazioni di importazione ( da CSV ) degli Articoli .
*
* @ since 2.4 . 17
*/
2020-08-07 10:14:09 +02:00
class CSV extends CSVImporter
2020-08-06 18:51:56 +02:00
{
public function getAvailableFields ()
{
return [
[
'field' => 'codice' ,
'label' => 'Codice' ,
'primary_key' => true ,
],
[
'field' => 'descrizione' ,
'label' => 'Descrizione' ,
],
[
'field' => 'qta' ,
'label' => 'Quantità' ,
],
[
'field' => 'um' ,
'label' => 'Unità di misura' ,
'names' => [
'Unità di misura' ,
'Unità misura' ,
'Unit` di misura' ,
'um' ,
],
],
[
'field' => 'prezzo_acquisto' ,
'label' => 'Prezzo acquisto' ,
],
[
'field' => 'prezzo_vendita' ,
'label' => 'Prezzo vendita' ,
],
[
'field' => 'peso_lordo' ,
'label' => 'Peso lordo (KG)' ,
'names' => [
'Peso lordo (KG)' ,
'Peso' ,
],
],
[
'field' => 'volume' ,
'label' => 'Volume (M3)' ,
'names' => [
'Volume (M3)' ,
'Volume' ,
],
],
[
2020-08-07 10:14:09 +02:00
'field' => 'categoria' ,
2020-08-06 18:51:56 +02:00
'label' => 'Categoria' ,
'names' => [
'Categoria' ,
2020-08-07 10:14:09 +02:00
'categoria' ,
2020-08-06 18:51:56 +02:00
'idcategoria' ,
],
],
[
2020-08-07 10:14:09 +02:00
'field' => 'sottocategoria' ,
2020-08-06 18:51:56 +02:00
'label' => 'Sottocategoria' ,
'names' => [
'Sottocategoria' ,
2020-08-07 10:14:09 +02:00
'sottocategoria' ,
2020-08-06 18:51:56 +02:00
'idsottocategoria' ,
],
],
[
'field' => 'barcode' ,
'label' => 'Barcode' ,
'names' => [
'barcode' ,
'Barcode' ,
'EAN' ,
],
],
[
'field' => 'id_fornitore' ,
'label' => 'Fornitore' ,
'names' => [
'id_fornitore' ,
'Id Fornitore' ,
'Fornitore' ,
],
],
[
2020-08-07 10:14:09 +02:00
'field' => 'codice_iva_vendita' ,
2020-08-06 18:51:56 +02:00
'label' => 'Codice IVA vendita' ,
'names' => [
'Codice IVA vendita' ,
2020-08-07 10:14:09 +02:00
'codice_iva_vendita' ,
2020-08-06 18:51:56 +02:00
],
],
[
'field' => 'ubicazione' ,
'label' => 'Ubicazione' ,
],
[
'field' => 'note' ,
'label' => 'Note' ,
],
];
}
public function import ( $record )
{
$database = database ();
$primary_key = $this -> getPrimaryKey ();
// Fix per campi con contenuti derivati da query implicite
if ( ! empty ( $record [ 'id_fornitore' ])) {
2020-08-07 10:14:09 +02:00
$record [ 'id_fornitore' ] = $database -> fetchOne ( 'SELECT idanagrafica AS id FROM an_anagrafiche WHERE LOWER(ragione_sociale) = LOWER(' . prepare ( $record [ 'id_fornitore' ]) . ')' )[ 'id' ];
2020-08-06 18:51:56 +02:00
}
2020-08-07 10:14:09 +02:00
// Gestione categoria e sottocategoria
if ( ! empty ( $record [ 'categoria' ])) {
// Categoria
$categoria = Categoria :: where ( 'nome' , $record [ 'categoria' ]) -> first ();
if ( empty ( $categoria )) {
$categoria = Categoria :: build ( $record [ 'categoria' ]);
2020-08-06 18:51:56 +02:00
}
2020-08-07 10:14:09 +02:00
// 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 ();
}
2020-08-06 18:51:56 +02:00
}
}
2020-08-07 10:14:09 +02:00
// 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 ();
2020-08-06 18:51:56 +02:00
}
2020-08-07 10:14:09 +02:00
unset ( $record [ 'codice_iva_vendita' ]);
2020-08-06 18:51:56 +02:00
2020-08-07 10:14:09 +02:00
// 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 );
2020-08-06 18:51:56 +02:00
}
2020-08-07 10:14:09 +02:00
$articolo -> idiva_vendita = $aliquota -> id ;
$articolo -> attivo = 1 ;
2020-08-06 18:51:56 +02:00
2020-08-07 10:14:09 +02:00
// Esportazione della quantità indicata
$qta = $record [ 'qta' ];
unset ( $record [ 'qta' ]);
2020-08-06 18:51:56 +02:00
2020-08-07 10:14:09 +02:00
// Salvataggio delle informazioni generali
$articolo -> fill ( $record );
$articolo -> save ();
2020-08-06 18:51:56 +02:00
2020-08-07 10:14:09 +02:00
// Movimentazione della quantità registrata
$articolo -> movimenta ( $qta , tr ( 'Movimento da importazione' ));
2020-08-06 18:51:56 +02:00
}
public static function getExample ()
{
return [
[ 'Codice' , 'Barcode' , 'Descrizione' , 'Fornitore' , 'Quantità' , 'Unità di misura' , 'Prezzo acquisto' , 'Prezzo vendita' , 'Peso lordo (KG)' , 'Volume (M3)' , 'Categoria' , 'Sottocategoria' , 'Ubicazione' , 'Note' ],
[ '00004' , '719376861871' , 'Articolo' , 'Mario Rossi' , '10' , 'Kg' , '5,25' , '12,72' , '10,2' , '500' , 'Categoria4' , 'Sottocategoria2' , 'Scaffale 1' , 'Articolo di prova' ],
];
}
}