Miglioramenti nuovi campi

This commit is contained in:
Thomas Zilio 2020-02-15 14:11:44 +01:00
parent ca0bfcfba6
commit 93e1e1af1f
21 changed files with 94 additions and 61 deletions

View File

@ -81,12 +81,12 @@ if ($options['dir'] == 'entrata') {
// Prezzo di vendita unitario
echo '
<div class="col-md-'.$width.'">
{[ "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') : '').'" ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-'.$width.'">
{[ "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.').'" ]}
</div>
</div>';

View File

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

View File

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

View File

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

View File

@ -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 '
<br><small class="label label-danger">'.replace($text, [
'_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)),
'_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()),
]).'</small>';
<br><small class="label label-danger">'.$text.'</small>';
}
echo'

View File

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

View File

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

View File

@ -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 '
<br><small class="label label-danger">'.replace($text, [
'_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)),
'_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()),
]).'</small>';
<br><small class="label label-danger">'.$text.'</small>';
}
}

View File

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

View File

@ -16,7 +16,7 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto: per applicare una percentuale di rincaro inserire un valore negativo'); ?>" ]}
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo'); ?>" ]}
</div>
</div>

View File

@ -23,7 +23,7 @@ include_once __DIR__.'/../../core.php';
</div>
<div class="col-md-4">
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "$prc_guadagno$", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto').'. '.tr('Per applicare una percentuale di rincaro inserire un valore negativo').'.'; ?>", "disabled": "<?php echo intval(!empty($record['prc_combinato'])); ?>" ]}
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "$prc_guadagno$", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'.'; ?>", "disabled": "<?php echo intval(!empty($record['prc_combinato'])); ?>" ]}
</div>
</div>

View File

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

View File

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

View File

@ -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 '
<br><small class="label label-danger">'.replace($text, [
'_TOT_' => Translator::numberToLocale(abs($riga->sconto_unitario)),
'_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()),
]).'</small>';
<br><small class="label label-danger">'.$text.'</small>';
}
echo'

View File

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

View File

@ -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 '
<br><small class="text-muted">'.$text.'</small>';

View File

@ -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 '
<br><small class="text-muted">'.$text.'</small>';

View File

@ -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 '
<br><small class="text-muted">'.$text.'</small>';

View File

@ -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 '
<br><small class="text-muted">'.$text.'</small>';

View File

@ -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 '
<br><small class="text-muted">'.$text.'</small>';

View File

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