From e4d36a99fea8413fe09a1256c2884076a818ea68 Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Mon, 7 Mar 2022 09:35:58 +0100 Subject: [PATCH] Aggiunto coefficiente di vendita in articoli e azione di gruppo --- modules/articoli/actions.php | 12 +++- modules/articoli/add.php | 97 ++++++++++++++++++++++++------- modules/articoli/bulk.php | 74 ++++++++++++++++------- modules/articoli/edit.php | 82 +++++++++++++++++++------- modules/articoli/src/Articolo.php | 24 ++++++++ update/2_4_31.sql | 5 +- 6 files changed, 231 insertions(+), 63 deletions(-) diff --git a/modules/articoli/actions.php b/modules/articoli/actions.php index 03a8c82a9..b083dc68b 100755 --- a/modules/articoli/actions.php +++ b/modules/articoli/actions.php @@ -58,8 +58,12 @@ switch (post('op')) { $articolo->barcode = post('barcode'); $articolo->threshold_qta = post('threshold_qta'); + $articolo->coefficiente = post('coefficiente'); + $articolo->idiva_vendita = post('idiva_vendita'); $articolo->prezzo_acquisto = post('prezzo_acquisto'); - $articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita')); + if (empty(post('coefficiente'))) { + $articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita')); + } $articolo->idconto_vendita = post('idconto_vendita'); $articolo->idconto_acquisto = post('idconto_acquisto'); $articolo->save(); @@ -116,6 +120,8 @@ switch (post('op')) { $articolo->abilita_serial = post('abilita_serial'); $articolo->ubicazione = post('ubicazione'); $articolo->threshold_qta = post('threshold_qta'); + $articolo->coefficiente = post('coefficiente'); + $articolo->idiva_vendita = post('idiva_vendita'); $articolo->prezzo_acquisto = post('prezzo_acquisto'); $articolo->idconto_vendita = post('idconto_vendita'); $articolo->idconto_acquisto = post('idconto_acquisto'); @@ -129,7 +135,9 @@ switch (post('op')) { $articolo->fattore_um_secondaria = post('fattore_um_secondaria'); $articolo->qta_multipla = post('qta_multipla'); - $articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita')); + if (empty(post('coefficiente'))) { + $articolo->setPrezzoVendita(post('prezzo_vendita'), post('idiva_vendita')); + } $componente = post('componente_filename'); $articolo->componente_filename = $componente; diff --git a/modules/articoli/add.php b/modules/articoli/add.php index d3ff9805d..c93d28f8c 100755 --- a/modules/articoli/add.php +++ b/modules/articoli/add.php @@ -19,6 +19,12 @@ include_once __DIR__.'/../../core.php'; +use Modules\Iva\Aliquota; + +$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); +$iva_predefinita = setting('Iva predefinita'); +$aliquota_predefinita = floatval(Aliquota::find($iva_predefinita)->percentuale); + ?>
@@ -63,16 +69,10 @@ include_once __DIR__.'/../../core.php';
- {[ "type": "number", "label": "", "name": "qta", "decimals": "qta" ]} + {[ "type": "number", "label": "", "name": "coefficiente", "help": "." ]}
- {[ "type": "number", "label": "", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]} -
- - -
-
", "name": "prezzo_vendita", "icon-after": "", "help": "" ]}
+ +
-
+
+
+ {[ "type": "number", "label": "", "name": "qta", "decimals": "qta" ]} +
+ +
+ {[ "type": "number", "label": "", "name": "threshold_qta", "decimals": "qta", "min-value": "undefined" ]} +
+ +
{[ "type": "select", "label": "", "name": "idiva_vendita", "ajax-source": "iva", "valore_predefinito": "Iva predefinita", "help": "" ]} + +
@@ -109,6 +122,9 @@ include_once __DIR__.'/../../core.php'; diff --git a/modules/articoli/bulk.php b/modules/articoli/bulk.php index 0b9da83b9..caa4d17ba 100644 --- a/modules/articoli/bulk.php +++ b/modules/articoli/bulk.php @@ -55,36 +55,59 @@ switch (post('op')) { $tipologia = post('tipologia'); $arrotondamento = post('arrotondamento'); $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + $articoli_coeff = 0; foreach ($id_records as $id) { $articolo = Articolo::find($id); - $prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto; - $aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale); - $new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100); + if (empty((int)$articolo->coefficiente)) { + $prezzo_partenza = post('prezzo_partenza') == 'vendita' ? $articolo->prezzo_vendita : $articolo->prezzo_acquisto; + $aliquota_iva = floatval(Aliquota::find($articolo->idiva_vendita)->percentuale); - // Arrotondamento - if (!empty($tipologia) && !empty($arrotondamento)) { - if ($tipologia == 'ivato') { + $new_prezzo_vendita = $prezzo_partenza + ($prezzo_partenza * $percentuale / 100); + + // Arrotondamento + if (!empty($tipologia) && !empty($arrotondamento)) { + if ($tipologia == 'ivato') { + $new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100); + } + + $new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento; + } + + if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) { + $new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva); + } + + if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) { $new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100); } - $new_prezzo_vendita = ceil($new_prezzo_vendita / $arrotondamento) * $arrotondamento; + $articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita); + $articolo->save(); + } else { + $articoli_coeff++; } - - if (in_array($tipologia, ['ivato', '']) && !$prezzi_ivati) { - $new_prezzo_vendita = $new_prezzo_vendita * 100 / (100 + $aliquota_iva); - } - - if (in_array($tipologia, ['imponibile', '']) && $prezzi_ivati) { - $new_prezzo_vendita = $new_prezzo_vendita + ($new_prezzo_vendita * $aliquota_iva / 100); - } - - $articolo->setPrezzoVendita($new_prezzo_vendita, $articolo->idiva_vendita); - $articolo->save(); } flash()->info(tr('Prezzi di vendita aggiornati!')); + flash()->warning(tr('_NUM_ prezzi di vendita non aggiornati per coefficiente impostato!', [ + '_NUM_' => $articoli_coeff, + ])); + + break; + + case 'change-coefficiente': + foreach ($id_records as $id) { + $articolo = Articolo::find($id); + $coefficiente = post('coefficiente'); + + $articolo->coefficiente = $coefficiente; + $articolo->prezzo_acquisto = $articolo->prezzo_acquisto; + $articolo->save(); + } + + flash()->info(tr('Coefficienti di vendita aggiornati!')); break; @@ -356,7 +379,7 @@ $operations['change-acquisto'] = [ 'text' => ' '.tr('Aggiorna prezzo di acquisto').'', 'data' => [ 'title' => tr('Aggiornare il prezzo di acquisto per gli articoli selezionati?'), - 'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.

{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}', + 'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'

{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}', 'button' => tr('Procedi'), 'class' => 'btn btn-lg btn-warning', 'blank' => false, @@ -367,7 +390,7 @@ $operations['change-vendita'] = [ 'text' => ' '.tr('Aggiorna prezzo di vendita').'', 'data' => [ 'title' => tr('Aggiornare il prezzo di vendita per gli articoli selezionati?'), - 'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.

+ 'msg' => tr('Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.').'

{[ "type": "select", "label": "'.tr('Partendo da:').'", "name": "prezzo_partenza", "required": 1, "values": "list=\"acquisto\":\"Prezzo di acquisto\",\"vendita\":\"Prezzo di vendita\"" ]}
{[ "type": "number", "label": "'.tr('Percentuale sconto/magg.').'", "name": "percentuale", "required": 1, "icon-after": "%" ]}
{[ "type": "select", "label": "'.tr('Arrotonda prezzo:').'", "name": "tipologia", "values": "list=\"0\":\"Non arrotondare\",\"imponibile\":\"Imponibile\",\"ivato\":\"Ivato\"", "value": 0 ]}
@@ -378,6 +401,17 @@ $operations['change-vendita'] = [ ], ]; +$operations['change-coefficiente'] = [ + 'text' => ' '.tr('Aggiorna coefficiente di vendita').'', + 'data' => [ + 'title' => tr('Aggiornare il coefficiente di vendita per gli articoli selezionati?'), + 'msg' => tr('Per ciascun articolo selezionato, verrà modificato il coefficiente e il relativo prezzo di vendita').'

{[ "type": "number", "label": "'.tr('Coefficiente di vendita').'", "name": "coefficiente", "required": 1 ]}', + 'button' => tr('Procedi'), + 'class' => 'btn btn-lg btn-warning', + 'blank' => false, + ], +]; + $operations['stampa-etichette'] = [ 'text' => ' '.tr('Stampa etichette').'', 'data' => [ diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index a5d01ed94..87df104fe 100755 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -19,6 +19,8 @@ include_once __DIR__.'/../../core.php'; +use Modules\Iva\Aliquota; + ?>
@@ -162,11 +164,15 @@ include_once __DIR__.'/../../core.php';
-
+
{[ "type": "number", "label": "", "name": "prezzo_acquisto", "value": "$prezzo_acquisto$", "icon-after": "", "help": "." ]}
-
+
+ {[ "type": "number", "label": "", "name": "coefficiente", "value": "$coefficiente$", "help": "." ]} +
+ +
{[ "type": "number", "label": "", "name": "threshold_qta", "value": "$threshold_qta$", "decimals": "qta", "min-value": "undefined" ]}
@@ -215,21 +221,25 @@ include_once __DIR__.'/../../core.php';
percentuale); if (empty($prezzi_ivati)) { echo ' - '; } echo ' - {[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]} + {[ "type": "number", "label": "'.tr('Prezzo di vendita').'", "name": "prezzo_vendita", "value": "'.($prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'", "disabled": "'.(!empty((int)$articolo->coefficiente) ? 1 : 0).'" ]}
'; ?>
{[ "type": "select", "label": "", "name": "idiva_vendita", "ajax-source": "iva", "value": "$idiva_vendita$", "help": "" ]} + +
@@ -306,6 +316,48 @@ echo ' {( "name": "filelist_and_upload", "id_module": "$id_module$", "id_record": "$id_record$" )} diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 0866cf5fd..816ac3bd3 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -142,6 +142,30 @@ class Articolo extends Model } } + /** + * Imposta il prezzo di acquisto e aggiorna il prezzo di vendita in base al coefficiente. + * + * @param $value + */ + public function setPrezzoAcquistoAttribute($value) + { + $this->attributes['prezzo_acquisto'] = $value; + + if (!empty($this->coefficiente)) { + $prezzo_vendita = $value * $this->coefficiente; + + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + $id_iva = $this->idiva_vendita ?: setting('Iva predefinita'); + $percentuale_aliquota = floatval(Aliquota::find($id_iva)->percentuale); + + if ($prezzi_ivati) { + $prezzo_vendita = $prezzo_vendita * (1 + $percentuale_aliquota / 100); + } + + $this->setPrezzoVendita($prezzo_vendita, $this->idiva_vendita); + } + } + /** * Verifica se l'articolo corrente è una variante per una Combinazione. * diff --git a/update/2_4_31.sql b/update/2_4_31.sql index e9e7e77d5..0a38049d1 100644 --- a/update/2_4_31.sql +++ b/update/2_4_31.sql @@ -80,4 +80,7 @@ INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `visible`, UPDATE `zz_views` SET `summable` = '1' WHERE (`zz_views`.`name` = 'Q.tà ordinata' OR `zz_views`.`name` = 'Q.tà' OR `zz_views`.`name` = 'Q.tà disponibile' OR `zz_views`.`name` = 'Q.tà impegnata') AND `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'); -- Stampe definitive registri iva -CREATE TABLE `co_stampecontabili` ( `id` INT NOT NULL AUTO_INCREMENT , `id_print` INT NOT NULL , `date_start` DATE NOT NULL , `date_end` DATE NOT NULL , `first_page` INT NOT NULL , `last_page` INT NOT NULL , `dir` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)); \ No newline at end of file +CREATE TABLE `co_stampecontabili` ( `id` INT NOT NULL AUTO_INCREMENT , `id_print` INT NOT NULL , `date_start` DATE NOT NULL , `date_end` DATE NOT NULL , `first_page` INT NOT NULL , `last_page` INT NOT NULL , `dir` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`)); + +-- Coefficiente di vendita +ALTER TABLE `mg_articoli` ADD `coefficiente` DECIMAL(12,6) NOT NULL AFTER `prezzo_acquisto`; \ No newline at end of file