diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php
index b414d736f..f43ff33f7 100755
--- a/plugins/importFE/generate.php
+++ b/plugins/importFE/generate.php
@@ -372,6 +372,7 @@ if (!empty($righe)) {
$qta = $riga['Quantita'];
$um = $riga['UnitaMisura'];
$prezzo_unitario = $riga['PrezzoUnitario'] ?: $riga['Importo'];
+ $is_descrizione = empty((float)$riga['Quantita']) && empty((float)$prezzo_unitario);
echo '
@@ -404,8 +405,11 @@ if (!empty($righe)) {
]).'
-
+ ';
+
+ if (!$is_descrizione) {
+ echo '
'.$riga['AliquotaIVA'].'
@@ -462,6 +466,24 @@ if (!empty($righe)) {
|
';
+ } else {
+ echo '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ';
+ }
}
echo '
diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php
index 42a6df112..953b69cf6 100755
--- a/plugins/importFE/src/FatturaOrdinaria.php
+++ b/plugins/importFE/src/FatturaOrdinaria.php
@@ -24,6 +24,7 @@ use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Articoli\Categoria;
use Modules\Fatture\Components\Articolo;
+use Modules\Fatture\Components\Descrizione;
use Modules\Fatture\Components\Riga;
use Modules\Fatture\Fattura;
use Plugins\ListinoClienti\DettaglioPrezzo;
@@ -123,6 +124,7 @@ class FatturaOrdinaria extends FatturaElettronica
$id_rivalsa = $info['id_rivalsa'];
$calcolo_ritenuta_acconto = $info['rivalsa_in_ritenuta'] ? 'IMP+RIV' : 'IMP';
$ritenuta_contributi = !empty($fattura->id_ritenuta_contributi);
+ $conto_arrotondamenti = null;
foreach ($righe as $key => $riga) {
$articolo = ArticoloOriginale::find($articoli[$key]);
@@ -130,6 +132,8 @@ class FatturaOrdinaria extends FatturaElettronica
$riga['PrezzoUnitario'] = floatval($riga['PrezzoUnitario']);
$riga['Quantita'] = floatval($riga['Quantita']);
+ $is_descrizione = empty($riga['Quantita']) && empty($riga['PrezzoUnitario']);
+
$codici = $riga['CodiceArticolo'] ?: [];
$codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici;
@@ -161,6 +165,10 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->movimentazione($movimentazione);
$target_type = Articolo::class;
+ } elseif($is_descrizione) {
+ $obj = Descrizione::build($fattura);
+
+ $target_type = Descrizione::class;
} else {
$obj = Riga::build($fattura);
@@ -190,113 +198,120 @@ class FatturaOrdinaria extends FatturaElettronica
]);
}
- $obj->id_iva = $iva[$key];
- $obj->idconto = $conto[$key];
+ if (!$is_descrizione) {
+ $obj->id_iva = $iva[$key];
+ $obj->idconto = $conto[$key];
- $obj->id_rivalsa_inps = $id_rivalsa;
- $obj->ritenuta_contributi = $ritenuta_contributi;
-
- if (!empty($riga['Ritenuta'])) {
- $obj->id_ritenuta_acconto = $id_ritenuta_acconto;
- $obj->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
- }
-
- // Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
- // TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
- $prezzo = $riga['PrezzoUnitario'];
- $qta = $riga['Quantita'] ?: 1;
-
- // Prezzo e quantità
- $obj->prezzo_unitario = $prezzo;
- $obj->qta = $qta;
-
- if (!empty($riga['UnitaMisura'])) {
- $obj->um = $riga['UnitaMisura'];
- }
-
- // Sconti e maggiorazioni
- $sconti = $riga['ScontoMaggiorazione'];
- if (!empty($sconti)) {
- $sconto_unitario = 0;
- $sconti = $sconti[0] ? $sconti : [$sconti];
-
- // Determina il tipo di sconto in caso di sconti misti UNT e PRC
- foreach ($sconti as $sconto) {
- $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
- if (!empty($tipo) && $tipo_sconto != $tipo) {
- $tipo = 'UNT';
- } else {
- $tipo = $tipo_sconto;
- }
+ if (empty($conto_arrotondamenti) && !empty($conto[$key]) ){
+ $conto_arrotondamenti = $conto[$key];
}
- foreach ($sconti as $sconto) {
- $unitario = $sconto['Importo'] ?: $sconto['Percentuale'];
+ $obj->id_rivalsa_inps = $id_rivalsa;
+ $obj->ritenuta_contributi = $ritenuta_contributi;
- // Sconto o Maggiorazione
- $sconto_riga = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
+ if (!empty($riga['Ritenuta'])) {
+ $obj->id_ritenuta_acconto = $id_ritenuta_acconto;
+ $obj->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
+ }
- $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
- if ($tipo_sconto == 'PRC') {
- $sconto_calcolato = calcola_sconto([
- 'sconto' => $sconto_riga,
- 'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($sconto_calcolato / $obj->qta) : $obj->prezzo_unitario,
- 'tipo' => 'PRC',
- 'qta' => $obj->qta,
- ]);
+ // Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
+ // TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
+ $prezzo = $riga['PrezzoUnitario'];
+ $qta = $riga['Quantita'] ?: 1;
- if ($tipo == 'PRC') {
- $tot_sconto = $sconto_calcolato * 100 / $obj->imponibile;
+ // Prezzo e quantità
+ $obj->prezzo_unitario = $prezzo;
+ $obj->qta = $qta;
+
+ if (!empty($riga['UnitaMisura'])) {
+ $obj->um = $riga['UnitaMisura'];
+ }
+
+ // Sconti e maggiorazioni
+ $sconti = $riga['ScontoMaggiorazione'];
+ if (!empty($sconti)) {
+ $sconto_unitario = 0;
+ $sconti = $sconti[0] ? $sconti : [$sconti];
+
+ // Determina il tipo di sconto in caso di sconti misti UNT e PRC
+ foreach ($sconti as $sconto) {
+ $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
+ if (!empty($tipo) && $tipo_sconto != $tipo) {
+ $tipo = 'UNT';
} else {
- $tot_sconto = $sconto_calcolato;
+ $tipo = $tipo_sconto;
}
- } else {
- $tot_sconto = $sconto_riga;
}
- $sconto_unitario += $tot_sconto;
+ foreach ($sconti as $sconto) {
+ $unitario = $sconto['Importo'] ?: $sconto['Percentuale'];
+
+ // Sconto o Maggiorazione
+ $sconto_riga = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
+
+ $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
+ if ($tipo_sconto == 'PRC') {
+ $sconto_calcolato = calcola_sconto([
+ 'sconto' => $sconto_riga,
+ 'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($sconto_calcolato / $obj->qta) : $obj->prezzo_unitario,
+ 'tipo' => 'PRC',
+ 'qta' => $obj->qta,
+ ]);
+
+ if ($tipo == 'PRC') {
+ $tot_sconto = $sconto_calcolato * 100 / $obj->imponibile;
+ } else {
+ $tot_sconto = $sconto_calcolato;
+ }
+ } else {
+ $tot_sconto = $sconto_riga;
+ }
+
+ $sconto_unitario += $tot_sconto;
+ }
+
+ $obj->setSconto($sconto_unitario, $tipo);
}
- $obj->setSconto($sconto_unitario, $tipo);
- }
+ // Aggiornamento prezzo di acquisto e fornitore predefinito in base alle impostazioni
+ if (!empty($articolo)) {
+ if ($update_info[$key] == 'update_price' || $update_info[$key] == 'update_all') {
+ $dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $anagrafica->idanagrafica, $direzione)
+ ->first();
- // Aggiornamento prezzo di acquisto e fornitore predefinito in base alle impostazioni
- if (!empty($articolo)) {
- if ($update_info[$key] == 'update_price' || $update_info[$key] == 'update_all') {
- $dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $anagrafica->idanagrafica, $direzione)
- ->first();
+ // Aggiungo associazione fornitore-articolo se non presente
+ if (empty($dettaglio_predefinito)) {
+ $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
+ }
- // Aggiungo associazione fornitore-articolo se non presente
- if (empty($dettaglio_predefinito)) {
- $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
- }
+ // Imposto lo sconto nel listino solo se è una percentuale, se è un importo lo sottraggo dal prezzo
+ if ($tipo == 'PRC') {
+ $dettaglio_predefinito->sconto_percentuale = $sconto_unitario;
+ $prezzo_unitario = $obj->prezzo_unitario;
+ $prezzo_acquisto = $obj->prezzo_unitario - ($obj->prezzo_unitario * $sconto_unitario / 100);
+ } else {
+ $prezzo_unitario = $obj->prezzo_unitario - $sconto_unitario;
+ $prezzo_acquisto = $prezzo_unitario;
+ }
- // Imposto lo sconto nel listino solo se è una percentuale, se è un importo lo sottraggo dal prezzo
- if ($tipo == 'PRC') {
- $dettaglio_predefinito->sconto_percentuale = $sconto_unitario;
- $prezzo_unitario = $obj->prezzo_unitario;
- $prezzo_acquisto = $obj->prezzo_unitario - ($obj->prezzo_unitario * $sconto_unitario / 100);
- } else {
- $prezzo_unitario = $obj->prezzo_unitario - $sconto_unitario;
- $prezzo_acquisto = $prezzo_unitario;
- }
+ // Aggiornamento listino
+ $dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
+ $dettaglio_predefinito->save();
- // Aggiornamento listino
- $dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
- $dettaglio_predefinito->save();
-
- // Aggiornamento fornitore predefinito
- if ($update_info[$key] == 'update_all') {
- // Aggiornamento prezzo di acquisto e fornitore predefinito
- $articolo->prezzo_acquisto = $prezzo_acquisto;
- $articolo->id_fornitore = $anagrafica->idanagrafica;
- $articolo->save();
+ // Aggiornamento fornitore predefinito
+ if ($update_info[$key] == 'update_all') {
+ // Aggiornamento prezzo di acquisto e fornitore predefinito
+ $articolo->prezzo_acquisto = $prezzo_acquisto;
+ $articolo->id_fornitore = $anagrafica->idanagrafica;
+ $articolo->save();
+ }
}
}
+
+ $tipo = null;
+ $sconto_unitario = null;
}
- $tipo = null;
- $sconto_unitario = null;
$obj->save();
}
@@ -317,7 +332,7 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->descrizione = tr('Arrotondamento calcolato in automatico');
$obj->id_iva = $iva_arrotondamento['id'];
- $obj->idconto = $conto[0];
+ $obj->idconto = $conto_arrotondamenti;
$obj->prezzo_unitario = round($diff, 4);
$obj->qta = 1;