Importazione righe FE con quantità e importo a 0 come descrizioni

This commit is contained in:
loviuz 2021-11-30 11:09:16 +01:00
parent 7815054a2e
commit 8d79786184
2 changed files with 126 additions and 89 deletions

View File

@ -372,6 +372,7 @@ if (!empty($righe)) {
$qta = $riga['Quantita']; $qta = $riga['Quantita'];
$um = $riga['UnitaMisura']; $um = $riga['UnitaMisura'];
$prezzo_unitario = $riga['PrezzoUnitario'] ?: $riga['Importo']; $prezzo_unitario = $riga['PrezzoUnitario'] ?: $riga['Importo'];
$is_descrizione = empty((float)$riga['Quantita']) && empty((float)$prezzo_unitario);
echo ' echo '
<tr data-id="'.$key.'" data-qta="'.$qta.'" data-prezzo_unitario="'.$prezzo_unitario.'" data-iva_percentuale="'.$riga['AliquotaIVA'].'"> <tr data-id="'.$key.'" data-qta="'.$qta.'" data-prezzo_unitario="'.$prezzo_unitario.'" data-iva_percentuale="'.$riga['AliquotaIVA'].'">
@ -404,8 +405,11 @@ if (!empty($righe)) {
]).' ]).'
<span id="riferimento_'.$key.'_iva"></span> <span id="riferimento_'.$key.'_iva"></span>
</td> </td>
</tr> </tr>';
if (!$is_descrizione) {
echo '
<tr id="dati_'.$key.'"> <tr id="dati_'.$key.'">
<td colspan="4" class="row"> <td colspan="4" class="row">
<span class="hide" id="aliquota['.$key.']">'.$riga['AliquotaIVA'].'</span> <span class="hide" id="aliquota['.$key.']">'.$riga['AliquotaIVA'].'</span>
@ -462,6 +466,24 @@ if (!empty($righe)) {
</div> </div>
</td> </td>
</tr>'; </tr>';
} else {
echo '
<input type="hidden" name="qta_riferimento['.$key.']" id="qta_riferimento_'.$key.'" value="'.$riga['Quantita'].'">
<input type="hidden" name="tipo_riferimento['.$key.']" id="tipo_riferimento_'.$key.'" value="">
<input type="hidden" name="id_riferimento['.$key.']" id="id_riferimento_'.$key.'" value="">
<input type="hidden" name="id_riga_riferimento['.$key.']" id="id_riga_riferimento_'.$key.'" value="">
<input type="hidden" name="tipo_riga_riferimento['.$key.']" id="tipo_riga_riferimento_'.$key.'" value="">
<input type="hidden" name="tipo_riferimento_vendita['.$key.']" id="tipo_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="id_riferimento_vendita['.$key.']" id="id_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="id_riga_riferimento_vendita['.$key.']" id="id_riga_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="tipo_riga_riferimento_vendita['.$key.']" id="tipo_riga_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="conto['.$key.']" value="">
<input type="hidden" name="iva['.$key.']" value="">
<input type="hidden" name="update_info['.$key.']" value="">';
}
} }
echo ' echo '

View File

