From 5dccc9580052b24bc3f935e2795108760e7b079b Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Wed, 26 Aug 2020 15:12:22 +0200 Subject: [PATCH] Gestione interna dei prezzi variabili --- assets/src/js/functions/input.js | 10 +- plugins/dettagli_articolo/actions.php | 56 +++++ ..._fornitore.php => dettaglio_fornitore.php} | 0 .../dettagli_articolo/dettaglio_prezzi.php | 221 ++++++++++++++++++ plugins/dettagli_articolo/edit.php | 220 +++++++++++------ .../dettagli_articolo/src/DettaglioPrezzo.php | 52 ++++- src/HTMLBuilder/Handler/ChoicesHandler.php | 2 +- update/2_4_18.sql | 2 +- update/tables.php | 1 + 9 files changed, 482 insertions(+), 82 deletions(-) rename plugins/dettagli_articolo/{edit_fornitore.php => dettaglio_fornitore.php} (100%) mode change 100755 => 100644 create mode 100644 plugins/dettagli_articolo/dettaglio_prezzi.php diff --git a/assets/src/js/functions/input.js b/assets/src/js/functions/input.js index 0a5af7b60..66940b5df 100644 --- a/assets/src/js/functions/input.js +++ b/assets/src/js/functions/input.js @@ -86,7 +86,15 @@ Input.prototype.getData = function () { } Input.prototype.get = function () { - return this.element.val(); + let value = this.element.val(); + + // Conversione del valore per le checkbox + let group = this.element.closest(".form-group"); + if (group.find("input[type=checkbox]").length){ + value = parseInt(value); + } + + return value; } Input.prototype.set = function (value) { diff --git a/plugins/dettagli_articolo/actions.php b/plugins/dettagli_articolo/actions.php index 08ed35071..96db08efc 100755 --- a/plugins/dettagli_articolo/actions.php +++ b/plugins/dettagli_articolo/actions.php @@ -3,6 +3,7 @@ use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo; use Plugins\DettagliArticolo\DettaglioFornitore; +use Plugins\DettagliArticolo\DettaglioPrezzo; include_once __DIR__.'/../../core.php'; @@ -36,6 +37,61 @@ switch (filter('op')) { flash()->info(tr('Informazioni salvate correttamente!')); break; + case 'update_prezzi': + // Informazioni di base + $id_articolo = filter('id_articolo'); + $id_anagrafica = filter('id_anagrafica'); + $direzione = filter('direzione') == 'uscita' ? 'uscita' : 'entrata'; + + $articolo = Articolo::find($id_articolo); + $anagrafica = Anagrafica::find($id_anagrafica); + + $modifica_prezzi = filter('modifica_prezzi'); + if (empty($modifica_prezzi)) { + return; + } + + // Salvataggio del prezzo predefinito + $prezzo_unitario = filter('prezzo_unitario_fisso'); + $dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione) + ->first(); + if (empty($dettaglio_predefinito)) { + $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); + } + $dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario); + $dettaglio_predefinito->save(); + + // Salvataggio dei prezzi variabili + $prezzo_fisso = filter('prezzo_fisso'); + $dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione); + if (empty($prezzo_fisso)) { + $prezzi_unitari = (array) filter('prezzo_unitario'); + $minimi = filter('minimo'); + $massimi = filter('massimo'); + + // Rimozione dei prezzi cancellati + $registrati = filter('dettaglio'); + $dettagli = $dettagli->whereNotIn('id', $registrati)->delete(); + + // Aggiornamento e creazione dei prezzi registrati + foreach ($prezzi_unitari as $key => $prezzo_unitario) { + if (isset($registrati[$key])) { + $dettaglio = DettaglioPrezzo::find($registrati[$key]); + } else { + $dettaglio = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); + } + + $dettaglio->minimo = $minimi[$key]; + $dettaglio->massimo = $massimi[$key]; + $dettaglio->setPrezzoUnitario($prezzo_unitario); + $dettaglio->save(); + } + } else { + $dettagli->delete(); + } + + break; + case 'delete_fornitore': $id_riga = post('id_riga'); diff --git a/plugins/dettagli_articolo/edit_fornitore.php b/plugins/dettagli_articolo/dettaglio_fornitore.php old mode 100755 new mode 100644 similarity index 100% rename from plugins/dettagli_articolo/edit_fornitore.php rename to plugins/dettagli_articolo/dettaglio_fornitore.php diff --git a/plugins/dettagli_articolo/dettaglio_prezzi.php b/plugins/dettagli_articolo/dettaglio_prezzi.php new file mode 100644 index 000000000..9a52091a6 --- /dev/null +++ b/plugins/dettagli_articolo/dettaglio_prezzi.php @@ -0,0 +1,221 @@ +prezzo_vendita_ivato : $articolo->prezzo_vendita; + +// Individuazione dei prezzi registrati +$dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione) + ->get(); + +$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione) + ->first(); +$prezzo_dettaglio_predefinito = $prezzo_predefinito; +if (!empty($dettaglio_predefinito)) { + $prezzo_dettaglio_predefinito = $prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario; +} + +echo ' +

'.tr('Informazioni relative al fornitore _NAME_', [ + '_NAME_' => $anagrafica->ragione_sociale, +]).'.

+ +
+ + + + + + + + +
+
+

'.tr('Prezzo unitario predefinito: _TOT_', [ + '_TOT_' => moneyFormat($prezzo_predefinito), + ]).'

+
+ +
+ {[ "type": "checkbox", "label": "'.tr("Modifica prezzo per l'anagrafica").'", "name": "modifica_prezzi", "value": "'.intval(!$dettagli->isEmpty() || !empty($dettaglio_predefinito)).'" ]} +
+
+ +
+
+ {[ "type": "number", "label": "'.tr('Prezzo unitario').'", "name": "prezzo_unitario_fisso", "value": "'.($prezzi_ivati ? $dettaglio_predefinito->prezzo_unitario_ivato : $dettaglio_predefinito->prezzo_unitario).'", "icon-after": "'.currency().'", "help": "'.($prezzi_ivati ? tr('Importo IVA inclusa') : '').'" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Imposta un prezzo unitario fisso').'", "name": "prezzo_fisso", "value": "'.intval($dettagli->count() == 0).'" ]} +
+
+ +
+
+

+ '.tr('Prezzi per quantità').' +

+ + +
+ +
+

'.tr("Inserire i prezzi da associare all'articolo e all'anagrafica in relazione alla quantità di acquisto").'.

+

'.tr('Per impostare un prezzo generale per quantità non incluse in questi limiti, utilizzare il campo sopra indicato').'.

+ + + + + + + + + + + + '; + +foreach ($dettagli as $key => $dettaglio) { + echo ' + + + + + + + + + '; +} + +echo ' + +
'.tr('Quantità minima').''.tr('Quantità massima').' + '.tr('Prezzo unitario').' + #
+ + {[ "type": "number", "name": "minimo['.$key.']", "min-value": 0, "value": "'.$dettaglio->minimo.'" ]} + + {[ "type": "number", "name": "massimo['.$key.']", "min-value": 0, "value": "'.$dettaglio->massimo.'" ]} + + {[ "type": "number", "name": "prezzo_unitario['.$key.']", "icon-after": "'.currency().'", "value": "'.($prezzi_ivati ? $dettaglio->prezzo_unitario_ivato : $dettaglio->prezzo_unitario).'" ]} + + +
+
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + +
+ {[ "type": "number", "name": "minimo[-id-]", "min-value": 0 ]} + + {[ "type": "number", "name": "massimo[-id-]", "min-value": 0 ]} + + {[ "type": "number", "name": "prezzo_unitario[-id-]", "icon-after": "'.currency().'" ]} + + +
+ + + +'; diff --git a/plugins/dettagli_articolo/edit.php b/plugins/dettagli_articolo/edit.php index 62d359fbe..a0d738be9 100755 --- a/plugins/dettagli_articolo/edit.php +++ b/plugins/dettagli_articolo/edit.php @@ -5,112 +5,188 @@ use Plugins\DettagliArticolo\DettaglioFornitore; include_once __DIR__.'/../../core.php'; echo ' -

'.tr("In questa sezione è possibile definire le caratteristiche di base dell'articolo in relazione fornitore di origine, come codice e prezzo di acquisto predefinito").'. '.tr("Queste informazioni saranno utilizzate in automatico per la compilazione dell'articolo al momento dell'inserimento in un documento di acquisto relativo al fornitore indicato, sovrascrivendo le impostazioni predefinite della sezione Acquisto per l'articolo").'.

-

'.tr("Ogni fornitore, tra cui si evidenzia quello predefinito per l'articolo, può essere descritto una sola volta con le informazioni aggiuntive").'.

+

'.tr("In questa sezione è possibile definire dei dettagli aggiuntivi per l'articolo in relazione ad una specifica anagrafica del gestionale").'.

+

'.tr("Per i Clienti è possibile definire un prezzo personalizzato per la vendita dell'articolo, fisso oppure in relazione a una specifica quantità").'. '.tr("Per i Fornitori sono disponibili maggiori informazioni relative a codice, descrizione e quantità minime richieste per l'acquisto").'.

+

'.tr("Queste informazioni sono integrate con il resto del gestionale per garantire una maggiore flessibilità all'utente finale").'

-
-
-

'.tr('Nuovo fornitore').'

-
+ +