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