Skip to content

Commit 44d62b8

Browse files
committed
Fix: inversione segno note di credito
1 parent 147e9e8 commit 44d62b8

3 files changed

Lines changed: 34 additions & 9 deletions

File tree

modules/fatture/src/Fattura.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ public function isNota()
804804
}
805805

806806
/**
807-
* Controlla se la fattura è una nota di credito.
807+
* Controlla se la fattura è un'autofattura.
808808
*
809809
* @return bool
810810
*/

plugins/importFE/src/FatturaOrdinaria.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea
352352

353353
if (!$is_descrizione) {
354354
$iva_value = !empty($iva[$key]) ? $iva[$key] : setting('Iva predefinita');
355-
355+
356356
$obj->id_iva = $iva_value;
357357
$obj->idconto = $conto[$key];
358358

@@ -369,13 +369,26 @@ public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea
369369
$obj->id_rivalsa_inps = $id_rivalsa;
370370
}
371371

372-
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
372+
// Gestione corretta dei segni in base al tipo di documento
373+
$tipo_documento = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'];
374+
$is_nota_credito = ($tipo_documento == 'TD04');
375+
373376
if (!empty($articolo->um) && !empty($articolo->um_secondaria) && !empty((float) $articolo->fattore_um_secondaria) && strtolower((string) $riga['UnitaMisura']) == strtolower((string) $articolo->um_secondaria)) {
374377
$qta = (($riga['Quantita'] ?: 1) / ($articolo->fattore_um_secondaria ?: 1));
375-
$prezzo = $totale_righe_riepilogo > 0 ? $totale_righe_riepilogo / ($qta ?: 1) : -($totale_righe_riepilogo / ($qta ?: 1));
378+
// Solo per le note di credito (TD04) invertiamo i segni quando il totale è negativo
379+
if ($is_nota_credito && $totale_righe_riepilogo < 0) {
380+
$prezzo = -($totale_righe_riepilogo / ($qta ?: 1));
381+
} else {
382+
$prezzo = abs($totale_righe_riepilogo) / ($qta ?: 1);
383+
}
376384
} else {
377385
$qta = ($riga['Quantita'] ?: 1);
378-
$prezzo = $totale_righe_riepilogo > 0 ? $riga['PrezzoUnitario'] : -$riga['PrezzoUnitario'];
386+
// Solo per le note di credito (TD04) invertiamo i segni quando necessario
387+
if ($is_nota_credito && $riga['PrezzoUnitario'] > 0) {
388+
$prezzo = -$riga['PrezzoUnitario'];
389+
} else {
390+
$prezzo = $riga['PrezzoUnitario'];
391+
}
379392
}
380393

381394
// Prezzo e quantità

plugins/importFE/src/FatturaSemplificata.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,22 @@ public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea
131131
$obj->id_iva = $iva_value;
132132
$obj->idconto = $conto[$key];
133133

134-
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
135-
$prezzo = $prezzo < 0 ? -$prezzo : $prezzo;
136-
$qta = 1;
137-
$qta = $riga['Importo'] < 0 ? -$qta : $qta;
134+
// Gestione corretta dei segni in base al tipo di documento
135+
$tipo_documento = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'];
136+
$is_nota_credito = ($tipo_documento == 'TD04');
137+
138+
// Solo per le note di credito (TD04) invertiamo i segni
139+
if ($is_nota_credito) {
140+
$prezzo = $prezzo < 0 ? -$prezzo : $prezzo;
141+
$qta = 1;
142+
$qta = $riga['Importo'] < 0 ? -$qta : $qta;
143+
} else {
144+
// Per fatture normali e note di debito, manteniamo i segni originali
145+
$prezzo = abs($prezzo);
146+
$qta = 1;
147+
// Manteniamo il segno dell'importo nella quantità solo se è negativo
148+
$qta = $riga['Importo'] < 0 ? -$qta : $qta;
149+
}
138150

139151
// Prezzo e quantità
140152
$obj->prezzo_unitario = $prezzo;

0 commit comments

Comments
 (0)