1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-17 12:00:46 +01:00

Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dasc3er 2021-09-17 17:18:24 +02:00
commit 5473baf226
2 changed files with 41 additions and 22 deletions

View File

@ -70,6 +70,10 @@ function sum($first, $second = null, $decimals = 4)
*/ */
function calcola_sconto($data) function calcola_sconto($data)
{ {
if (!isset($data['cumulativo'])) {
$data['cumulativo'] = true;
}
if ($data['tipo'] == 'PRC') { if ($data['tipo'] == 'PRC') {
$result = 0; $result = 0;
@ -80,7 +84,9 @@ function calcola_sconto($data)
$discount = $price / 100 * floatval($percentage); $discount = $price / 100 * floatval($percentage);
$result += $discount; $result += $discount;
$price -= $discount; if ($data['cumulativo']) {
$price -= $discount;
}
} }
} else { } else {
$result = floatval($data['sconto']); $result = floatval($data['sconto']);

View File

@ -223,36 +223,49 @@ class FatturaOrdinaria extends FatturaElettronica
// Sconti e maggiorazioni // Sconti e maggiorazioni
$sconti = $riga['ScontoMaggiorazione']; $sconti = $riga['ScontoMaggiorazione'];
if (!empty($sconti)) { if (!empty($sconti)) {
$sconto_unitario = 0;
$sconti = $sconti[0] ? $sconti : [$sconti]; $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) { foreach ($sconti as $sconto) {
$unitario = $sconto['Percentuale'] ?: $sconto['Importo']; $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
if(!empty($tipo) && $tipo_sconto!=$tipo){
// Sconto o Maggiorazione $tipo = 'UNT';
$lista[] = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario; } else{
$tipo = $tipo_sconto;
}
} }
if ($tipo == 'PRC') { foreach ($sconti as $sconto) {
$elenco = implode('+', $lista); $unitario = $sconto['Importo'] ?: $sconto['Percentuale'];
$sconto = calcola_sconto([
'sconto' => $elenco,
'prezzo' => $obj->prezzo_unitario,
'tipo' => 'PRC',
'qta' => $obj->qta,
]);
/* // Sconto o Maggiorazione
* Trasformazione di sconti multipli in sconto percentuale combinato. $sconto_riga = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
* Esempio: 40% + 30% è uno sconto del 42%.
*/ $tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
$sconto_unitario = $sconto * 100 / $obj->imponibile; if ($tipo_sconto == 'PRC') {
} else { $sconto_calcolato = calcola_sconto([
$sconto_unitario = sum($lista); '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); $obj->setSconto($sconto_unitario, $tipo);
$tipo = null;
} }
$obj->save(); $obj->save();