1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-03-09 15:50:14 +01:00

Aggiunto sconto finale in tutti i documenti

This commit is contained in:
MatteoPistorello 2021-04-06 15:10:55 +02:00
parent 03c1d517d0
commit 6998ace12b
22 changed files with 445 additions and 213 deletions

View File

@ -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)

View File

@ -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])) {

View File

@ -113,10 +113,14 @@ if (strtotime($record['data_conclusione']) < strtotime($record['data_accettazion
{[ "type": "number", "label": "<?php echo tr('Validità contratto'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|<?php echo $record['tipo_validita']; ?>", "help": "<?php echo tr('Il campo Validità contratto viene utilizzato per il calcolo della Data di conclusione del contratto'); ?>" ]}
</div>
<div class="col-md-9">
<div class="col-md-6">
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "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|<?php echo Modules::get('Impianti')['id']; ?>|||<?php echo (empty($block_edit)) ? '' : 'disabled'; ?>" ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo ('Sconto finale'); ?>", "name": "sconto_finale", "value": "<?php echo $contratto->sconto_finale_percentuale ?: $contratto->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo (empty($contratto->sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
</div>
</div>
<div class="row">

View File

@ -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 '
<td></td>
</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 '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Netto a pagare', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($netto_a_pagare, 2).'
</td>
<td></td>
</tr>';
}
echo '
</table>
</div>';

View File

@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
public function getNettoAttribute()
{
$result = $this->totale;
return $result;
}
}

View File

@ -59,6 +59,7 @@ switch (post('op')) {
break;
case 'update':
if (isset($id_record)) {
$idstatoddt = post('idstatoddt');
$idpagamento = post('idpagamento');
$numero_esterno = post('numero_esterno');
@ -82,43 +83,44 @@ switch (post('op')) {
$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'),
$ddt->data = post('data');
$ddt->numero_esterno = $numero_esterno;
$ddt->note = post('note');
$ddt->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,
$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;
'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,
$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;
'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]);
$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);
@ -151,6 +153,8 @@ switch (post('op')) {
}
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])) {

View File

@ -263,6 +263,11 @@ if ($dir == 'entrata') {
}
?>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo ('Sconto finale'); ?>", "name": "sconto_finale", "value": "<?php echo $ddt->sconto_finale_percentuale ?: $ddt->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo (empty($ddt->sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
</div>
</div>
<div class="row">
<div class="col-md-12">

View File

@ -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 '
<td></td>
</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 '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Netto a pagare', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($netto_a_pagare, 2).'
</td>
<td></td>
</tr>';
}
echo '
</table>
</div>';

View File

@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
public function getNettoAttribute()
{
$result = $this->totale;
return $result;
}
}

View File

@ -39,6 +39,9 @@ class DDT extends Document
'bollo' => 'float',
'peso' => 'float',
'volume' => 'float',
'sconto_finale' => 'float',
'sconto_finale_percentuale' => 'float',
];
protected $with = [

View File

@ -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'));

View File

@ -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.
*

View File

@ -54,6 +54,7 @@ switch (post('op')) {
break;
case 'update':
if (isset($id_record)) {
$idstatoordine = post('idstatoordine');
$idpagamento = post('idpagamento');
$idsede = post('idsede');
@ -79,37 +80,38 @@ switch (post('op')) {
$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'),
$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');
'idagente' => post('idagente'),
'idstatoordine' => $idstatoordine,
'idpagamento' => $idpagamento,
'idsede' => $idsede,
'idconto' => post('idconto'),
'idrivalsainps' => $idrivalsainps,
'idritenutaacconto' => $idritenutaacconto,
$ordine->idagente = post('idagente');
$ordine->idstatoordine = $idstatoordine;
$ordine->idpagamento = $idpagamento;
$ordine->idsede = $idsede;
$ordine->idconto = post('idconto');
$ordine->idrivalsainps = $idrivalsainps;
$ordine->idritenutaacconto = $idritenutaacconto;
'bollo' => 0,
'rivalsainps' => 0,
'ritenutaacconto' => 0,
$ordine->bollo = 0;
$ordine->rivalsainps = 0;
$ordine->ritenutaacconto = 0;
'numero_cliente' => post('numero_cliente'),
'data_cliente' => post('data_cliente'),
$ordine->numero_cliente = post('numero_cliente');
$ordine->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]);
$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);
@ -128,6 +130,7 @@ switch (post('op')) {
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])) {

View File

@ -112,22 +112,28 @@ if ($module['name'] == 'Ordini cliente') {
</div>
</div>';
if ($dir == 'entrata') {
?>
<div class="row">
<?php
if ($dir == 'entrata') {
?>
<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Numero ordine cliente'); ?>", "name": "numero_cliente", "required":0, "value": "<?php echo $record['numero_cliente']; ?>", "help": "<?php echo tr('<span>Obbligatorio per valorizzare CIG/CUP. &Egrave; possible inserire: </span><ul><li>N. determina</li><li>RDO</li><li>Ordine MEPA</li></ul>'); ?>" ]}
</div>
<div class="col-md-6">
<div class="col-md-3">
{[ "type": "date", "label": "<?php echo tr('Data ordine cliente'); ?>", "name": "data_cliente", "value": "<?php echo $record['data_cliente']; ?>" ]}
</div>
</div>
<?php
}
?>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo ('Sconto finale'); ?>", "name": "sconto_finale", "value": "<?php echo $ordine->sconto_finale_percentuale ?: $ordine->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo (empty($ordine->sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$" ]}

View File

@ -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 '
<td></td>
</tr>';
// SCONTO FINALE
if (!empty($sconto_finale)) {
echo '
<tr>
<td colspan="6" 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 '
<tr>
<td colspan="6" class="text-right">
<b>'.tr('Netto a pagare', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($netto_a_pagare, 2).'
</td>
<td></td>
</tr>';
}
echo '
</table>
</div>';

View File

@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
public function getNettoAttribute()
{
$result = $this->totale;
return $result;
}
}

View File

@ -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();

View File

@ -138,6 +138,10 @@ echo '
{[ "type": "text", "label": "<?php echo tr('Tempi di consegna'); ?>", "name": "tempi_consegna", "value": "$tempi_consegna$" ]}
</div>
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo ('Sconto finale'); ?>", "name": "sconto_finale", "value": "<?php echo $preventivo->sconto_finale_percentuale ?: $preventivo->sconto_finale; ?>", "icon-after": "choice|untprc|<?php echo (empty($preventivo->sconto_finale) ? 'PRC' : 'UNT'); ?>", "help": "<?php echo tr('Sconto finale, utilizzabile per applicare sconti sul Netto a pagare del documento'); ?>." ]}
</div>
</div>
<div class="row">

View File

@ -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 '
@ -211,6 +213,34 @@ echo '
<td></td>
</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 '
<tr>
<td colspan="5" class="text-right">
<b>'.tr('Netto a pagare', [], ['upper' => true]).':</b>
</td>
<td class="text-right">
'.moneyFormat($netto_a_pagare, 2).'
</td>
<td></td>
</tr>';
}
// Margine
$margine = $preventivo->margine;
$margine_class = ($margine <= 0 and $preventivo->totale > 0) ? 'danger' : 'success';

View File

@ -37,4 +37,11 @@ trait RelationTrait
{
return $this->document();
}
public function getNettoAttribute()
{
$result = $this->totale;
return $result;
}
}

View File

@ -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;
}
}

View File

@ -104,3 +104,15 @@ 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;
-- 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`;