1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-24 22:42:33 +01:00

Fix arrotondamenti importazione FE

This commit is contained in:
Thomas Zilio 2019-02-18 10:34:31 +01:00
parent 41c3451c85
commit c21b03e91a

View File

@ -200,14 +200,15 @@ class FatturaElettronica
public function saveRighe($articoli, $iva, $conto)
{
$righe = $this->getRighe();
$fattura = $this->getFattura();
foreach ($righe as $key => $riga) {
$articolo = ArticoloOriginale::find($articoli[$key]);
if (!empty($articolo)) {
$obj = Articolo::build($this->getFattura(), $articolo);
$obj = Articolo::build($fattura, $articolo);
} else {
$obj = Riga::build($this->getFattura());
$obj = Riga::build($fattura);
}
$obj->descrizione = $riga['Descrizione'];
@ -221,69 +222,57 @@ class FatturaElettronica
}
$sconti = $riga['ScontoMaggiorazione'];
if (!empty($sconti)) {
if ($sconti['Percentuale'] || $sconti['Importo']) {
$tipo = !empty($sconti['Percentuale']) ? 'PRC' : 'EUR';
$unitario = $sconti['Percentuale'] ?: $sconti['Importo'];
$sconti = $sconti[0] ? $sconti : [$sconti];
$tipo = !empty($sconti[0]['Percentuale']) ? 'PRC' : 'UNT';
//SConto o MaGgiorazione
$unitario = ($sconti['Tipo'] == 'SC') ? $unitario : -$unitario;
$lista = [];
foreach ($sconti as $sconto) {
$unitario = $sconto['Percentuale'] ?: $sconto['Importo'];
if (!empty($unitario)) {
$obj->sconto_unitario = $unitario;
$obj->tipo_sconto = $tipo;
}
// Sconto o Maggiorazione
$lista[] = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
}
// Sconti multipli
else {
$sconto = $sconti[0]['Percentuale'] ? $sconti[0]['Percentuale'] : $sconti['Percentuale'];
$tipo = !empty($sconto) ? 'PRC' : 'EUR';
if ($tipo == 'PRC') {
$elenco = implode('+', $lista);
$sconto = calcola_sconto([
'sconto' => $elenco,
'prezzo' => $obj->prezzo_unitario_vendita,
'tipo' => 'PRC',
'qta' => $obj->qta,
]);
$sconto_totale = 0;
if ($tipo == 'PRC') {
/**
* Trasformo un eventuale sconto percentuale combinato in più
* sconti:
* Esempio:
* 40% + 30% è uno sconto del 42%.
*/
$prezzo_intero = $riga['PrezzoUnitario'] * $riga['Quantita'];
$prezzo_scontato = $prezzo_intero;
foreach ($sconti as $scontor) {
$prezzo_scontato -= $prezzo_scontato / 100 * $scontor['Percentuale'];
}
// Ricavo la percentuale finale di sconto con una proporzione
$percentuale_totale = (1 - ($prezzo_scontato / $prezzo_intero)) * 100;
if (!empty($percentuale_totale)) {
$obj->sconto_unitario = $percentuale_totale;
$obj->tipo_sconto = $tipo;
}
} else {
// Combino gli sconti tra loro
foreach ($sconti as $sconto) {
$unitario = $sconto['Percentuale'] ?: $sconto['Importo'];
//Sconto o Maggiorazione
$unitario = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
$sconto_totale += $unitario;
}
if (!empty($unitario)) {
$obj->sconto_unitario = $sconto_totale;
$obj->tipo_sconto = $tipo;
}
}
/*
* 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);
}
$obj->sconto_unitario = $sconto_unitario;
$obj->tipo_sconto = $tipo;
}
$obj->save();
}
// Arrotondamenti differenti nella fattura XML
$totali = array_column($righe, 'PrezzoTotale');
$diff = sum($totali) - $fattura->imponibile_scontato;
if (!empty($diff)) {
$obj = Riga::build($fattura);
$obj->descrizione = tr('Arrotondamento calcolato in automatico');
$obj->id_iva = $iva[0];
$obj->idconto = $conto[0];
$obj->prezzo_unitario_vendita = $diff;
$obj->qta = 1;
$obj->save();
}
}
public function getAllegati()
@ -370,7 +359,7 @@ class FatturaElettronica
// Sconto globale
$sconto = $dati_generali['ScontoMaggiorazione'];
if (!empty($sconto)) {
$tipo = !empty($sconto['Percentuale']) ? 'PRC' : 'EUR';
$tipo = !empty($sconto['Percentuale']) ? 'PRC' : 'UNT';
$unitario = $sconto['Percentuale'] ?: $sconto['Importo'];
$unitario = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;