From 8ccee151f9d8841f5ae1dd250f8847128d2878ea Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Tue, 25 Aug 2020 17:38:10 +0200 Subject: [PATCH] Base per i dettagli articolo per anagrafica --- composer.json | 9 +- config/namespaces.php | 2 +- include/src/Components/Article.php | 4 +- modules/articoli/src/Articolo.php | 4 +- .../actions.php | 8 +- .../edit.php | 4 +- .../edit_fornitore.php | 4 +- .../src/DettaglioFornitore.php} | 4 +- .../dettagli_articolo/src/DettaglioPrezzo.php | 49 +++++++++++ plugins/dettagli_articolo/src/METEL.php | 87 +++++++++++++++++++ update/2_4_16.sql | 4 +- update/2_4_18.sql | 17 ++++ 12 files changed, 176 insertions(+), 20 deletions(-) rename plugins/{fornitori_articolo => dettagli_articolo}/actions.php (82%) mode change 100644 => 100755 rename plugins/{fornitori_articolo => dettagli_articolo}/edit.php (97%) mode change 100644 => 100755 rename plugins/{fornitori_articolo => dettagli_articolo}/edit_fornitore.php (96%) mode change 100644 => 100755 rename plugins/{fornitori_articolo/src/Dettaglio.php => dettagli_articolo/src/DettaglioFornitore.php} (92%) create mode 100644 plugins/dettagli_articolo/src/DettaglioPrezzo.php create mode 100644 plugins/dettagli_articolo/src/METEL.php diff --git a/composer.json b/composer.json index 145f60731..41e025384 100755 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ }], "type": "project", "require": { - "php": ">=5.6", + "php": ">=5.6.4", "ext-curl": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -37,7 +37,7 @@ "aluguest/ical-easy-reader": "^1.5", "danielstjules/stringy": "^3.1", "davidepastore/codice-fiscale": "^0.4.0", - "dragonmantank/cron-expression": "^3.0", + "dragonmantank/cron-expression": "^1.0", "ezyang/htmlpurifier": "^4.8", "filp/whoops": "^2.1", "guzzlehttp/guzzle": "^6.3", @@ -83,6 +83,9 @@ "sort-packages": true, "optimize-autoloader": true, "apcu-autoloader": true, - "prefer-stable": true + "prefer-stable": true, + "platform": { + "php": "5.6.4" + } } } diff --git a/config/namespaces.php b/config/namespaces.php index d12c34cac..9ec080c3e 100755 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -40,5 +40,5 @@ return [ 'plugins/pianificazione_interventi' => 'Plugins\PianificazioneInterventi', 'plugins/pianificazione_fatturazione' => 'Plugins\PianificazioneFatturazione', 'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli', - 'plugins/fornitori_articolo' => 'Plugins\FornitoriArticolo', + 'plugins/dettagli_articolo' => 'Plugins\DettagliArticolo', ]; diff --git a/include/src/Components/Article.php b/include/src/Components/Article.php index ae0220cc8..eb6c2990b 100755 --- a/include/src/Components/Article.php +++ b/include/src/Components/Article.php @@ -6,7 +6,7 @@ use Common\Document; use Illuminate\Database\Eloquent\Builder; use Modules\Articoli\Articolo as Original; use Modules\Articoli\Movimento; -use Plugins\FornitoriArticolo\Dettaglio; +use Plugins\DettagliArticolo\DettaglioFornitore; use UnexpectedValueException; abstract class Article extends Row @@ -172,7 +172,7 @@ abstract class Article extends Row public function dettaglioFornitore() { - return $this->belongsTo(Dettaglio::class, 'id_dettaglio_fornitore')->withTrashed(); + return $this->belongsTo(DettaglioFornitore::class, 'id_dettaglio_fornitore')->withTrashed(); } public function movimentazione($value = true) diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 000f77c8b..b84dc81d1 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Modules; use Modules\Interventi\Components\Articolo as ArticoloIntervento; use Modules\Iva\Aliquota; -use Plugins\FornitoriArticolo\Dettaglio; +use Plugins\DettagliArticolo\DettaglioFornitore; use Traits\RecordTrait; use Uploads; @@ -199,7 +199,7 @@ class Articolo extends Model public function dettaglioFornitori() { - return $this->hasMany(Dettaglio::class, 'id_articolo'); + return $this->hasMany(DettaglioFornitore::class, 'id_articolo'); } public function dettaglioFornitore($id_fornitore) diff --git a/plugins/fornitori_articolo/actions.php b/plugins/dettagli_articolo/actions.php old mode 100644 new mode 100755 similarity index 82% rename from plugins/fornitori_articolo/actions.php rename to plugins/dettagli_articolo/actions.php index 8ab639200..08ed35071 --- a/plugins/fornitori_articolo/actions.php +++ b/plugins/dettagli_articolo/actions.php @@ -2,7 +2,7 @@ use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo; -use Plugins\FornitoriArticolo\Dettaglio; +use Plugins\DettagliArticolo\DettaglioFornitore; include_once __DIR__.'/../../core.php'; @@ -12,14 +12,14 @@ switch (filter('op')) { $articolo = Articolo::find($id_articolo); $id_anagrafica = filter('id_anagrafica'); - $precedente = Dettaglio::where('id_articolo', $id_record) + $precedente = DettaglioFornitore::where('id_articolo', $id_record) ->where('id_fornitore', $id_anagrafica) ->first(); if (empty($precedente)) { $anagrafica = Anagrafica::find($id_anagrafica); - $fornitore = Dettaglio::build($anagrafica, $articolo); + $fornitore = DettaglioFornitore::build($anagrafica, $articolo); } else { $fornitore = $precedente->replicate(); $precedente->delete(); @@ -39,7 +39,7 @@ switch (filter('op')) { case 'delete_fornitore': $id_riga = post('id_riga'); - $fornitore = Dettaglio::find($id_riga); + $fornitore = DettaglioFornitore::find($id_riga); $fornitore->delete(); flash()->info(tr('Relazione articolo-fornitore rimossa correttamente!')); diff --git a/plugins/fornitori_articolo/edit.php b/plugins/dettagli_articolo/edit.php old mode 100644 new mode 100755 similarity index 97% rename from plugins/fornitori_articolo/edit.php rename to plugins/dettagli_articolo/edit.php index 911c563aa..62d359fbe --- a/plugins/fornitori_articolo/edit.php +++ b/plugins/dettagli_articolo/edit.php @@ -1,6 +1,6 @@ '; -$fornitori = Dettaglio::where('id_articolo', $id_record)->get(); +$fornitori = DettaglioFornitore::where('id_articolo', $id_record)->get(); if (!$fornitori->isEmpty()) { echo '

'.tr('Elenco fornitori').'

diff --git a/plugins/fornitori_articolo/edit_fornitore.php b/plugins/dettagli_articolo/edit_fornitore.php old mode 100644 new mode 100755 similarity index 96% rename from plugins/fornitori_articolo/edit_fornitore.php rename to plugins/dettagli_articolo/edit_fornitore.php index d7c10770d..c260f316c --- a/plugins/fornitori_articolo/edit_fornitore.php +++ b/plugins/dettagli_articolo/edit_fornitore.php @@ -2,7 +2,7 @@ use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo; -use Plugins\FornitoriArticolo\Dettaglio; +use Plugins\DettagliArticolo\DettaglioFornitore; include_once __DIR__.'/../../core.php'; @@ -15,7 +15,7 @@ $anagrafica = Anagrafica::find($id_anagrafica); $id_riga = get('id_riga'); $fornitore = []; if (!empty($id_riga)) { - $fornitore = Dettaglio::find($id_riga); + $fornitore = DettaglioFornitore::find($id_riga); } else { $fornitore = $articolo->dettaglioFornitore($id_anagrafica); } diff --git a/plugins/fornitori_articolo/src/Dettaglio.php b/plugins/dettagli_articolo/src/DettaglioFornitore.php similarity index 92% rename from plugins/fornitori_articolo/src/Dettaglio.php rename to plugins/dettagli_articolo/src/DettaglioFornitore.php index 94c4a91a6..2ff8417e1 100644 --- a/plugins/fornitori_articolo/src/Dettaglio.php +++ b/plugins/dettagli_articolo/src/DettaglioFornitore.php @@ -1,6 +1,6 @@ anagrafica()->associate($fornitore); + $model->articolo()->associate($articolo); + + $model->save(); + + return $model; + } + + // Relazioni Eloquent + + public function anagrafica() + { + return $this->belongsTo(Anagrafica::class, 'id_fornitore'); + } + + public function articolo() + { + return $this->belongsTo(Articolo::class, 'id_articolo'); + } +} diff --git a/plugins/dettagli_articolo/src/METEL.php b/plugins/dettagli_articolo/src/METEL.php new file mode 100644 index 000000000..51378239c --- /dev/null +++ b/plugins/dettagli_articolo/src/METEL.php @@ -0,0 +1,87 @@ + 'Identificazione tracciato', + 21 => 'Sigla Azienda', + 24 => 'Partita IVA', + 35 => 'Numero listino prezzi', + 41 => 'Decorrenza listino prezzi', + 49 => 'Data ultima variazione/immissione', + 57 => 'Descrizione listino prezzi', + 87 => 'Filler (spazi)', + 126 => 'Versione tracciato listino prezzi', + 129 => 'Data decorrenza listino grossista', + 137 => 'Isopartita', + 153 => 'Filler (spazi)', + ]; + + const ROW = [ + 1 => 'Sigla Marchio', + 4 => 'Codice Prodotto Azienda', + 20 => 'Codice EAN', + 33 => 'Descrizione prodotto', + 76 => 'Quantità cartone', + 81 => 'Quantità multipla ordinazione', + 86 => 'Quantità minima ordinazione', + 91 => 'Quantità massima ordinazione', + 97 => 'Lead Time', + 98 => 'Prezzo al rivenditore', + 109 => 'Prezzo al Pubblico', + 120 => 'Moltiplicatore prezzo', + 126 => 'Codice Valuta', + 129 => 'Unità di misura', + 132 => 'Prodotto Composto', + 133 => 'Stato del prodotto', + 134 => 'Data ultima variazione', + 142 => 'Famiglia di sconto', + 160 => 'Famiglia statistica', + 178 => 'Codice Electrocod', + 188 => 'Codice Etim', + 198 => 'Codice Barcode', + 233 => 'Qualificatore Codice Barcode', + ]; + + public function parse($string, $fields) + { + $fields_number = count($fields); + $keys = array_keys($fields); + + $results = []; + for ($i = 0; $i < $fields_number; ++$i) { + $key = $keys[$i]; + $start = $key - 1; + + if ($fields_number - 1 == $i) { + $end = strlen($string); + } else { + $end = $keys[$i + 1] - 1; + } + + $length = $end - $start; + + $piece = substr($string, $start, $length); + $results[$fields[$key]] = trim($piece); + } + + return $results; + } + + public function parseHeader($content) + { + return $this->parse($content, static::HEADER); + } + + public function parseRow($content) + { + return $this->parse($content, static::ROW); + } +} diff --git a/update/2_4_16.sql b/update/2_4_16.sql index 758cba198..7f37d720d 100644 --- a/update/2_4_16.sql +++ b/update/2_4_16.sql @@ -37,9 +37,9 @@ UPDATE `em_templates` SET `predefined` = '1' WHERE `em_templates`.`name` = 'Noti UPDATE `em_templates` SET `predefined` = '1' WHERE `em_templates`.`name` = 'Reset password'; UPDATE `em_templates` SET `predefined` = '1' WHERE `em_templates`.`name` = 'Rapportino intervento'; -INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico l\'assegnazione all\'attività', '0', 'boolean', '1', 'Interventi', NULL, 'Notifica via email al tecnico le nuove sessioni di lavoro che gli sono state assegnate (l\'indirizzo email deve essere specificato nella sua anagrafica)'); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico l''assegnazione all''attività', '0', 'boolean', '1', 'Interventi', NULL, 'Notifica via email al tecnico le nuove sessioni di lavoro che gli sono state assegnate (l''indirizzo email deve essere specificato nella sua anagrafica)'); -INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico la rimozione dall\'attività', '0', 'boolean', '1', 'Interventi', NULL, 'Notifica via email al tecnico la rimozione dalle sessioni di lavoro che gli erano state assegnate (l\'indirizzo email deve essere specificato nella sua anagrafica)'); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Notifica al tecnico la rimozione dall''attività', '0', 'boolean', '1', 'Interventi', NULL, 'Notifica via email al tecnico la rimozione dalle sessioni di lavoro che gli erano state assegnate (l''indirizzo email deve essere specificato nella sua anagrafica)'); UPDATE `zz_settings` SET `sezione` = 'Fatturazione Elettronica' WHERE `zz_settings`.`nome` = 'Riferimento dei documenti in Fattura Elettronica'; diff --git a/update/2_4_18.sql b/update/2_4_18.sql index 0bcb26e58..71dbd702e 100644 --- a/update/2_4_18.sql +++ b/update/2_4_18.sql @@ -21,3 +21,20 @@ DELETE FROM `zz_hooks` WHERE `class` = 'Modules\\Backups\\BackupHook'; -- Modifica dei Listini in Piani di sconto/rincaro UPDATE `zz_modules` SET `title` = 'Piani di sconto/rincaro' WHERE `name` = 'Listini'; + +-- Aggiunto supporto ai prezzi per Articoli specifici per Anagrafica e range di quantità +CREATE TABLE IF NOT EXISTS `mg_prezzi_articoli` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `id_articolo` int(11) NOT NULL, + `id_anagrafica` int(11), + `minimo` DECIMAL(15,6), + `massimo` DECIMAL(15,6), + `prezzo_unitario` DECIMAL(15,6) NOT NULL, + `prezzo_unitario_ivato` DECIMAL(15,6) NOT NULL, + `direzione` VARCHAR(255) NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`id_articolo`) REFERENCES `mg_articoli`(`id`), + FOREIGN KEY (`id_anagrafica`) REFERENCES `an_anagrafiche`(`idanagrafica`) +) ENGINE=InnoDB; + +UPDATE `zz_plugins` SET `directory` = 'dettagli_articolo', `name`= 'Dettagli articolo', `title`= 'Dettagli' WHERE `name` = 'Fornitori Articolo';