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