diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 54ca06eef..878b81052 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -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 diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index a7853e887..8143e7cec 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -390,6 +390,7 @@ elseif ($record['stato'] == 'Bozza') { } echo ' '; + if ($dir == 'entrata') { echo '
@@ -406,7 +407,12 @@ elseif ($record['stato'] == 'Bozza') {
{[ "type": "number", "label": "'.tr('Importo marca da bollo').'", "name": "bollo", "value": "$bollo$"]}
+ +
+ {[ "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').'." ]} +
'; + $bollo = new Bollo($fattura); } ?> diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 6f70dc049..f9630beea 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -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)) { '; } +// SCONTO FINALE +if (!empty($sconto_finale)) { + echo ' + + + '.tr('Sconto finale', [], ['upper' => true]).': + + + '.moneyFormat($sconto_finale, 2).' + + + '; +} + // NETTO A PAGARE if ($totale != $netto_a_pagare) { echo ' diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 254a0682a..a330b0285 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -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; } /** diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index a6ba972d0..b8a3c079f 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -945,16 +945,40 @@ class FatturaElettronica } // Sconto / Maggiorazione (2.1.1.8) + $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'])) { - $result['ScontoMaggiorazione']['Tipo'] = $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'])) { + $sconto['Percentuale'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_percentuale']; + } + + if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_importo'])) { + $sconto['Importo'] = $documento->dati_aggiuntivi_fe['sconto_maggiorazione_importo']; + } + + $sconti_maggiorazioni[] = $result; } - if (!empty($documento->dati_aggiuntivi_fe['sconto_maggiorazione_percentuale'])) { - $result['ScontoMaggiorazione']['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']; + if (!empty($sconti_maggiorazioni)) { + $result['ScontoMaggiorazione'] = $sconti_maggiorazioni; } // Importo Totale Documento (2.1.1.9) diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 139b9a1d0..ab7e09194 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -359,8 +359,10 @@ if (!empty($righe)) { echo ' + '.(empty($id_articolo) ? '' : '').' + '.$riga['Descrizione'].'
'.(!empty($codici_articoli) ? ''.implode(', ', $codici_articoli).'
' : '').' @@ -500,6 +502,14 @@ echo ' '; diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index 58a407ba6..4f53650fc 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -347,6 +347,7 @@ class FatturaElettronica $fattura->note = $note; } + // Sconto finale da ScontoMaggiorazione: non importato $fattura->save(); // Fix generazione idsede diff --git a/src/AJAX.php b/src/AJAX.php index a4bef617d..c92ebe43d 100755 --- a/src/AJAX.php +++ b/src/AJAX.php @@ -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; diff --git a/templates/fatture/footer.php b/templates/fatture/footer.php index e8273ee99..a521e3b62 100755 --- a/templates/fatture/footer.php +++ b/templates/fatture/footer.php @@ -188,7 +188,7 @@ echo " - ".moneyFormat($totale, 2).' + ".moneyFormat($netto_a_pagare, 2).' '; diff --git a/update/2_4_22.sql b/update/2_4_22.sql index 7680d8bbe..ccff28a14 100644 --- a/update/2_4_22.sql +++ b/update/2_4_22.sql @@ -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;