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