Fix calcolo ritenuta in import fe

This commit is contained in:
Pek5892 2023-12-18 16:10:45 +01:00
parent 6dffe7b481
commit 70c9e02126
1 changed files with 19 additions and 16 deletions

View File

@ -576,44 +576,47 @@ class FatturaOrdinaria extends FatturaElettronica
if (!empty($ritenuta)) { if (!empty($ritenuta)) {
$totali = []; $totali = [];
$ritenuta_norighe = true; $ritenuta_norighe = true;
foreach ($righe as $riga) { foreach ($righe as $riga) {
if (!empty($riga['Ritenuta'])) { if (!empty($riga['Ritenuta'])) {
$totali[] = $riga['PrezzoTotale']; $totali[] = $riga['PrezzoTotale'];
$ritenuta_norighe = false; $ritenuta_norighe = false;
$ritenuta = $this->forceArray($ritenuta);
foreach ($ritenuta as $rit) {
$percentuale += floatval($rit['AliquotaRitenuta']);
$importo += floatval($rit['ImportoRitenuta']);
}
} }
} }
if (!empty($ritenuta)) {
$ritenuta = $this->forceArray($ritenuta);
foreach ($ritenuta as $rit) {
$percentuale += floatval($rit['AliquotaRitenuta']);
$importo += floatval($rit['ImportoRitenuta']);
}
}
// Calcolo la ritenuta su tutte le righe se non è specificata su nessuna riga // Calcolo la ritenuta su tutte le righe se non è specificata su nessuna riga
if (empty($totali)) { if (empty($totali)) {
$totale = array_sum(array_column($righe, 'PrezzoTotale')); $totale = array_sum(array_column($righe, 'PrezzoTotale'));
} else { } else {
$totale = sum($totali); $totale = sum($totali);
} }
$totale_previsto = round($importo / $percentuale * 100, 2); $totale_previsto = round($importo * 100 / $percentuale, 2);
$percentuale_importo = round($totale_previsto / $totale * 100, 2); $percentuale_importo = round($totale_previsto / $totale * 100, 2);
$percentuale_importo = min($percentuale_importo, 100); // Nota: Fix per la percentuale che superava il 100% nel caso di importi con Rivalsa compresa $percentuale_importo = min($percentuale_importo, 100); // Nota: Fix per la percentuale che superava il 100% nel caso di importi con Rivalsa compresa
$ritenuta_acconto = $database->fetchOne('SELECT * FROM`co_ritenutaacconto` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo)); $ritenuta_acconto = $database->fetchOne("SELECT * FROM `co_ritenutaacconto` WHERE `percentuale` = ".prepare($percentuale)." AND `percentuale_imponibile` = ".prepare($percentuale_importo));
if (empty($ritenuta_acconto)) { if (empty($ritenuta_acconto)) {
$descrizione = tr('Ritenuta _PRC_% sul _TOT_%', [ $descrizione = tr('Ritenuta _PRC_% sul _TOT_%', [
'_PRC_' => numberFormat($percentuale), '_PRC_' => numberFormat($percentuale),
'_TOT_' => numberFormat($percentuale_importo), '_TOT_' => numberFormat($percentuale_importo),
]); ]);
$database->query('INSERT INTO `co_ritenutaacconto` (`descrizione`, `percentuale`, `percentuale_imponibile`) VALUES ('.prepare($descrizione).', '.prepare($percentuale).', '.prepare($percentuale_importo).')'); $database->query("INSERT INTO `co_ritenutaacconto` (`descrizione`, `percentuale`, `percentuale_imponibile`) VALUES (".prepare($descrizione).", ".prepare($percentuale).", ".prepare($percentuale_importo).")");
$ritenuta_acconto = $database->fetchOne("SELECT * FROM `co_ritenutaacconto` WHERE `percentuale` = ".prepare($percentuale)." AND `percentuale_imponibile` = ".prepare($percentuale_importo));
} }
$ritenuta_acconto = $database->fetchOne('SELECT * FROM`co_ritenutaacconto` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
$id_ritenuta_acconto = $ritenuta_acconto['id']; $id_ritenuta_acconto = $ritenuta_acconto['id'];
} }
return [ return [
'id_ritenuta_acconto' => $id_ritenuta_acconto, 'id_ritenuta_acconto' => $id_ritenuta_acconto,
'id_rivalsa' => $id_rivalsa, 'id_rivalsa' => $id_rivalsa,