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