|
955 | 955 | ->where('co_iva.indetraibile', 100) |
956 | 956 | ->sum('sconto'); |
957 | 957 |
|
958 | | - $iva_indetraibile = $database->table('co_righe_documenti') |
| 958 | + $iva_indetraibile_id = $database->table('co_righe_documenti') |
959 | 959 | ->join('co_iva', 'co_iva.id', '=', 'co_righe_documenti.idiva') |
960 | 960 | ->where('co_righe_documenti.iddocumento', $fattura->id) |
961 | 961 | ->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 | + } |
963 | 969 |
|
964 | 970 | if ($imponibile) { |
965 | 971 | $totale_imponibile = setting('Utilizza prezzi di vendita comprensivi di IVA') ? ($imponibile - $sconto) + (($imponibile - $sconto) * $iva->percentuale / 100) : ($imponibile - $sconto); |
966 | 972 | $totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile; |
967 | | - } elseif ($imponibile_indetraibile) { |
| 973 | + } elseif ($imponibile_indetraibile && $iva_indetraibile) { |
968 | 974 | $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); |
969 | 975 | $totale_imponibile = $fattura->tipo->reversed == 1 ? -$totale_imponibile : $totale_imponibile; |
970 | 976 | } |
971 | 977 |
|
| 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 | + |
972 | 984 | $autofattura = Fattura::build($anagrafica, $tipo, $data, $id_segment); |
973 | 985 | $autofattura->idconto = $fattura->idconto; |
974 | 986 | $autofattura->idpagamento = $fattura->idpagamento; |
|
978 | 990 |
|
979 | 991 | $riga = Riga::build($autofattura); |
980 | 992 | $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; |
982 | 1006 | $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); |
984 | 1008 | $riga->qta = 1; |
985 | 1009 | $riga->save(); |
986 | 1010 |
|
|
0 commit comments