From 85665a9e977bab7282db27efae4e54c7f5cf88ca Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Fri, 30 Jun 2023 13:08:21 +0200 Subject: [PATCH] Fix arrotondamenti in importazione fattura elettronica --- plugins/importFE/src/FatturaOrdinaria.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index 4ed53d948..1010f5b47 100755 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -87,12 +87,15 @@ class FatturaOrdinaria extends FatturaElettronica { $result = $this->getBody()['DatiBeniServizi']['DettaglioLinee']; $result = $this->forceArray($result); - + foreach ($result as $res){ + $totale_imposta += $res['PrezzoTotale']*$res['AliquotaIVA']/100; + } // Aggiunta degli arrotondamenti IVA come righe indipendenti $riepiloghi = $this->getBody()['DatiBeniServizi']['DatiRiepilogo']; $riepiloghi = $this->forceArray($riepiloghi); + foreach ($riepiloghi as $riepilogo) { - $valore = isset($riepilogo['Arrotondamento']) ? floatval($riepilogo['Arrotondamento']) : 0; + $valore = (isset($riepilogo['Arrotondamento']) && (string)round($totale_imposta, 2) != $riepilogo['Imposta']) ? $riepilogo['Arrotondamento'] : 0; if (!empty($valore)) { $descrizione = tr('Arrotondamento IVA _VALUE_', [ '_VALUE_' => empty($riepilogo['Natura']) ? numberFormat($riepilogo['AliquotaIVA']).'%' : $riepilogo['Natura'], @@ -222,10 +225,9 @@ class FatturaOrdinaria extends FatturaElettronica } // Totale documento - $totale_righe = 0; $dati_riepilogo = $this->getBody()['DatiBeniServizi']['DatiRiepilogo']; if (!empty($dati_riepilogo['ImponibileImporto'])) { - $totale_righe = $dati_riepilogo['ImponibileImporto']; + $totale_righe += $riga['PrezzoTotale']; } elseif (is_array($dati_riepilogo)) { foreach ($dati_riepilogo as $dato) { $totale_righe += $dato['ImponibileImporto']; @@ -356,7 +358,10 @@ class FatturaOrdinaria extends FatturaElettronica // Arrotondamenti differenti nella fattura XML $diff = round(abs($totale_righe) - abs($fattura->totale_imponibile + $fattura->rivalsa_inps), 2); - if (!empty($diff)) { + if (!empty($diff) && $diff != abs($dati_riepilogo['Arrotondamento']) || (empty($dati_riepilogo['Arrotondamento']) && abs($dati_riepilogo['ImponibileImporto']) != abs($totale_righe))) { + if (empty($dati_riepilogo['Arrotondamento'])){ + $diff = abs($dati_riepilogo['ImponibileImporto']) - abs($totale_righe); + } // Rimozione dell'IVA calcolata automaticamente dal gestionale $iva_arrotondamento = database()->fetchOne('SELECT * FROM co_iva WHERE percentuale=0 AND deleted_at IS NULL'); $diff = $diff * 100 / (100 + $iva_arrotondamento['percentuale']);