diff --git a/CHANGELOG.md b/CHANGELOG.md
index 549254dc4..f9fb885f6 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,6 +32,11 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
- [2.2 (2016-11-10)](#22-2016-11-10)
- [2.1 (2015-04-02)](#21-2015-04-02)
+## 2.4.23
+
+### Aggiunto (Added)
+ - Nuovo *Sconto finale* per gli **Ordini**, **Preventivi**, **DDT** e **Contratti**, influenza il valore *Netto a pagare* del documento.
+
## 2.4.22
### Aggiunto (Added)
diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php
index d49e5480f..b866df4d4 100644
--- a/modules/contratti/actions.php
+++ b/modules/contratti/actions.php
@@ -83,6 +83,8 @@ switch (post('op')) {
$contratto->codice_cig = post('codice_cig');
$contratto->codice_cup = post('codice_cup');
+ $contratto->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
+
$contratto->save();
$dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($id_record));
@@ -479,6 +481,15 @@ $riga = $contratto->getRiga($type, $id_riga);
$id_record = $contratto->id;
}
+ if (!empty($documento->sconto_finale)) {
+ $contratto->sconto_finale = $documento->sconto_finale;
+ } elseif(!empty($documento->sconto_finale_percentuale)){
+ $contratto->sconto_finale_percentuale = $documento->sconto_finale_percentuale;
+ }
+
+ $contratto->save();
+
+
$righe = $documento->getRighe();
foreach ($righe as $riga) {
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php
index 7e8512df2..d83e3c272 100755
--- a/modules/contratti/edit.php
+++ b/modules/contratti/edit.php
@@ -113,10 +113,14 @@ if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazion
{[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|", "help": "" ]}
-
+
{[ "type": "select", "multiple": "1", "label": "", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, IF(nome = '', matricola, CONCAT(matricola, ' - ', nome)) AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$idimpianti$", "icon-after": "add||||" ]}
+
+ {[ "type": "number", "label": "", "name": "sconto_finale", "value": "sconto_finale_percentuale ?: $contratto->sconto_finale; ?>", "icon-after": "choice|untprc|sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "." ]}
+
+
diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php
index 969f2090f..5f553543b 100755
--- a/modules/contratti/row-list.php
+++ b/modules/contratti/row-list.php
@@ -150,6 +150,8 @@ $sconto = $contratto->sconto;
$totale_imponibile = abs($contratto->totale_imponibile);
$iva = abs($contratto->iva);
$totale = abs($contratto->totale);
+$sconto_finale = $contratto->getScontoFinale();
+$netto_a_pagare = $contratto->netto;
// Totale totale imponibile
echo '
@@ -213,6 +215,34 @@ echo '
|
';
+// 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 '
+
+
+ '.tr('Netto a pagare', [], ['upper' => true]).':
+ |
+
+ '.moneyFormat($netto_a_pagare, 2).'
+ |
+ |
+
';
+}
+
echo '
';
diff --git a/modules/contratti/src/Components/RelationTrait.php b/modules/contratti/src/Components/RelationTrait.php
index 444ebb288..e656a5cd6 100755
--- a/modules/contratti/src/Components/RelationTrait.php
+++ b/modules/contratti/src/Components/RelationTrait.php
@@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
+
+ public function getNettoAttribute()
+ {
+ $result = $this->totale;
+
+ return $result;
+ }
}
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php
index 2857dcf4e..a375ac069 100755
--- a/modules/ddt/actions.php
+++ b/modules/ddt/actions.php
@@ -59,98 +59,102 @@ switch (post('op')) {
break;
case 'update':
- $idstatoddt = post('idstatoddt');
- $idpagamento = post('idpagamento');
- $numero_esterno = post('numero_esterno');
- $id_anagrafica = post('idanagrafica');
+ if (isset($id_record)) {
+ $idstatoddt = post('idstatoddt');
+ $idpagamento = post('idpagamento');
+ $numero_esterno = post('numero_esterno');
+ $id_anagrafica = post('idanagrafica');
- if ($dir == 'uscita') {
- $idrivalsainps = post('id_rivalsa_inps');
- $idritenutaacconto = post('id_ritenuta_acconto');
- $bollo = post('bollo');
- } else {
- $idrivalsainps = 0;
- $idritenutaacconto = 0;
- $bollo = 0;
+ if ($dir == 'uscita') {
+ $idrivalsainps = post('id_rivalsa_inps');
+ $idritenutaacconto = post('id_ritenuta_acconto');
+ $bollo = post('bollo');
+ } else {
+ $idrivalsainps = 0;
+ $idritenutaacconto = 0;
+ $bollo = 0;
+ }
+
+ $tipo_sconto = post('tipo_sconto_generico');
+ $sconto = post('sconto_generico');
+
+ // Leggo la descrizione del pagamento
+ $query = 'SELECT descrizione FROM co_pagamenti WHERE id='.prepare($idpagamento);
+ $rs = $dbo->fetchArray($query);
+ $pagamento = $rs[0]['descrizione'];
+
+ $ddt->data = post('data');
+ $ddt->numero_esterno = $numero_esterno;
+ $ddt->note = post('note');
+ $ddt->note_aggiuntive = post('note_aggiuntive');
+
+ $ddt->idstatoddt = $idstatoddt;
+ $ddt->idpagamento = $idpagamento;
+ $ddt->idconto = post('idconto');
+ $ddt->idanagrafica = $id_anagrafica;
+ $ddt->idreferente = post('idreferente');
+ $ddt->idspedizione = post('idspedizione');
+ $ddt->idcausalet = post('idcausalet');
+ $ddt->idsede_partenza = post('idsede_partenza');
+ $ddt->idsede_destinazione = post('idsede_destinazione');
+ $ddt->idvettore = post('idvettore');
+ $ddt->data_ora_trasporto = post('data_ora_trasporto') ?: null;
+ $ddt->idporto = post('idporto');
+ $ddt->idaspettobeni = post('idaspettobeni');
+ $ddt->idrivalsainps = $idrivalsainps;
+ $ddt->idritenutaacconto = $idritenutaacconto;
+
+ $ddt->n_colli = post('n_colli');
+ $ddt->peso = post('peso');
+ $ddt->volume = post('volume');
+ $ddt->peso_manuale = post('peso_manuale');
+ $ddt->volume_manuale = post('volume_manuale');
+ $ddt->bollo = 0;
+ $ddt->rivalsainps = 0;
+ $ddt->ritenutaacconto = 0;
+
+ $ddt->id_documento_fe = post('id_documento_fe');
+ $ddt->codice_cup = post('codice_cup');
+ $ddt->codice_cig = post('codice_cig');
+ $ddt->num_item = post('num_item');
+
+ $ddt->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
+
+ $ddt->save();
+
+ $query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
+ $rs = $dbo->fetchArray($query);
+
+ // Ricalcolo inps, ritenuta e bollo (se l'ddt non è stato evaso)
+ if ($dir == 'entrata') {
+ if ($rs[0]['descrizione'] != 'Pagato') {
+ ricalcola_costiagg_ddt($id_record);
+ }
+ } else {
+ if ($rs[0]['descrizione'] != 'Pagato') {
+ ricalcola_costiagg_ddt($id_record, $idrivalsainps, $idritenutaacconto, $bollo);
+ }
+ }
+
+ aggiorna_sedi_movimenti('ddt', $id_record);
+
+ // Controllo sulla presenza di DDT con lo stesso numero secondario
+ $direzione = $ddt->direzione;
+ if ($direzione == 'uscita' and !empty($numero_esterno)) {
+ $count = DDT::where('numero_esterno', $numero_esterno)
+ ->where('id', '!=', $id_record)
+ ->where('idanagrafica', '=', $id_anagrafica)
+ ->whereHas('tipo', function ($query) use ($direzione) {
+ $query->where('dir', '=', $direzione);
+ })->count();
+ if (!empty($count)) {
+ flash()->warning(tr('Esiste già un DDT con lo stesso numero secondario e la stessa anagrafica collegata!'));
+ }
+ }
+
+ flash()->info(tr('Ddt modificato correttamente!'));
}
- $tipo_sconto = post('tipo_sconto_generico');
- $sconto = post('sconto_generico');
-
- // Leggo la descrizione del pagamento
- $query = 'SELECT descrizione FROM co_pagamenti WHERE id='.prepare($idpagamento);
- $rs = $dbo->fetchArray($query);
- $pagamento = $rs[0]['descrizione'];
-
- // Query di aggiornamento
- $dbo->update('dt_ddt', [
- 'data' => post('data'),
- 'numero_esterno' => $numero_esterno,
- 'note' => post('note'),
- 'note_aggiuntive' => post('note_aggiuntive'),
-
- 'idstatoddt' => $idstatoddt,
- 'idpagamento' => $idpagamento,
- 'idconto' => post('idconto'),
- 'idanagrafica' => $id_anagrafica,
- 'idreferente' => post('idreferente'),
- 'idspedizione' => post('idspedizione'),
- 'idcausalet' => post('idcausalet'),
- 'idsede_partenza' => post('idsede_partenza'),
- 'idsede_destinazione' => post('idsede_destinazione'),
- 'idvettore' => post('idvettore'),
- 'data_ora_trasporto' => post('data_ora_trasporto') ?: null,
- 'idporto' => post('idporto'),
- 'idaspettobeni' => post('idaspettobeni'),
- 'idrivalsainps' => $idrivalsainps,
- 'idritenutaacconto' => $idritenutaacconto,
-
- 'n_colli' => post('n_colli'),
- 'peso' => post('peso'),
- 'volume' => post('volume'),
- 'peso_manuale' => post('peso_manuale'),
- 'volume_manuale' => post('volume_manuale'),
- 'bollo' => 0,
- 'rivalsainps' => 0,
- 'ritenutaacconto' => 0,
-
- 'id_documento_fe' => post('id_documento_fe'),
- 'codice_cup' => post('codice_cup'),
- 'codice_cig' => post('codice_cig'),
- 'num_item' => post('num_item'),
- ], ['id' => $id_record]);
-
- $query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
- $rs = $dbo->fetchArray($query);
-
- // Ricalcolo inps, ritenuta e bollo (se l'ddt non è stato evaso)
- if ($dir == 'entrata') {
- if ($rs[0]['descrizione'] != 'Pagato') {
- ricalcola_costiagg_ddt($id_record);
- }
- } else {
- if ($rs[0]['descrizione'] != 'Pagato') {
- ricalcola_costiagg_ddt($id_record, $idrivalsainps, $idritenutaacconto, $bollo);
- }
- }
-
- aggiorna_sedi_movimenti('ddt', $id_record);
-
- // Controllo sulla presenza di DDT con lo stesso numero secondario
- $direzione = $ddt->direzione;
- if ($direzione == 'uscita' and !empty($numero_esterno)) {
- $count = DDT::where('numero_esterno', $numero_esterno)
- ->where('id', '!=', $id_record)
- ->where('idanagrafica', '=', $id_anagrafica)
- ->whereHas('tipo', function ($query) use ($direzione) {
- $query->where('dir', '=', $direzione);
- })->count();
- if (!empty($count)) {
- flash()->warning(tr('Esiste già un DDT con lo stesso numero secondario e la stessa anagrafica collegata!'));
- }
- }
-
- flash()->info(tr('Ddt modificato correttamente!'));
break;
case 'manage_barcode':
@@ -328,6 +332,14 @@ switch (post('op')) {
$id_record = $ddt->id;
}
+ if (!empty($documento->sconto_finale)) {
+ $ddt->sconto_finale = $documento->sconto_finale;
+ } elseif(!empty($documento->sconto_finale_percentuale)){
+ $ddt->sconto_finale_percentuale = $documento->sconto_finale_percentuale;
+ }
+
+ $ddt->save();
+
$righe = $documento->getRighe();
foreach ($righe as $riga) {
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index 694b8ecdd..ac4a26eb1 100755
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -263,6 +263,11 @@ if ($dir == 'entrata') {
}
?>
+
+
+ {[ "type": "number", "label": "", "name": "sconto_finale", "value": "sconto_finale_percentuale ?: $ddt->sconto_finale; ?>", "icon-after": "choice|untprc|sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "." ]}
+
+
diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php
index b17cc14a3..c82249e7c 100755
--- a/modules/ddt/row-list.php
+++ b/modules/ddt/row-list.php
@@ -198,6 +198,8 @@ $sconto = $ddt->sconto;
$totale_imponibile = abs($ddt->totale_imponibile);
$iva = abs($ddt->iva);
$totale = abs($ddt->totale);
+$sconto_finale = $ddt->getScontoFinale();
+$netto_a_pagare = $ddt->netto;
// IMPONIBILE
echo '
@@ -271,6 +273,34 @@ echo '
|
';
+// 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 '
+
+
+ '.tr('Netto a pagare', [], ['upper' => true]).':
+ |
+
+ '.moneyFormat($netto_a_pagare, 2).'
+ |
+ |
+
';
+}
+
echo '
';
diff --git a/modules/ddt/src/Components/RelationTrait.php b/modules/ddt/src/Components/RelationTrait.php
index c1a9ed6af..466f49ca4 100755
--- a/modules/ddt/src/Components/RelationTrait.php
+++ b/modules/ddt/src/Components/RelationTrait.php
@@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
+
+ public function getNettoAttribute()
+ {
+ $result = $this->totale;
+
+ return $result;
+ }
}
diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php
index 70184fa0f..ea76f5584 100755
--- a/modules/ddt/src/DDT.php
+++ b/modules/ddt/src/DDT.php
@@ -39,6 +39,9 @@ class DDT extends Document
'bollo' => 'float',
'peso' => 'float',
'volume' => 'float',
+
+ 'sconto_finale' => 'float',
+ 'sconto_finale_percentuale' => 'float',
];
protected $with = [
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index 40702f382..fbd7ccfd8 100755
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -704,6 +704,14 @@ switch (post('op')) {
$id_record = $fattura->id;
}
+ if (!empty($documento->sconto_finale)) {
+ $fattura->sconto_finale = $documento->sconto_finale;
+ } elseif(!empty($documento->sconto_finale_percentuale)){
+ $fattura->sconto_finale_percentuale = $documento->sconto_finale_percentuale;
+ }
+
+ $fattura->save();
+
$calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
$id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
$ritenuta_contributi = boolval(post('ritenuta_contributi'));
diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php
index 90c26030b..c507c2c56 100755
--- a/modules/fatture/src/Fattura.php
+++ b/modules/fatture/src/Fattura.php
@@ -283,55 +283,6 @@ 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()
- {
- $netto = $this->calcola('netto');
- $sconto_finale = $this->getScontoFinale();
-
- return $netto - $sconto_finale;
- }
-
/**
* Calcola la rivalsa INPS totale della fattura.
*
diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php
index 96d3188b3..6c5563cd8 100755
--- a/modules/ordini/actions.php
+++ b/modules/ordini/actions.php
@@ -54,79 +54,82 @@ switch (post('op')) {
break;
case 'update':
- $idstatoordine = post('idstatoordine');
- $idpagamento = post('idpagamento');
- $idsede = post('idsede');
+ if (isset($id_record)) {
+ $idstatoordine = post('idstatoordine');
+ $idpagamento = post('idpagamento');
+ $idsede = post('idsede');
- $totale_imponibile = get_imponibile_ordine($id_record);
- $totale_ordine = get_totale_ordine($id_record);
+ $totale_imponibile = get_imponibile_ordine($id_record);
+ $totale_ordine = get_totale_ordine($id_record);
- $tipo_sconto = post('tipo_sconto_generico');
- $sconto = post('sconto_generico');
+ $tipo_sconto = post('tipo_sconto_generico');
+ $sconto = post('sconto_generico');
- if ($dir == 'uscita') {
- $idrivalsainps = post('id_rivalsa_inps');
- $idritenutaacconto = post('id_ritenuta_acconto');
- $bollo = post('bollo');
- } else {
- $idrivalsainps = 0;
- $idritenutaacconto = 0;
- $bollo = 0;
- }
-
- // Leggo la descrizione del pagamento
- $query = 'SELECT descrizione FROM co_pagamenti WHERE id='.prepare($idpagamento);
- $rs = $dbo->fetchArray($query);
- $pagamento = $rs[0]['descrizione'];
-
- // Query di aggiornamento
- $dbo->update('or_ordini', [
- 'idanagrafica' => post('idanagrafica'),
- 'idreferente' => post('idreferente'),
- 'data' => post('data'),
- 'numero' => post('numero'),
- 'numero_esterno' => post('numero_esterno'),
- 'note' => post('note'),
- 'note_aggiuntive' => post('note_aggiuntive'),
-
- 'idagente' => post('idagente'),
- 'idstatoordine' => $idstatoordine,
- 'idpagamento' => $idpagamento,
- 'idsede' => $idsede,
- 'idconto' => post('idconto'),
- 'idrivalsainps' => $idrivalsainps,
- 'idritenutaacconto' => $idritenutaacconto,
-
- 'bollo' => 0,
- 'rivalsainps' => 0,
- 'ritenutaacconto' => 0,
-
- 'numero_cliente' => post('numero_cliente'),
- 'data_cliente' => post('data_cliente'),
-
- 'id_documento_fe' => post('numero_cliente'),
- 'codice_commessa' => post('codice_commessa'),
- 'codice_cup' => post('codice_cup'),
- 'codice_cig' => post('codice_cig'),
- 'num_item' => post('num_item'),
- ], ['id' => $id_record]);
-
- if ($dbo->query($query)) {
- $query = 'SELECT descrizione FROM or_statiordine WHERE id='.prepare($idstatoordine);
- $rs = $dbo->fetchArray($query);
-
- // Ricalcolo inps, ritenuta e bollo (se l'ordine non è stato evaso)
- if ($dir == 'entrata') {
- if ($rs[0]['descrizione'] != 'Evaso') {
- ricalcola_costiagg_ordine($id_record);
- }
+ if ($dir == 'uscita') {
+ $idrivalsainps = post('id_rivalsa_inps');
+ $idritenutaacconto = post('id_ritenuta_acconto');
+ $bollo = post('bollo');
} else {
- if ($rs[0]['descrizione'] != 'Evaso') {
- ricalcola_costiagg_ordine($id_record, $idrivalsainps, $idritenutaacconto, $bollo);
- }
+ $idrivalsainps = 0;
+ $idritenutaacconto = 0;
+ $bollo = 0;
}
- flash()->info(tr('Ordine modificato correttamente!'));
+ // Leggo la descrizione del pagamento
+ $query = 'SELECT descrizione FROM co_pagamenti WHERE id='.prepare($idpagamento);
+ $rs = $dbo->fetchArray($query);
+ $pagamento = $rs[0]['descrizione'];
+
+ $ordine->idanagrafica = post('idanagrafica');
+ $ordine->idreferente = post('idreferente');
+ $ordine->data = post('data');
+ $ordine->numero = post('numero');
+ $ordine->numero_esterno = post('numero_esterno');
+ $ordine->note = post('note');
+ $ordine->note_aggiuntive = post('note_aggiuntive');
+
+ $ordine->idagente = post('idagente');
+ $ordine->idstatoordine = $idstatoordine;
+ $ordine->idpagamento = $idpagamento;
+ $ordine->idsede = $idsede;
+ $ordine->idconto = post('idconto');
+ $ordine->idrivalsainps = $idrivalsainps;
+ $ordine->idritenutaacconto = $idritenutaacconto;
+
+ $ordine->bollo = 0;
+ $ordine->rivalsainps = 0;
+ $ordine->ritenutaacconto = 0;
+
+ $ordine->numero_cliente = post('numero_cliente');
+ $ordine->data_cliente = post('data_cliente');
+
+ $ordine->id_documento_fe = post('numero_cliente');
+ $ordine->codice_commessa = post('codice_commessa');
+ $ordine->codice_cup = post('codice_cup');
+ $ordine->codice_cig = post('codice_cig');
+ $ordine->num_item = post('num_item');
+
+ $ordine->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
+
+ $ordine->save();
+
+ if ($dbo->query($query)) {
+ $query = 'SELECT descrizione FROM or_statiordine WHERE id='.prepare($idstatoordine);
+ $rs = $dbo->fetchArray($query);
+
+ // Ricalcolo inps, ritenuta e bollo (se l'ordine non è stato evaso)
+ if ($dir == 'entrata') {
+ if ($rs[0]['descrizione'] != 'Evaso') {
+ ricalcola_costiagg_ordine($id_record);
+ }
+ } else {
+ if ($rs[0]['descrizione'] != 'Evaso') {
+ ricalcola_costiagg_ordine($id_record, $idrivalsainps, $idritenutaacconto, $bollo);
+ }
+ }
+
+ flash()->info(tr('Ordine modificato correttamente!'));
+ }
}
break;
@@ -377,6 +380,14 @@ switch (post('op')) {
$id_record = $ordine->id;
}
+ if (!empty($documento->sconto_finale)) {
+ $ordine->sconto_finale = $documento->sconto_finale;
+ } elseif(!empty($documento->sconto_finale_percentuale)){
+ $ordine->sconto_finale_percentuale = $documento->sconto_finale_percentuale;
+ }
+
+ $ordine->save();
+
$righe = $documento->getRighe();
foreach ($righe as $riga) {
if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) {
diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php
index 1b4ec3c64..44c0d11f2 100755
--- a/modules/ordini/edit.php
+++ b/modules/ordini/edit.php
@@ -110,24 +110,30 @@ if ($module['name'] == 'Ordini cliente') {
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "idpagamento", "required": 0, "ajax-source": "pagamenti", "value": "$idpagamento$" ]}
-
';
-
+ ';
+
+ ?>
+
+
-
+
{[ "type": "text", "label": "", "name": "numero_cliente", "required":0, "value": "", "help": "Obbligatorio per valorizzare CIG/CUP. È possible inserire:
- N. determina
- RDO
- Ordine MEPA
'); ?>" ]}
-
+
{[ "type": "date", "label": "", "name": "data_cliente", "value": "" ]}
-
-
+
+ {[ "type": "number", "label": "", "name": "sconto_finale", "value": "sconto_finale_percentuale ?: $ordine->sconto_finale; ?>", "icon-after": "choice|untprc|sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "." ]}
+
+
+
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]}
diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php
index 36bfc9062..2f0fd4aef 100755
--- a/modules/ordini/row-list.php
+++ b/modules/ordini/row-list.php
@@ -231,6 +231,8 @@ $sconto = $ordine->sconto;
$totale_imponibile = abs($ordine->totale_imponibile);
$iva = abs($ordine->iva);
$totale = abs($ordine->totale);
+$sconto_finale = $ordine->getScontoFinale();
+$netto_a_pagare = $ordine->netto;
// IMPONIBILE
echo '
@@ -294,6 +296,34 @@ echo '
|
';
+// 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 '
+
+
+ '.tr('Netto a pagare', [], ['upper' => true]).':
+ |
+
+ '.moneyFormat($netto_a_pagare, 2).'
+ |
+ |
+
';
+}
+
echo '
';
diff --git a/modules/ordini/src/Components/RelationTrait.php b/modules/ordini/src/Components/RelationTrait.php
index 2b3de43ea..a4a1adaef 100755
--- a/modules/ordini/src/Components/RelationTrait.php
+++ b/modules/ordini/src/Components/RelationTrait.php
@@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
+
+ public function getNettoAttribute()
+ {
+ $result = $this->totale;
+
+ return $result;
+ }
}
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php
index 6fd5b9e12..925aa1041 100755
--- a/modules/preventivi/actions.php
+++ b/modules/preventivi/actions.php
@@ -82,6 +82,7 @@ switch (post('op')) {
$preventivo->codice_cup = post('codice_cup');
$preventivo->idtipointervento = post('idtipointervento');
$preventivo->idiva = post('idiva');
+ $preventivo->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
$preventivo->save();
diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php
index f090917fb..3a19cc41d 100755
--- a/modules/preventivi/edit.php
+++ b/modules/preventivi/edit.php
@@ -138,6 +138,10 @@ echo '
{[ "type": "text", "label": "", "name": "tempi_consegna", "value": "$tempi_consegna$" ]}
+
+ {[ "type": "number", "label": "", "name": "sconto_finale", "value": "sconto_finale_percentuale ?: $preventivo->sconto_finale; ?>", "icon-after": "choice|untprc|sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "." ]}
+
+
diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php
index 333d03436..d41c2f88a 100755
--- a/modules/preventivi/row-list.php
+++ b/modules/preventivi/row-list.php
@@ -148,6 +148,8 @@ $sconto = $preventivo->sconto;
$totale_imponibile = abs($preventivo->totale_imponibile);
$iva = abs($preventivo->iva);
$totale = abs($preventivo->totale);
+$sconto_finale = $preventivo->getScontoFinale();
+$netto_a_pagare = $preventivo->netto;
// Totale imponibile scontato
echo '
@@ -210,6 +212,34 @@ echo '
|
';
+
+// 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 '
+
+
+ '.tr('Netto a pagare', [], ['upper' => true]).':
+ |
+
+ '.moneyFormat($netto_a_pagare, 2).'
+ |
+ |
+
';
+}
// Margine
$margine = $preventivo->margine;
diff --git a/modules/preventivi/src/Components/RelationTrait.php b/modules/preventivi/src/Components/RelationTrait.php
index 771824692..d9cb3ff00 100755
--- a/modules/preventivi/src/Components/RelationTrait.php
+++ b/modules/preventivi/src/Components/RelationTrait.php
@@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
+
+ public function getNettoAttribute()
+ {
+ $result = $this->totale;
+
+ return $result;
+ }
}
diff --git a/src/Common/Document.php b/src/Common/Document.php
index 6eddddbfe..d0e7602b1 100755
--- a/src/Common/Document.php
+++ b/src/Common/Document.php
@@ -24,6 +24,11 @@ use Illuminate\Database\Eloquent\Model as Model;
abstract class Document extends Model implements ReferenceInterface, DocumentInterface
{
+ protected $casts = [
+ 'sconto_finale' => 'float',
+ 'sconto_finale_percentuale' => 'float',
+ ];
+
/**
* Abilita la movimentazione automatica degli Articoli, finalizzata alla gestione interna del magazzino.
*
@@ -267,4 +272,50 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt
return round($value, $decimals);
}
+
+ /**
+ * Imposta lo sconto finale.
+ *
+ * @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.
+ */
+ 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 del documento.
+ *
+ * @return float
+ */
+ public function getNettoAttribute()
+ {
+ $netto = $this->calcola('netto');
+ $sconto_finale = $this->getScontoFinale();
+
+ return $netto - $sconto_finale;
+ }
}
diff --git a/update/2_4_23.sql b/update/2_4_23.sql
index 7b24d6b70..2e2c2b51c 100644
--- a/update/2_4_23.sql
+++ b/update/2_4_23.sql
@@ -103,4 +103,16 @@ ALTER TABLE `mg_articoli` CHANGE `descrizione` `descrizione` TEXT CHARACTER SET
UPDATE `co_contratti` SET `data_bozza`=NULL WHERE `data_bozza`=0000-00-00;
UPDATE `co_contratti` SET `data_accettazione`=NULL WHERE `data_accettazione`=0000-00-00;
UPDATE `co_contratti` SET `data_rifiuto`=NULL WHERE `data_rifiuto`=0000-00-00;
-UPDATE `co_contratti` SET `data_conclusione`=NULL WHERE `data_conclusione`=0000-00-00;
\ No newline at end of file
+UPDATE `co_contratti` SET `data_conclusione`=NULL WHERE `data_conclusione`=0000-00-00;
+
+-- Aggiunto sconto finale in preventivi
+ALTER TABLE `co_preventivi` ADD `sconto_finale` DECIMAL(17,8) NOT NULL AFTER `garanzia`, ADD `sconto_finale_percentuale` DECIMAL(17,8) NOT NULL AFTER `sconto_finale`;
+
+-- Aggiunto sconto finale in ordini
+ALTER TABLE `or_ordini` ADD `sconto_finale` DECIMAL(17,8) NOT NULL AFTER `numero_cliente`, ADD `sconto_finale_percentuale` DECIMAL(17,8) NOT NULL AFTER `sconto_finale`;
+
+-- Aggiunto sconto finale in ddt
+ALTER TABLE `dt_ddt` ADD `sconto_finale` DECIMAL(17,8) NOT NULL AFTER `num_item`, ADD `sconto_finale_percentuale` DECIMAL(17,8) NOT NULL AFTER `sconto_finale`;
+
+-- Aggiunto sconto finale in contratti
+ALTER TABLE `co_contratti` ADD `sconto_finale` DECIMAL(17,8) NOT NULL AFTER `num_item`, ADD `sconto_finale_percentuale` DECIMAL(17,8) NOT NULL AFTER `sconto_finale`;
\ No newline at end of file