Skip to content

Commit efcc30c

Browse files
committed
fix: arrotondamento iva fatture
1 parent cf1dfb5 commit efcc30c

1 file changed

Lines changed: 25 additions & 16 deletions

File tree

plugins/importFE/src/FatturaOrdinaria.php

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -520,31 +520,40 @@ public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea
520520
$totale_documento = $this->getBody()['DatiPagamento']['DettaglioPagamento']['ImportoPagamento'];
521521
}
522522

523-
$differenza_iva = round(abs($fattura->iva) - abs($imposta_riepilogo), 2);
524523
// Calcolo corretto mantenendo i segni originali per gestire correttamente i totali negativi
525524
$totale_calcolato = $fattura->totale_imponibile + $fattura->iva + $fattura->rivalsa_inps;
526525
$diff = round($totale_calcolato - ($totale_documento ?: 0), 2);
527526

527+
// Verifica se esiste già un arrotondamento nel XML (campo Arrotondamento nei DatiGeneraliDocumento)
528+
$arrotondamento_documento_xml = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']['Arrotondamento'] ?? 0;
529+
528530
$iva_arrotondamento = database()->fetchOne('SELECT * FROM `co_iva` WHERE `percentuale`= 0 AND `deleted_at` IS NULL LIMIT 1');
529-
if ($diff || $differenza_iva) {
530-
if ($diff && $differenza_iva) {
531-
$diff = ($diff + $differenza_iva);
532-
} elseif ($diff == 0 && $differenza_iva) {
533-
$diff = $differenza_iva;
534-
}
535531

536-
// L'arrotondamento deve avere segno opposto alla differenza per correggere il totale
537-
$diff = -$diff;
532+
// Creiamo l'arrotondamento solo se c'è una differenza significativa
533+
// e non è già presente un arrotondamento nel XML
534+
if (abs($diff) > 0.001) {
535+
$arrotondamento_finale = 0;
536+
537+
if ($arrotondamento_documento_xml != 0) {
538+
// Se c'è un arrotondamento esplicito nel XML, lo usiamo
539+
$arrotondamento_finale = $arrotondamento_documento_xml;
540+
} else {
541+
// Altrimenti usiamo la differenza calcolata con segno opposto per correggere
542+
$arrotondamento_finale = -$diff;
543+
}
538544

539-
$obj = Riga::build($fattura);
545+
// Creiamo la riga di arrotondamento solo se significativo
546+
if (abs($arrotondamento_finale) > 0.001) {
547+
$obj = Riga::build($fattura);
540548

541-
$obj->descrizione = tr('Arrotondamento calcolato in automatico');
542-
$obj->id_iva = $iva_arrotondamento['id'];
543-
$obj->idconto = $conto_arrotondamenti;
544-
$obj->prezzo_unitario = round($diff, 4);
545-
$obj->qta = 1;
549+
$obj->descrizione = tr('Arrotondamento calcolato in automatico');
550+
$obj->id_iva = $iva_arrotondamento['id'];
551+
$obj->idconto = $conto_arrotondamenti;
552+
$obj->prezzo_unitario = round($arrotondamento_finale, 4);
553+
$obj->qta = 1;
546554

547-
$obj->save();
555+
$obj->save();
556+
}
548557
}
549558
}
550559

0 commit comments

Comments
 (0)