From bb27648ba3b96f6d723618f116a0c782e232eec1 Mon Sep 17 00:00:00 2001 From: Michel Oliverio Date: Fri, 24 Mar 2023 12:06:58 +0100 Subject: [PATCH] unificato prezzo e dettaglio --- plugins/listino_fornitori/actions.php | 30 ++ .../dettaglio_prezzi_fornitore.php | 333 ++++++++++++++++++ plugins/listino_fornitori/edit.php | 25 +- 3 files changed, 382 insertions(+), 6 deletions(-) create mode 100644 plugins/listino_fornitori/dettaglio_prezzi_fornitore.php diff --git a/plugins/listino_fornitori/actions.php b/plugins/listino_fornitori/actions.php index 94d828668..5782f9b1f 100644 --- a/plugins/listino_fornitori/actions.php +++ b/plugins/listino_fornitori/actions.php @@ -64,4 +64,34 @@ switch (filter('op')) { case 'update_prezzi': require base_dir().'/plugins/listino_clienti/actions.php'; break; + + case 'update_prezzi': + require base_dir().'/plugins/listino_clienti/actions.php'; + + $id_articolo = filter('id_articolo'); + $articolo = Articolo::find($id_articolo); + + $id_anagrafica = filter('id_anagrafica'); + $precedente = DettaglioFornitore::where('id_articolo', $id_record) + ->where('id_fornitore', $id_anagrafica) + ->first(); + + if (empty($precedente)) { + $anagrafica = Anagrafica::find($id_anagrafica); + + $fornitore = DettaglioFornitore::build($anagrafica, $articolo); + } else { + $fornitore = $precedente; + } + + $fornitore->codice_fornitore = post('codice_fornitore'); + $fornitore->barcode_fornitore = post('barcode_fornitore'); + $fornitore->descrizione = post('descrizione'); + $fornitore->qta_minima = post('qta_minima'); + $fornitore->giorni_consegna = post('giorni_consegna'); + + $fornitore->save(); + + flash()->info(tr('Informazioni salvate correttamente!')); + break; } diff --git a/plugins/listino_fornitori/dettaglio_prezzi_fornitore.php b/plugins/listino_fornitori/dettaglio_prezzi_fornitore.php new file mode 100644 index 000000000..d1f10ce60 --- /dev/null +++ b/plugins/listino_fornitori/dettaglio_prezzi_fornitore.php @@ -0,0 +1,333 @@ +. + */ + +use Modules\Anagrafiche\Anagrafica; +use Modules\Articoli\Articolo; +use Plugins\ListinoClienti\DettaglioPrezzo; + +include_once __DIR__.'/../../core.php'; + +// Informazioni di base +$id_articolo = get('id_articolo'); +$id_anagrafica = get('id_anagrafica'); +$direzione = get('direzione') == 'uscita' ? 'uscita' : 'entrata'; +$prezzi_ivati = ($direzione == 'entrata' ? setting('Utilizza prezzi di vendita comprensivi di IVA') : 0); + +// Modelli di interesse +$articolo = Articolo::find($id_articolo); +$anagrafica = Anagrafica::find($id_anagrafica); + +if ($direzione == 'entrata') { + $prezzo_predefinito = $prezzi_ivati ? $articolo->prezzo_vendita_ivato : $articolo->prezzo_vendita; +} else { + $prezzo_predefinito = $articolo->prezzo_acquisto; +} +// Individuazione dei prezzi registrati +$dettagli = DettaglioPrezzo::dettagli($id_articolo, $id_anagrafica, $direzione) + ->get(); + +$dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($id_articolo, $id_anagrafica, $direzione) + ->first(); +if ($articolo->id_fornitore == $anagrafica->idanagrafica) { + $color = 'success'; + $icon = 'check'; + $text = tr('Sì'); +} else { + $color = 'danger'; + $icon = 'times'; + $text = tr('No'); +} + +$id_riga = $dbo->fetchOne( + 'SELECT id + FROM mg_fornitore_articolo + WHERE id_articolo = '.prepare($id_articolo).' + AND id_anagrafica = '.prepare($id_anagrafica) +)['id']; + +$fornitore = []; +if (!empty($id_riga)) { + $fornitore = DettaglioFornitore::find($id_riga); +} else { + $fornitore = $articolo->dettaglioFornitore($id_anagrafica); +} + +if ($fornitore['descrizione'] == '') { + $descrizione = json_encode($articolo->descrizione); +} else { + $descrizione = json_encode($fornitore['descrizione']); +} + +if ($fornitore['codice_fornitore'] == '') { + $codice = $articolo['codice']; +} else { + $codice = $fornitore['codice_fornitore']; +} + +echo ' + + + + '; + if ($direzione == 'uscita') { + echo ''; + } else { + echo ''; + } + echo ' + + + + '; + if ($direzione == 'uscita') { + echo ''; + } else { + echo ''; + } + echo ' + +
'.($direzione == 'entrata' ? tr('Cliente') : tr('Fornitore')).''.tr('Prezzo predefinito').''.tr('E\' il fornitore predefinito?').''.tr('Fornitore predefinito').'
'.$anagrafica->ragione_sociale.''.moneyFormat($prezzo_predefinito).' '.$text.''.(!empty($articolo->id_fornitore) ? Anagrafica::find($articolo->id_fornitore)->ragione_sociale : tr('Nessuno')).'
+ +
+ + + + + + + '; + + // informazioni fornitore + + echo ' +
+
+ {[ "type": "text", "label": "'.tr('Codice fornitore').'", "name": "codice_fornitore", "required": 1, "value": "'.$codice.'" ]} +
+ +
+ {[ "type": "text", "label": "'.tr('Barcode').'", "name": "barcode_fornitore", "value": "'.$fornitore['barcode_fornitore'].'" ]} +
+
+ +
+
+ {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "required": 1, "value": '.$descrizione.' ]} +
+
+ +
+
+ {[ "type": "number", "label": "'.tr('Qta minima ordinabile').'", "name": "qta_minima", "required": 0, "value": "'.$fornitore['qta_minima'].'", "icon-after": "'.$articolo->um.'" ]} +
+ +
+ {[ "type": "text", "label": "'.tr('Tempi di consegna').'", "name": "giorni_consegna", "class": "text-right", "required": 0, "value": "'.$fornitore['giorni_consegna'].'", "icon-after": "'.tr('gg').'" ]} +
+
+ +
+ +
+
+ {[ "type": "checkbox", "label": "'.tr('Imposta prezzo specifico per questa anagrafica').'", "name": "modifica_prezzi", "value": "'.intval(!empty($dettaglio_predefinito)).'" ]} +
+
+ +
+
+
+ {[ "type": "number", "label": "'.tr('Prezzo specifico').'", "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": "number", "label": "'.tr('Sconto specifico').'", "name": "sconto_fisso", "value": "'.$dettaglio_predefinito->sconto_percentuale.'", "icon-after": "%"]} +
+
+
+ +
+
+ {[ "type": "checkbox", "label": "'.tr('Imposta prezzo in base alla quantità').'", "name": "prezzo_qta", "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').($prezzi_ivati ? '' : '').' + '.tr('Sconto').'#
+ + {[ "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": "sconto['.$key.']", "min-value": 0, "value": "'.$dettaglio->sconto.'", "icon-after":"%" ]} + + +
+
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + +
+ {[ "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().'" ]} + + {[ "type": "number", "name": "sconto[-id-]", "min-value": 0, "icon-after": "%" ]} + + +
+ + + +'; diff --git a/plugins/listino_fornitori/edit.php b/plugins/listino_fornitori/edit.php index c205e72ba..285abbe5c 100644 --- a/plugins/listino_fornitori/edit.php +++ b/plugins/listino_fornitori/edit.php @@ -37,12 +37,8 @@ echo '
- - -
@@ -226,4 +222,21 @@ function aggiungiFornitore() { swal("'.tr('Attenzione').'", "'.tr('Inserire un\'anagrafica').'", "warning"); } } + +function modificaFornitorePrezzi(id_anagrafica, direzione) { + openModal("'.tr('Gestisci prezzi specifici fornitore').'", "'.$structure->fileurl('dettaglio_prezzi_fornitore.php').'?id_plugin='.$id_plugin.'&id_module='.$id_module.'&id_parent='.$id_record.'&id_articolo='.$id_record.'&id_anagrafica=" + id_anagrafica + "&direzione=" + direzione); +} + +function aggiungiFornitorePrezzi(button) { + let panel = $(button).closest(".box"); + + let direzione = "uscita" + let id_anagrafica = panel.find("select").val(); + + if (id_anagrafica) { + modificaFornitorePrezzi(id_anagrafica, direzione); + } else { + swal("'.tr('Attenzione').'", "'.tr('Inserire un\'anagrafica').'", "warning"); + } +} ';