Creazione automatica articoli da FE

This commit is contained in:
Thomas Zilio 2019-10-18 16:40:15 +02:00
parent 1025019943
commit 2109ab44b9
8 changed files with 57 additions and 9 deletions

View File

@ -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

View File

@ -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.
*

View File

@ -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');

View File

@ -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',

View File

@ -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);

View File

@ -243,9 +243,13 @@ echo '
// Movimentazioni
echo '
<div class="col-md-6">
<div class="col-md-3">
{[ "type": "checkbox", "label": "'.tr('Movimenta gli articoli').'", "name": "movimentazione", "value": 1 ]}
</div>
<div class="col-md-3">
{[ "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").'" ]}
</div>
</div>';
// 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 '

View File

@ -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();

View File

@ -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);