From acaf64d67e39dee8315126c06dc55d8d81656ec4 Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Fri, 17 Sep 2021 17:01:00 +0200 Subject: [PATCH] Gestione sconti import FE --- lib/common.php | 8 +++- plugins/importFE/src/FatturaOrdinaria.php | 55 ++++++++++++++--------- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/lib/common.php b/lib/common.php index e3d2622a3..0a18a79e0 100755 --- a/lib/common.php +++ b/lib/common.php @@ -70,6 +70,10 @@ function sum($first, $second = null, $decimals = 4) */ function calcola_sconto($data) { + if (!isset($data['cumulativo'])) { + $data['cumulativo'] = true; + } + if ($data['tipo'] == 'PRC') { $result = 0; @@ -80,7 +84,9 @@ function calcola_sconto($data) $discount = $price / 100 * floatval($percentage); $result += $discount; - $price -= $discount; + if ($data['cumulativo']) { + $price -= $discount; + } } } else { $result = floatval($data['sconto']); diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index 8910c61ac..ccf4b6df3 100755 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -223,36 +223,49 @@ class FatturaOrdinaria extends FatturaElettronica // Sconti e maggiorazioni $sconti = $riga['ScontoMaggiorazione']; if (!empty($sconti)) { + $sconto_unitario = 0; $sconti = $sconti[0] ? $sconti : [$sconti]; - $tipo = !empty($sconti[0]['Percentuale']) ? 'PRC' : 'UNT'; - $lista = []; + // Determina il tipo di sconto in caso di sconti misti UNT e PRC foreach ($sconti as $sconto) { - $unitario = $sconto['Percentuale'] ?: $sconto['Importo']; - - // Sconto o Maggiorazione - $lista[] = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario; + $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC'; + if(!empty($tipo) && $tipo_sconto!=$tipo){ + $tipo = 'UNT'; + } else{ + $tipo = $tipo_sconto; + } } - if ($tipo == 'PRC') { - $elenco = implode('+', $lista); - $sconto = calcola_sconto([ - 'sconto' => $elenco, - 'prezzo' => $obj->prezzo_unitario, - 'tipo' => 'PRC', - 'qta' => $obj->qta, - ]); + foreach ($sconti as $sconto) { + $unitario = $sconto['Importo'] ?: $sconto['Percentuale']; - /* - * Trasformazione di sconti multipli in sconto percentuale combinato. - * Esempio: 40% + 30% รจ uno sconto del 42%. - */ - $sconto_unitario = $sconto * 100 / $obj->imponibile; - } else { - $sconto_unitario = sum($lista); + // Sconto o Maggiorazione + $sconto_riga = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario; + + $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC'; + if ($tipo_sconto == 'PRC') { + $sconto_calcolato = calcola_sconto([ + 'sconto' => $sconto_riga, + 'prezzo' => $obj->prezzo_unitario, + 'tipo' => 'PRC', + 'qta' => $obj->qta, + 'cumulativo' => false, + ]); + + if($tipo == 'PRC'){ + $tot_sconto = $sconto_calcolato * 100 / $obj->imponibile; + } else { + $tot_sconto = $sconto_calcolato; + } + } else{ + $tot_sconto = $sconto_riga; + } + + $sconto_unitario += $tot_sconto; } $obj->setSconto($sconto_unitario, $tipo); + $tipo = null; } $obj->save();