From 2109ab44b99f2a4433ec05083637fc709f71b70a Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 18 Oct 2019 16:40:15 +0200 Subject: [PATCH] Creazione automatica articoli da FE --- CHANGELOG.md | 3 ++- modules/articoli/src/Articolo.php | 18 ++++++++++++++++++ modules/articoli/src/Categoria.php | 10 ++++++++++ plugins/exportFE/src/FatturaElettronica.php | 2 +- plugins/importFE/actions.php | 1 + plugins/importFE/generate.php | 11 ++++++----- plugins/importFE/src/FatturaElettronica.php | 2 +- plugins/importFE/src/FatturaOrdinaria.php | 19 ++++++++++++++++++- 8 files changed, 57 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c08da2d04..2f33b89ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,7 +57,8 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - **Articoli** ora eliminabili solo virtualmente attraverso il flag *deleted_at* - Miglioramento del plugin *Giacenze* nel modulo **Articoli** per interagire con gli **Ordini** registrati, e aggiunta della quantità progressiva per nel plugin *Movimenti* - Generazione del numero delle **Fatture di vendita** a seguito dell'emissione della stessa - - Supporto alla precisione di importi e quantità fino a 5 decimali + - Supporto alla precisione di importi e quantità fino a 5 decimali + - Opzione per la creazione automatica degli articoli presenti in **Fattura Elettronica** ### Rimosso (Removed) - Funzione *get_costi_intervento* del modulo **Attività**, a causa dell'aggiornamento della maggior parte del sistema di gestione degli **Attività** con le classi Eloquent diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 8848e430b..24a737f15 100644 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -14,6 +14,24 @@ class Articolo extends Model protected $table = 'mg_articoli'; + public static function build($codice, $nome, Categoria $categoria, Categoria $sottocategoria = null) + { + $model = parent::build(); + + $model->codice = $codice; + $model->descrizione = $nome; + + $model->abilita_serial = false; + $model->attivo = true; + + $model->categoria()->associate($categoria); + $model->sottocategoria()->associate($sottocategoria); + + $model->save(); + + return $model; + } + /** * Funzione per inserire i movimenti di magazzino. * diff --git a/modules/articoli/src/Categoria.php b/modules/articoli/src/Categoria.php index c6489bc99..820ae33a9 100644 --- a/modules/articoli/src/Categoria.php +++ b/modules/articoli/src/Categoria.php @@ -12,6 +12,16 @@ class Categoria extends Model protected $table = 'mg_categorie'; protected static $parent_identifier = 'parent'; + public static function build($nome) + { + $model = parent::build(); + + $model->nome = $nome; + $model->save(); + + return $model; + } + public function articoli() { return $this->hasMany(Articolo::class, 'id_categoria'); diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index bd74f9daf..459039273 100644 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -1232,7 +1232,7 @@ class FatturaElettronica ]; } - $rs_ritenuta = $database->fetchOne("SELECT percentuale_imponibile FROM co_ritenutaacconto WHERE id=".prepare($riga['idritenutaacconto'])); + $rs_ritenuta = $database->fetchOne('SELECT percentuale_imponibile FROM co_ritenutaacconto WHERE id='.prepare($riga['idritenutaacconto'])); if (!empty($rs_ritenuta['percentuale_imponibile'])) { $dettaglio[]['AltriDatiGestionali'] = [ 'TipoDato' => 'IMPON-RACC', diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 1fe39d230..3f42fbf5b 100644 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -91,6 +91,7 @@ switch (filter('op')) { 'iva' => post('iva'), 'conto' => post('conto'), 'movimentazione' => post('movimentazione'), + 'crea_articoli' => post('crea_articoli'), ]; $fattura_pa = FatturaElettronica::manage($filename); diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 10556921f..cc18e1b33 100644 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -243,9 +243,13 @@ echo ' // Movimentazioni echo ' -
+
{[ "type": "checkbox", "label": "'.tr('Movimenta gli articoli').'", "name": "movimentazione", "value": 1 ]}
+ +
+ {[ "type": "checkbox", "label": "'.tr('Creazione automatica articoli').'", "name": "crea_articoli", "value": 0, "help": "'.tr("Nel caso di righe con tag CodiceArticolo, il gestionale procede alla creazione dell'articolo se la riga non risulta assegnata manualmente").'" ]} +
'; // Righe @@ -280,16 +284,13 @@ if (!empty($righe)) { $codici = $riga['CodiceArticolo'] ?: []; $codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici; - $codice_principale = null; - $codici_articoli = []; foreach ($codici as $codice) { - $codice_principale = $codice_principale ?: $codice['CodiceValore']; - $codici_articoli[] = $codice['CodiceValore'].' ('.$codice['CodiceTipo'].')'; } // Individuazione articolo con codice relativo + $codice_principale = $codici[0]['CodiceValore']; $id_articolo = $database->fetchOne('SELECT id FROM mg_articoli WHERE codice = '.prepare($codice_principale))['id']; echo ' diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index 438e9720d..438431521 100644 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -349,7 +349,7 @@ class FatturaElettronica { $this->saveFattura($info['id_pagamento'], $info['id_segment'], $info['id_tipo'], $info['data_registrazione'], $info['ref_fattura']); - $this->saveRighe($info['articoli'], $info['iva'], $info['conto'], $info['movimentazione']); + $this->saveRighe($info['articoli'], $info['iva'], $info['conto'], $info['movimentazione'], $info['crea_articoli']); $this->saveAllegati(); diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index a92f7c990..09693a194 100644 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -3,6 +3,7 @@ namespace Plugins\ImportFE; use Modules\Articoli\Articolo as ArticoloOriginale; +use Modules\Articoli\Categoria; use Modules\Fatture\Components\Articolo; use Modules\Fatture\Components\Riga; use Modules\Fatture\Fattura; @@ -85,7 +86,7 @@ class FatturaOrdinaria extends FatturaElettronica return $this->forceArray($result); } - public function saveRighe($articoli, $iva, $conto, $movimentazione = true) + public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea_articoli = false) { $info = $this->getRitenutaRivalsa(); @@ -103,6 +104,22 @@ class FatturaOrdinaria extends FatturaElettronica $riga['PrezzoUnitario'] = floatval($riga['PrezzoUnitario']); $riga['Quantita'] = floatval($riga['Quantita']); + $codici = $riga['CodiceArticolo'] ?: []; + $codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici; + + // Creazione articolo relativo + if (!empty($codici) && !empty($crea_articoli) && empty($articolo)) { + $nome_categoria = 'Importazione automatica'; + $categoria = Categoria::where('nome', $nome_categoria)->first(); + if (empty($categoria)) { + $categoria = Categoria::build($nome_categoria); + } + + $codice = $codici[0]['CodiceValore']; + $articolo = ArticoloOriginale::build($codice, $riga['Descrizione'], $categoria); + $articolo->prezzo_acquisto = $riga['PrezzoUnitario']; + } + if (!empty($articolo)) { $obj = Articolo::build($fattura, $articolo);