Aggiunto sconto finale in Fatture di vendita per casi particolari

This commit is contained in:
Dasc3er 2021-02-26 18:45:52 +01:00
parent ad571895b5
commit fd3fafb9e3
10 changed files with 116 additions and 10 deletions

View File

@ -144,6 +144,8 @@ switch (post('op')) {
// Flag pagamento ritenuta
$fattura->is_ritenuta_pagata = post('is_ritenuta_pagata') ?: 0;
$fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
$fattura->save();
// Operazioni automatiche per le Fatture Elettroniche

View File

@ -390,6 +390,7 @@ elseif ($record['stato'] == 'Bozza') {
}
echo '
</div>';
if ($dir == 'entrata') {
echo '
<div class="row">
@ -406,7 +407,12 @@ elseif ($record['stato'] == 'Bozza') {
<div class="col-md-3 bollo">
{[ "type": "number", "label": "'.tr('Importo marca da bollo').'", "name": "bollo", "value": "$bollo$"]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "'.tr('Sconto finale').'", "name": "sconto_finale", "value": "'.($fattura->sconto_finale_percentuale ?: $fattura->sconto_finale).'", "icon-after": "choice|untprc|'.(empty($fattura->sconto_finale) ? 'PRC' : 'UNT').'", "help": "'.tr('Sconto finale in fattura, utilizzabile per applicare sconti sul Netto a pagare del documento e le relative scadenze').'. '.tr('Per utilizzarlo in relazione a una riga della Fattura Elettronica, inserire il testo di descrizione in \'\'Attributi avanzati\'\' -> \'\'Altri Dati Gestionali\'\' -> \'\'Riferimento Testo\'\' della specifica riga').'." ]}
</div>
</div>';
$bollo = new Bollo($fattura);
}
?>

View File

@ -234,6 +234,7 @@ $sconto = $fattura->sconto;
$totale_imponibile = $fattura->totale_imponibile;
$iva = $fattura->iva;
$totale = $fattura->totale;
$sconto_finale = $fattura->getScontoFinale();
$netto_a_pagare = $fattura->netto;
$rivalsa_inps = $fattura->rivalsa_inps;
$ritenuta_acconto = $fattura->ritenuta_acconto;
@ -361,6 +362,20 @@ if (!empty($ritenuta_contributi)) {
</tr>';
}
// SCONTO FINALE
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Sconto finale', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($sconto_finale, 2).'
</td>
<td></td>
</tr>';
}
// NETTO A PAGARE
if ($totale != $netto_a_pagare) {
echo '

View File

@ -51,6 +51,9 @@ class Fattura extends Document
'bollo' => 'float',
'peso' => 'float',
'volume' => 'float',
'sconto_finale' => 'float',
'sconto_finale_percentuale' => 'float',
];
protected $with = [
@ -280,14 +283,53 @@ class Fattura extends Document
// Calcoli
/**
* Imposta lo sconto finale sulla Fattura.
* Nota: lo sconto finale è limitato alla Fattura, e non può derivare da ulteriori documenti.
*
* @param $sconto
* @param $tipo
*/
public function setScontoFinale($sconto, $tipo)
{
if ($tipo == 'PRC') {
$this->sconto_finale_percentuale = $sconto;
$this->sconto_finale = 0;
} else {
$this->sconto_finale = $sconto;
$this->sconto_finale_percentuale = 0;
}
}
/**
* Restituisce lo sconto finale sulla Fattura.
* Nota: lo sconto finale è limitato alla Fattura, e non può derivare da ulteriori documenti.
*/
public function getScontoFinale()
{
$netto = $this->calcola('netto');
if (!empty($this->sconto_finale_percentuale)) {
$sconto = $netto * ($this->sconto_finale_percentuale / 100);
} else {
$sconto = $this->sconto_finale;
}
return $sconto;
}
/**
* Calcola il netto a pagare della fattura.
* Nota: lo sconto finale è limitato alla Fattura, e non può derivare da ulteriori documenti.
*
* @return float
*/
public function getNettoAttribute()
{
return $this->calcola('netto');
$netto = $this->calcola('netto');
$sconto_finale = $this->getScontoFinale();
return $netto - $sconto_finale;
}
/**

View File

@ -945,16 +945,40 @@ class FatturaElettronica
}
// Sconto / Maggiorazione (2.1.1.8)
if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_tipo'])) {
$result['ScontoMaggiorazione']['Tipo'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_tipo'];
$sconti_maggiorazioni = [];
$sconto_finale = $documento->getScontoFinale();
if (!empty($sconto_finale)) {
$sconto = [
'Tipo' => 'SC',
];
if (!empty($documento->sconto_finale_percentuale)) {
$sconto['Percentuale'] = $documento->sconto_finale_percentuale;
} else {
$sconto['Importo'] = $documento->sconto_finale;
}
$sconti_maggiorazioni[] = $result;
}
if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_tipo'])) {
$sconto = [
'Tipo' => $documento->dati_aggiuntivi_fe['sconto_maggiorazione_tipo'],
];
if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_percentuale'])) {
$result['ScontoMaggiorazione']['Percentuale'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_percentuale'];
$sconto['Percentuale'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_percentuale'];
}
if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_importo'])) {
$result['ScontoMaggiorazione']['Importo'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_importo'];
$sconto['Importo'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_importo'];
}
$sconti_maggiorazioni[] = $result;
}
if (!empty($sconti_maggiorazioni)) {
$result['ScontoMaggiorazione'] = $sconti_maggiorazioni;
}
// Importo Totale Documento (2.1.1.9)

View File

@ -359,8 +359,10 @@ if (!empty($righe)) {
echo '
<tr data-id="'.$key.'" data-qta="'.$qta.'" data-prezzo_unitario="'.$prezzo_unitario.'" data-iva_percentuale="'.$riga['AliquotaIVA'].'">
<td>
'.(empty($id_articolo) ? '<span class="label label-warning pull-right text-muted articolo-warning hidden">'.tr('Creazione articolo non disponibile').'</span>' : '').'
<small class="pull-right text-muted" id="riferimento_'.$key.'"></small>
'.$riga['Descrizione'].'<br>
'.(!empty($codici_articoli) ? '<small>'.implode(', ', $codici_articoli).'</small><br>' : '').'
@ -500,6 +502,14 @@ echo '
</form>
<script>
input("crea_articoli").on("change", function (){
if (input("crea_articoli").get()) {
$(".articolo-warning").removeClass("hidden");
} else {
$(".articolo-warning").addClass("hidden");
}
});
$("select[name^=selezione_riferimento").change(function() {
let $this = $(this);
let data = $this.selectData();
@ -666,5 +676,4 @@ function rimuoviRiferimentoVendita(button) {
$("[id^=\'articoli\']").change(function() {
updateSelectOption("id_articolo", $(this).val());
});
</script>';

View File

@ -347,6 +347,7 @@ class FatturaElettronica
$fattura->note = $note;
}
// Sconto finale da ScontoMaggiorazione: non importato
$fattura->save();
// Fix generazione idsede

View File

@ -71,6 +71,8 @@ class AJAX
}
}
$results = isset($results) ? $results : [];
$total = array_key_exists('recordsFiltered', $results) ? $results['recordsFiltered'] : count($results);
$list = array_key_exists('results', $results) ? $results['results'] : $results;

View File

@ -188,7 +188,7 @@ echo "
</td>
<td class='cell-padded text-center'>
".moneyFormat($totale, 2).'
".moneyFormat($netto_a_pagare, 2).'
</td>
</tr>';

View File

@ -258,3 +258,8 @@ HAVING 2=2
ORDER BY `mg_articoli`.`descrizione`' WHERE `zz_modules`.`name`='Articoli';
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Articoli'), 'Q.tà ordinata', 'ordini_fornitore.qta_ordinata', '10', '1', '0', '1', '', '', '1', '0', '1');
-- Aggiunta sconto finale in Fatture
-- Nota: lo sconto finale è limitato alla Fattura, e non può derivare da ulteriori documenti
ALTER TABLE `co_documenti` ADD `sconto_finale` DECIMAL(17,8) NOT NULL,
ADD `sconto_finale_percentuale` DECIMAL(17,8) NOT NULL;