Skip to content

Commit fb50c04

Browse files
committed
fix: creazione autofattura
1 parent 5f5c976 commit fb50c04

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

modules/fatture/actions.php

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -955,20 +955,32 @@
955955
->where('co_iva.indetraibile', 100)
956956
->sum('sconto');
957957

958-
$iva_indetraibile = $database->table('co_righe_documenti')
958+
$iva_indetraibile_id = $database->table('co_righe_documenti')
959959
->join('co_iva', 'co_iva.id', '=', 'co_righe_documenti.idiva')
960960
->where('co_righe_documenti.iddocumento', $fattura->id)
961961
->where('co_iva.indetraibile', 100)
962-
->first();
962+
->value('co_iva.id');
963+
964+
// Recupera l'oggetto Aliquota per l'IVA indetraibile se esiste
965+
$iva_indetraibile = null;
966+
if ($iva_indetraibile_id) {
967+
$iva_indetraibile = Aliquota::find($iva_indetraibile_id);
968+
}
963969

964970
if ($imponibile) {
965971
$totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile - $sconto) + (($imponibile - $sconto) * $iva->percentuale / 100) : ($imponibile - $sconto);
966972
$totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile;
967-
} elseif ($imponibile_indetraibile) {
973+
} elseif ($imponibile_indetraibile && $iva_indetraibile) {
968974
$totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile_indetraibile - $sconto_indetraibile) + (($imponibile_indetraibile - $sconto_indetraibile) * $iva_indetraibile->percentuale / 100) : ($imponibile_indetraibile - $sconto_indetraibile);
969975
$totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile;
970976
}
971977

978+
// Se non ci sono importi da fatturare, non creare l'autofattura
979+
if (empty($totale_imponibile)) {
980+
flash()->warning(tr('Nessun importo da integrare per il reverse charge'));
981+
break;
982+
}
983+
972984
$autofattura = Fattura::build($anagrafica, $tipo, $data, $id_segment);
973985
$autofattura->idconto = $fattura->idconto;
974986
$autofattura->idpagamento = $fattura->idpagamento;
@@ -978,9 +990,21 @@
978990

979991
$riga = Riga::build($autofattura);
980992
$riga->descrizione = $tipo->getTranslation('title');
981-
$riga->id_iva = $imponibile ? $iva->id : $iva_indetraibile->id;
993+
994+
// Determina quale IVA utilizzare, con fallback all'IVA predefinita
995+
$id_iva_da_usare = null;
996+
if ($imponibile && $iva) {
997+
$id_iva_da_usare = $iva->id;
998+
} elseif ($imponibile_indetraibile && $iva_indetraibile) {
999+
$id_iva_da_usare = $iva_indetraibile->id;
1000+
} else {
1001+
// Fallback all'IVA predefinita se non troviamo nessuna IVA appropriata
1002+
$id_iva_da_usare = $iva->id;
1003+
}
1004+
1005+
$riga->id_iva = $id_iva_da_usare;
9821006
$riga->idconto = setting('Conto per autofattura') ?: setting('Conto predefinito fatture di vendita');
983-
$riga->setPrezzoUnitario($totale_imponibile, $imponibile ? $iva->id : $iva_indetraibile->id);
1007+
$riga->setPrezzoUnitario($totale_imponibile, $id_iva_da_usare);
9841008
$riga->qta = 1;
9851009
$riga->save();
9861010

0 commit comments

Comments
 (0)