@ -24,6 +24,7 @@ use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Articoli\Categoria; use Modules\Articoli\Categoria;
use Modules\Fatture\Components\Articolo; use Modules\Fatture\Components\Articolo;
use Modules\Fatture\Components\Descrizione;
use Modules\Fatture\Components\Riga; use Modules\Fatture\Components\Riga;
use Modules\Fatture\Fattura; use Modules\Fatture\Fattura;
use Plugins\ListinoClienti\DettaglioPrezzo; use Plugins\ListinoClienti\DettaglioPrezzo;
@ -123,6 +124,7 @@ class FatturaOrdinaria extends FatturaElettronica
$id_rivalsa = $info['id_rivalsa']; $id_rivalsa = $info['id_rivalsa'];
$calcolo_ritenuta_acconto = $info['rivalsa_in_ritenuta'] ? 'IMP+RIV' : 'IMP'; $calcolo_ritenuta_acconto = $info['rivalsa_in_ritenuta'] ? 'IMP+RIV' : 'IMP';
$ritenuta_contributi = !empty($fattura->id_ritenuta_contributi); $ritenuta_contributi = !empty($fattura->id_ritenuta_contributi);
$conto_arrotondamenti = null;
foreach ($righe as $key => $riga) { foreach ($righe as $key => $riga) {
$articolo = ArticoloOriginale::find($articoli[$key]); $articolo = ArticoloOriginale::find($articoli[$key]);
@ -130,6 +132,8 @@ class FatturaOrdinaria extends FatturaElettronica
$riga['PrezzoUnitario'] = floatval($riga['PrezzoUnitario']); $riga['PrezzoUnitario'] = floatval($riga['PrezzoUnitario']);
$riga['Quantita'] = floatval($riga['Quantita']); $riga['Quantita'] = floatval($riga['Quantita']);
$is_descrizione = empty($riga['Quantita']) && empty($riga['PrezzoUnitario']);
$codici = $riga['CodiceArticolo'] ?: []; $codici = $riga['CodiceArticolo'] ?: [];
$codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici; $codici = !empty($codici) && !isset($codici[0]) ? [$codici] : $codici;
@ -161,6 +165,10 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->movimentazione($movimentazione); $obj->movimentazione($movimentazione);
$target_type = Articolo::class; $target_type = Articolo::class;
} elseif($is_descrizione) {
$obj = Descrizione::build($fattura);
$target_type = Descrizione::class;
} else { } else {
$obj = Riga::build($fattura); $obj = Riga::build($fattura);
@ -190,113 +198,120 @@ class FatturaOrdinaria extends FatturaElettronica
]); ]);
} }
$obj->id_iva = $iva[$key]; if (!$is_descrizione) {
$obj->idconto = $conto[$key]; $obj->id_iva = $iva[$key];
$obj->idconto = $conto[$key];
$obj->id_rivalsa_inps = $id_rivalsa; if (empty($conto_arrotondamenti) && !empty($conto[$key]) ){
$obj->ritenuta_contributi = $ritenuta_contributi; $conto_arrotondamenti = $conto[$key];
if (!empty($riga['Ritenuta'])) {
$obj->id_ritenuta_acconto = $id_ritenuta_acconto;
$obj->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
}
// Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
// TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
$prezzo = $riga['PrezzoUnitario'];
$qta = $riga['Quantita'] ?: 1;
// Prezzo e quantità
$obj->prezzo_unitario = $prezzo;
$obj->qta = $qta;
if (!empty($riga['UnitaMisura'])) {
$obj->um = $riga['UnitaMisura'];
}
// Sconti e maggiorazioni
$sconti = $riga['ScontoMaggiorazione'];
if (!empty($sconti)) {
$sconto_unitario = 0;
$sconti = $sconti[0] ? $sconti : [$sconti];
// Determina il tipo di sconto in caso di sconti misti UNT e PRC
foreach ($sconti as $sconto) {
$tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
if (!empty($tipo) && $tipo_sconto != $tipo) {
$tipo = 'UNT';
} else {
$tipo = $tipo_sconto;
}
} }
foreach ($sconti as $sconto) { $obj->id_rivalsa_inps = $id_rivalsa;
$unitario = $sconto['Importo'] ?: $sconto['Percentuale']; $obj->ritenuta_contributi = $ritenuta_contributi;
// Sconto o Maggiorazione if (!empty($riga['Ritenuta'])) {
$sconto_riga = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario; $obj->id_ritenuta_acconto = $id_ritenuta_acconto;
$obj->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
}
$tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC'; // Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito)
if ($tipo_sconto == 'PRC') { // TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti.
$sconto_calcolato = calcola_sconto([ $prezzo = $riga['PrezzoUnitario'];
'sconto' => $sconto_riga, $qta = $riga['Quantita'] ?: 1;
'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($sconto_calcolato / $obj->qta) : $obj->prezzo_unitario,
'tipo' => 'PRC',
'qta' => $obj->qta,
]);
if ($tipo == 'PRC') { // Prezzo e quantità
$tot_sconto = $sconto_calcolato * 100 / $obj->imponibile; $obj->prezzo_unitario = $prezzo;
$obj->qta = $qta;
if (!empty($riga['UnitaMisura'])) {
$obj->um = $riga['UnitaMisura'];
}
// Sconti e maggiorazioni
$sconti = $riga['ScontoMaggiorazione'];
if (!empty($sconti)) {
$sconto_unitario = 0;
$sconti = $sconti[0] ? $sconti : [$sconti];
// Determina il tipo di sconto in caso di sconti misti UNT e PRC
foreach ($sconti as $sconto) {
$tipo_sconto = !empty($sconto['Importo']) ? 'UNT' : 'PRC';
if (!empty($tipo) && $tipo_sconto != $tipo) {
$tipo = 'UNT';
} else { } else {
$tot_sconto = $sconto_calcolato; $tipo = $tipo_sconto;
} }
} else {
$tot_sconto = $sconto_riga;
} }
$sconto_unitario += $tot_sconto; foreach ($sconti as $sconto) {
$unitario = $sconto['Importo'] ?: $sconto['Percentuale'];
// 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' => $sconto_unitario ? $obj->prezzo_unitario - ($sconto_calcolato / $obj->qta) : $obj->prezzo_unitario,
'tipo' => 'PRC',
'qta' => $obj->qta,
]);
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); // Aggiornamento prezzo di acquisto e fornitore predefinito in base alle impostazioni
} if (!empty($articolo)) {
if ($update_info[$key] == 'update_price' || $update_info[$key] == 'update_all') {
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $anagrafica->idanagrafica, $direzione)
->first();
// Aggiornamento prezzo di acquisto e fornitore predefinito in base alle impostazioni // Aggiungo associazione fornitore-articolo se non presente
if (!empty($articolo)) { if (empty($dettaglio_predefinito)) {
if ($update_info[$key] == 'update_price' || $update_info[$key] == 'update_all') { $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione);
$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $anagrafica->idanagrafica, $direzione) }
->first();
// Aggiungo associazione fornitore-articolo se non presente // Imposto lo sconto nel listino solo se è una percentuale, se è un importo lo sottraggo dal prezzo
if (empty($dettaglio_predefinito)) { if ($tipo == 'PRC') {
$dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); $dettaglio_predefinito->sconto_percentuale = $sconto_unitario;
} $prezzo_unitario = $obj->prezzo_unitario;
$prezzo_acquisto = $obj->prezzo_unitario - ($obj->prezzo_unitario * $sconto_unitario / 100);
} else {
$prezzo_unitario = $obj->prezzo_unitario - $sconto_unitario;
$prezzo_acquisto = $prezzo_unitario;
}
// Imposto lo sconto nel listino solo se è una percentuale, se è un importo lo sottraggo dal prezzo // Aggiornamento listino
if ($tipo == 'PRC') { $dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario);
$dettaglio_predefinito->sconto_percentuale = $sconto_unitario; $dettaglio_predefinito->save();
$prezzo_unitario = $obj->prezzo_unitario;
$prezzo_acquisto = $obj->prezzo_unitario - ($obj->prezzo_unitario * $sconto_unitario / 100);
} else {
$prezzo_unitario = $obj->prezzo_unitario - $sconto_unitario;
$prezzo_acquisto = $prezzo_unitario;
}
// Aggiornamento listino // Aggiornamento fornitore predefinito
$dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario); if ($update_info[$key] == 'update_all') {
$dettaglio_predefinito->save(); // Aggiornamento prezzo di acquisto e fornitore predefinito
$articolo->prezzo_acquisto = $prezzo_acquisto;
// Aggiornamento fornitore predefinito $articolo->id_fornitore = $anagrafica->idanagrafica;
if ($update_info[$key] == 'update_all') { $articolo->save();
// Aggiornamento prezzo di acquisto e fornitore predefinito }
$articolo->prezzo_acquisto = $prezzo_acquisto;
$articolo->id_fornitore = $anagrafica->idanagrafica;
$articolo->save();
} }
} }
$tipo = null;
$sconto_unitario = null;
} }
$tipo = null;
$sconto_unitario = null;
$obj->save(); $obj->save();
} }
@ -317,7 +332,7 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->descrizione = tr('Arrotondamento calcolato in automatico'); $obj->descrizione = tr('Arrotondamento calcolato in automatico');
$obj->id_iva = $iva_arrotondamento['id']; $obj->id_iva = $iva_arrotondamento['id'];
$obj->idconto = $conto[0]; $obj->idconto = $conto_arrotondamenti;
$obj->prezzo_unitario = round($diff, 4); $obj->prezzo_unitario = round($diff, 4);
$obj->qta = 1; $obj->qta = 1;