diff --git a/include/common/riga.php b/include/common/riga.php index 8afa978b6..9dbf5182e 100755 --- a/include/common/riga.php +++ b/include/common/riga.php @@ -81,12 +81,12 @@ if ($options['dir'] == 'entrata') { // Prezzo di vendita unitario echo '
- {[ "type": "number", "label": "'.$label.'", "name": "prezzo_unitario", "value": "'.$result['prezzo_unitario'].'", "required": 1, "icon-after": "'.currency().'", "help": "'.($options['dir'] == 'entrata' && setting('Utilizza prezzi di vendita con IVA incorporata') ? tr('Importo con IVA incorporata') : '').'" ]} + {[ "type": "number", "label": "'.$label.'", "name": "prezzo_unitario", "value": "'.$result['prezzo_unitario_corrente'].'", "required": 1, "icon-after": "'.currency().'", "help": "'.($options['dir'] == 'entrata' && setting('Utilizza prezzi di vendita con IVA incorporata') ? tr('Importo con IVA incorporata') : '').'" ]}
'; // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$result['sconto_unitario'].'", "icon-after": "choice|untprc|'.$result['tipo_sconto'].'", "help": "'.tr('Il valore positivo indica uno sconto. Per applicare un rincaro inserire un valore negativo.').'" ]} + {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.($result['sconto_percentuale'] ?: $result['sconto_unitario_corrente']).'", "icon-after": "choice|untprc|'.$result['tipo_sconto'].'", "help": "'.tr('Il valore positivo indica uno sconto. Per applicare una maggiorazione inserire un valore negativo.').'" ]}
'; diff --git a/include/src/Components/Row.php b/include/src/Components/Row.php index 433284c0b..6561a5fe1 100755 --- a/include/src/Components/Row.php +++ b/include/src/Components/Row.php @@ -10,9 +10,21 @@ abstract class Row extends Description { protected $casts = [ 'qta' => 'float', + 'prezzo_unitario' => 'float', + 'prezzo_unitario_ivato' => 'float', + 'iva_unitaria' => 'float', + 'sconto_percentuale' => 'float', + 'sconto_unitario' => 'float', + 'sconto_iva' => 'float', + 'sconto_unitario_ivato' => 'float', //'qta_evasa' => 'float', ]; + protected $appends = [ + 'prezzo_unitario_corrente', + 'sconto_unitario_corrente', + ]; + public static function build(Document $document, $bypass = false) { return parent::build($document, true); @@ -113,12 +125,17 @@ abstract class Row extends Description */ public function getScontoAttribute() { - return calcola_sconto([ - 'sconto' => $this->sconto_unitario, - 'prezzo' => $this->prezzo_unitario, - 'tipo' => $this->tipo_sconto, - 'qta' => $this->qta, - ]); + return $this->qta * $this->sconto_unitario; + } + + /** + * Restituisce il tipo di sconto della riga corrente. + * + * @return float + */ + public function getTipoScontoAttribute() + { + return $this->sconto_percentuale ? 'PRC' : 'UNT'; } /** @@ -142,7 +159,7 @@ abstract class Row extends Description $percentuale_iva = floatval($this->aliquota->percentuale) / 100; // Gestione IVA incorporata - if ($this->parent->direzione == 'entrata' && setting('Utilizza prezzi di vendita con IVA incorporata')) { + if ($this->incorporaIVA()) { $this->attributes['prezzo_unitario_ivato'] = $value; $this->attributes['iva_unitaria'] = $value * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA @@ -155,6 +172,42 @@ abstract class Row extends Description } } + /** + * Imposta il prezzo unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita con IVA incorporata') per la riga. + * + * @return float + */ + public function getPrezzoUnitarioCorrenteAttribute() + { + // Gestione IVA incorporata + if ($this->incorporaIVA()) { + return $this->prezzo_unitario_ivato; + } else { + return $this->prezzo_unitario; + } + } + + /** + * Imposta lo sconto unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita con IVA incorporata') per la riga. + * + * @return float + */ + public function getScontoUnitarioCorrenteAttribute() + { + // Gestione IVA incorporata + if ($this->incorporaIVA()) { + return $this->sconto_unitario_ivato; + } else { + return $this->sconto_unitario; + } + } + + /** + * Imposta lo sconto secondo le informazioni indicate per valore e tipologia (UNT o PRC). + * + * @param $value + * @param $type + */ public function setSconto($value, $type) { $percentuale_iva = floatval($this->aliquota->percentuale) / 100; @@ -163,7 +216,7 @@ abstract class Row extends Description $this->attributes['sconto_percentuale'] = $value; $sconto = calcola_sconto([ - 'sconto' => $this->sconto_unitario, + 'sconto' => $value, 'prezzo' => $this->prezzo_unitario, 'tipo' => 'PRC', 'qta' => 1, @@ -174,7 +227,7 @@ abstract class Row extends Description } // Gestione IVA incorporata - if ($this->parent->direzione == 'entrata' && setting('Utilizza prezzi di vendita con IVA incorporata')) { + if ($this->incorporaIVA()) { $this->attributes['sconto_unitario_ivato'] = $sconto; $this->attributes['sconto_iva'] = $sconto * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA @@ -262,6 +315,7 @@ abstract class Row extends Description protected function fixSconto() { $this->attributes['sconto'] = $this->sconto; + $this->attributes['tipo_sconto'] = $this->sconto_percentuale ? 'PRC' : 'UNT'; } /** @@ -275,4 +329,9 @@ abstract class Row extends Description parent::customAfterDataCopiaIn($original); } + + protected function incorporaIVA() + { + return $this->parent->direzione == 'entrata' && setting('Utilizza prezzi di vendita con IVA incorporata'); + } } diff --git a/lib/common.php b/lib/common.php index 60bda8825..450e653b7 100755 --- a/lib/common.php +++ b/lib/common.php @@ -268,7 +268,6 @@ function orderValue($table, $field, $id) /** * Visualizza le informazioni relative allo sconto presente su una riga. * - * @param \Common\Components\Row $riga * @param bool $mostra_maggiorazione * * @return string|null diff --git a/modules/contratti/row-add.php b/modules/contratti/row-add.php index 8a38e0764..8b8ced5c8 100755 --- a/modules/contratti/row-add.php +++ b/modules/contratti/row-add.php @@ -44,7 +44,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index ba7ea1321..fe0f24a34 100755 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -59,13 +59,10 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if (abs($riga->sconto_unitario) > 0) { - $text = $riga->sconto_unitario > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_'); + $text = discountInfo($riga); echo ' -
'.replace($text, [ - '_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]).''; +
'.$text.''; } echo' diff --git a/modules/ddt/row-add.php b/modules/ddt/row-add.php index d85d01cf6..1b85f88ab 100755 --- a/modules/ddt/row-add.php +++ b/modules/ddt/row-add.php @@ -45,7 +45,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/fatture/row-add.php b/modules/fatture/row-add.php index a1535e4cf..11f1205d8 100755 --- a/modules/fatture/row-add.php +++ b/modules/fatture/row-add.php @@ -66,7 +66,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index ddeb686be..641f219ca 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -191,13 +191,10 @@ foreach ($righe as $riga) { } if (abs($riga->sconto_unitario) > 0) { - $text = $riga->sconto_unitario > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_'); + $text = discountInfo($riga); echo ' -
'.replace($text, [ - '_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]).''; +
'.$text.''; } } diff --git a/modules/interventi/row-add.php b/modules/interventi/row-add.php index b41b538ab..cafce6146 100755 --- a/modules/interventi/row-add.php +++ b/modules/interventi/row-add.php @@ -45,7 +45,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/listini/add.php b/modules/listini/add.php index 12dfa1318..2847f7f4a 100755 --- a/modules/listini/add.php +++ b/modules/listini/add.php @@ -16,7 +16,7 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "" ]} + {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "" ]}
diff --git a/modules/listini/edit.php b/modules/listini/edit.php index f8361e0d9..aee00b603 100755 --- a/modules/listini/edit.php +++ b/modules/listini/edit.php @@ -23,7 +23,7 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "$prc_guadagno$", "icon-after": "%", "help": "", "disabled": "" ]} + {[ "type": "number", "label": "", "name": "prc_guadagno", "required": 1, "value": "$prc_guadagno$", "icon-after": "%", "help": "", "disabled": "" ]}
diff --git a/modules/ordini/row-add.php b/modules/ordini/row-add.php index 6b3e04c81..cfe4c8bf1 100755 --- a/modules/ordini/row-add.php +++ b/modules/ordini/row-add.php @@ -45,7 +45,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/preventivi/row-add.php b/modules/preventivi/row-add.php index 326bef1f9..0d61ae466 100755 --- a/modules/preventivi/row-add.php +++ b/modules/preventivi/row-add.php @@ -44,7 +44,7 @@ if (get('is_descrizione') !== null) { $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); if (!empty($listino['prc_guadagno'])) { - $result['sconto_unitario'] = $listino['prc_guadagno']; + $result['sconto_percentuale'] = $listino['prc_guadagno']; $result['tipo_sconto'] = 'PRC'; } diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index 0aeebbab8..73f6d6cc7 100755 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -59,13 +59,10 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if (abs($riga->sconto_unitario) > 0) { - $text = $riga->sconto_unitario > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_'); + $text = discountInfo($riga); echo ' -
'.replace($text, [ - '_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]).''; +
'.$text.''; } echo' diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 9e19a57f0..c842987ba 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -1192,16 +1192,15 @@ class FatturaElettronica $dettaglio['PrezzoUnitario'] = $riga->prezzo_unitario ?: 0; // Sconto (2.2.1.10) - $sconto = $riga->sconto; - $sconto_unitario = $riga->sconto_unitario; + $sconto_unitario = (float) $riga->sconto_unitario; - if (!empty((float) $sconto_unitario)) { + if (!empty($sconto_unitario)) { $sconto = [ - 'Tipo' => $riga->sconto_unitario > 0 ? 'SC' : 'MG', + 'Tipo' => $sconto_unitario > 0 ? 'SC' : 'MG', ]; if ($riga['tipo_sconto'] == 'PRC') { - $sconto['Percentuale'] = $sconto_unitario; + $sconto['Percentuale'] = $riga->sconto_percentuale; } else { $sconto['Importo'] = $sconto_unitario; } diff --git a/templates/contratti/body.php b/templates/contratti/body.php index 6bc05b771..430634263 100755 --- a/templates/contratti/body.php +++ b/templates/contratti/body.php @@ -130,10 +130,7 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if ($riga->sconto > 0) { - $text = tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]); + $text = discountInfo($riga, false); echo '
'.$text.''; diff --git a/templates/ddt/body.php b/templates/ddt/body.php index 8a182c85e..710440841 100755 --- a/templates/ddt/body.php +++ b/templates/ddt/body.php @@ -92,10 +92,7 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if ($riga->sconto > 0) { - $text = tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]); + $text = discountInfo($riga, false); echo '
'.$text.''; diff --git a/templates/fatture/body.php b/templates/fatture/body.php index 226cc7e55..b5ce4fbe9 100755 --- a/templates/fatture/body.php +++ b/templates/fatture/body.php @@ -106,10 +106,7 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if ($riga->sconto > 0) { - $text = tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]); + $text = discountInfo($riga, false); echo '
'.$text.''; diff --git a/templates/ordini/body.php b/templates/ordini/body.php index fe0cb0e8f..47e831a30 100755 --- a/templates/ordini/body.php +++ b/templates/ordini/body.php @@ -113,10 +113,7 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if ($riga->sconto > 0) { - $text = tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]); + $text = discountInfo($riga, false); echo '
'.$text.''; diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index 828c3a98f..61d41a173 100755 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -116,10 +116,7 @@ foreach ($righe as $riga) { '.moneyFormat($riga->prezzo_unitario); if ($riga->sconto > 0) { - $text = tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), - '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), - ]); + $text = discountInfo($riga, false); echo '
'.$text.''; diff --git a/update/2_4_14.sql b/update/2_4_14.sql index f9e4e2165..0d238329b 100755 --- a/update/2_4_14.sql +++ b/update/2_4_14.sql @@ -121,4 +121,4 @@ UPDATE `or_righe_ordini` SET `qta` = IF(`qta` = 0, 1, `qta`), `sconto_unitario_ivato` = `sconto_unitario`; -- Aggiunta supporto a prezzi ivati -INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Utilizza prezzi di vendita con IVA incorporata', '1', 'boolean', '0', 'Fatturazione', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, 'Abilita la gestione degli importi ivati per i documenti di vendita.'); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Utilizza prezzi di vendita con IVA incorporata', '0', 'boolean', '1', 'Fatturazione', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, 'Abilita la gestione degli importi ivati per i documenti di vendita.');