diff --git a/api/index.php b/api/index.php
index fd5ef0b00..08738786c 100755
--- a/api/index.php
+++ b/api/index.php
@@ -34,9 +34,6 @@ register_shutdown_function('serverError');
include_once __DIR__.'/../core.php';
-// Disabilita la sessione per l'API
-session_write_close();
-
// Permesso di accesso all'API da ogni dispositivo
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');
@@ -67,3 +64,5 @@ if (json_last_error() == JSON_ERROR_NONE) {
// Stampa dei risultati
echo $response;
+
+Auth::logout();
\ No newline at end of file
diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php
index 329c0a46b..f2edecb5a 100755
--- a/modules/contratti/row-list.php
+++ b/modules/contratti/row-list.php
@@ -81,6 +81,12 @@ foreach ($righe as $riga) {
echo '
'.$descrizione;
+
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/ddt/add.php b/modules/ddt/add.php
index 0835409c9..9ac2619b1 100755
--- a/modules/ddt/add.php
+++ b/modules/ddt/add.php
@@ -52,8 +52,8 @@ $id_anagrafica = !empty(get('idanagrafica')) ? get('idanagrafica') : '';
{[ "type": "date", "label": "", "name": "data", "required": 1, "value": "-now-" ]}
-
- {[ "type": "select", "label": "", "name": "idanagrafica", "id": "idanagrafica_add", "required": 1, "value": "", "ajax-source": "clienti_fornitori", "icon-after": "add||tipoanagrafica=&readonly_tipo=1" ]}
+
+ {[ "type": "select", "label": "", "name": "idanagrafica", "id": "idanagrafica_add", "required": 1, "value": "", "ajax-source": "clienti_fornitori", "icon-after": "add||tipoanagrafica=" ]}
diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php
index cb3cd4635..9cb513de0 100755
--- a/modules/ddt/row-list.php
+++ b/modules/ddt/row-list.php
@@ -119,6 +119,12 @@ foreach ($righe as $riga) {
}
}
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php
index ab6eaadea..e1d0c697b 100755
--- a/modules/fatture/row-list.php
+++ b/modules/fatture/row-list.php
@@ -163,6 +163,11 @@ foreach ($righe as $riga) {
}
}
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/import/actions.php b/modules/import/actions.php
index 7a318e382..3735895c6 100755
--- a/modules/import/actions.php
+++ b/modules/import/actions.php
@@ -69,7 +69,7 @@ switch (filter('op')) {
// Inizializzazione del lettore CSV
$csv = new $import_manager($record->filepath);
foreach ($fields as $key => $value) {
- $csv->setColumnAssociation($key, $value - 1);
+ $csv->setColumnAssociation($key, (int)$value - 1);
}
// Generazione offset sulla base della pagina
diff --git a/modules/interventi/row-list.php b/modules/interventi/row-list.php
index 9c13edf9b..fdb15c73c 100755
--- a/modules/interventi/row-list.php
+++ b/modules/interventi/row-list.php
@@ -107,6 +107,11 @@ echo '
}
}
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php
index 8b6da5f43..2a8d027b4 100755
--- a/modules/ordini/row-list.php
+++ b/modules/ordini/row-list.php
@@ -135,6 +135,11 @@ foreach ($righe as $riga) {
}
}
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php
index 05ffd952f..1fda41cf1 100755
--- a/modules/preventivi/row-list.php
+++ b/modules/preventivi/row-list.php
@@ -82,6 +82,14 @@ foreach ($righe as $riga) {
}
echo '
'.$descrizione;
+
+
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
+
if (!empty($riga->note)) {
echo '
'.nl2br($riga->note).'';
diff --git a/modules/provenienze/actions.php b/modules/provenienze/actions.php
index 415585da7..3dc98286f 100644
--- a/modules/provenienze/actions.php
+++ b/modules/provenienze/actions.php
@@ -30,7 +30,7 @@ switch (filter('op')) {
flash()->info(tr('Salvataggio completato.'));
} else {
flash()->error(tr("E' già presente una provenienza _NAME_.", [
- '_TYPE_' => $descrizione,
+ '_NAME_' => $descrizione,
]));
}
} else {
diff --git a/modules/settori_merceologici/actions.php b/modules/settori_merceologici/actions.php
index 5f7f3aabe..2b8922b6c 100644
--- a/modules/settori_merceologici/actions.php
+++ b/modules/settori_merceologici/actions.php
@@ -30,7 +30,7 @@ switch (filter('op')) {
flash()->info(tr('Salvataggio completato.'));
} else {
flash()->error(tr("E' già presente il settore merceologico _NAME_.", [
- '_TYPE_' => $descrizione,
+ '_NAME_' => $descrizione,
]));
}
} else {
diff --git a/modules/utenti/add.php b/modules/utenti/add.php
index afb7a3023..bfab4d6ad 100755
--- a/modules/utenti/add.php
+++ b/modules/utenti/add.php
@@ -21,18 +21,34 @@ include_once __DIR__.'/../../core.php';
?>
+
+
+
+
\ No newline at end of file
diff --git a/modules/utenti/components/base.php b/modules/utenti/components/base.php
index bf9d108df..6569a740a 100755
--- a/modules/utenti/components/base.php
+++ b/modules/utenti/components/base.php
@@ -26,7 +26,7 @@ if (!empty(filter('idanagrafica'))) {
echo '
- {[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username||'.($utente['id'] ?: 0).'" ]}
+ {[ "type": "text", "label": "'.tr('Username').'", "name": "username", "required": 1, "value": "'.$utente['username'].'", "validation": "username|'.$id_module.'|'.($utente['id'] ?: 0).'" ]}
';
diff --git a/modules/utenti/edit.php b/modules/utenti/edit.php
index 05d1af966..28e453528 100755
--- a/modules/utenti/edit.php
+++ b/modules/utenti/edit.php
@@ -24,7 +24,7 @@ $utenti = $dbo->fetchArray('SELECT *, (SELECT ragione_sociale FROM an_anagrafich
echo '
-
'.tr('Utenti _GROUP_', [
+ '.tr('Utenti del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
]).'
@@ -32,7 +32,7 @@ echo '
- {["type":"select", "label":"", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $record['id']]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.$record['id_module_start'].'" ]}
+ {["type":"select", "label":"'.tr('Modulo iniziale').'", "name":"id_module_start", "ajax-source":"moduli_gruppo", "select-options": '.json_encode(['idgruppo' => $record['id']]).', "placeholder":"'.tr('Modulo iniziale').'", "value":"'.$record['id_module_start'].'" ]}
';
@@ -167,10 +167,9 @@ echo '
echo '
-
'.tr('Permessi _GROUP_', [
+ '.tr('Permessi del gruppo: _GROUP_', [
'_GROUP_' => $record['nome'],
- ]).((empty($record['editable'])) ? ''.tr('Reimposta permessi').'' : '').'
-
+ ]).((empty($record['editable']) && ($record['nome'] != 'Amministratori')) ? ''.tr('Reimposta permessi').'' : '').'
';
@@ -209,17 +208,16 @@ echo '
';
// Eliminazione gruppo (se non è tra quelli di default)
-if ($record['editable'] == 1) {
- echo '
-
-
';
-}
+
+echo '
+
+
';
echo '
diff --git a/modules/utenti/validation.php b/modules/utenti/validation.php
index 03888447f..c2440308b 100755
--- a/modules/utenti/validation.php
+++ b/modules/utenti/validation.php
@@ -19,6 +19,7 @@
include_once __DIR__.'/../../core.php';
+use Models\Group;
use Models\User;
$name = filter('name');
@@ -31,7 +32,7 @@ switch ($name) {
['id', '<>', $id_record],
])->count() == 0;
- $message = $disponibile ? tr("L'username è disponbile") : tr("L'username è già in uso");
+ $message = $disponibile ? tr("L'username è disponbile") : tr("L'username aa ".$id_record." è già in uso");
$result = $disponibile;
// Lunghezza minima del nome utente (username)
@@ -47,4 +48,22 @@ switch ($name) {
];
break;
+
+
+ case 'gruppo':
+ $disponibile = Group::where([
+ ['nome', $value],
+ //['id', '<>', $id_record],
+ ])->count() == 0;
+
+ $message = $disponibile ? tr("Il nome del gruppo è disponbile") : tr("Il nome per questo gruppo è già in uso");
+ $result = $disponibile;
+
+ $response = [
+ 'result' => $result,
+ 'message' => $message,
+ ];
+
+ break;
+
}
diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php
index f318cefbf..f9e1509a3 100755
--- a/plugins/importFE/generate.php
+++ b/plugins/importFE/generate.php
@@ -146,7 +146,7 @@ echo '
'.$ragione_sociale.'
- '.(empty($anagrafica) ? ''.tr('Nuova anagrafica').'' : ''.Modules::link('Anagrafiche', $anagrafica->id, '', null, '')).'
+ '.(empty($anagrafica) ? ''.tr('Nuova anagrafica').'' : ''.Modules::link('Anagrafiche', $anagrafica->id, '', null, '').'').'
'.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'
') : '').'
diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php
index 265f2c51b..49d065356 100755
--- a/plugins/importFE/src/FatturaElettronica.php
+++ b/plugins/importFE/src/FatturaElettronica.php
@@ -213,13 +213,44 @@ class FatturaElettronica
if (!empty($info['partita_iva']) && !empty($info['codice_fiscale'])) {
$anagrafica->where('piva', $info['partita_iva'])
- ->orWhere('codice_fiscale', $info['codice_fiscale']);
+ ->orWhere('codice_fiscale', $info['codice_fiscale'])
+ ->orWhere('piva', 'like', '__'.$info['partita_iva'])
+ ->orwhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['codice_fiscale'])) {
- $anagrafica->where('codice_fiscale', $info['codice_fiscale']);
+ $anagrafica->where('codice_fiscale', $info['codice_fiscale'])
+ ->orWhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
} elseif (!empty($info['partita_iva'])) {
- $anagrafica->where('piva', $info['partita_iva']);
+ $anagrafica->where('piva', $info['partita_iva'])
+ ->orWhere('piva', 'like', '__'.$info['partita_iva']);
}
+ //Se non trovo l'anagrafica tra i fornitori, provo a ricercarla anche tra i clienti
+ if (empty($anagrafica->first())){
+
+ $type = 'Cliente';
+
+ $tipologia = TipoAnagrafica::where('descrizione', $type)->first();
+
+ $anagrafica = Anagrafica::whereHas('tipi', function ($query) use ($tipologia) {
+ $query->where('an_tipianagrafiche.idtipoanagrafica', '=', $tipologia->id);
+ });
+
+ if (!empty($info['partita_iva']) && !empty($info['codice_fiscale'])) {
+ $anagrafica->where('piva', $info['partita_iva'])
+ ->orWhere('codice_fiscale', $info['codice_fiscale'])
+ ->orWhere('piva', 'like', '__'.$info['partita_iva'])
+ ->orwhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
+ } elseif (!empty($info['codice_fiscale'])) {
+ $anagrafica->where('codice_fiscale', $info['codice_fiscale'])
+ ->orWhere('codice_fiscale', 'like', '__'.$info['codice_fiscale']);
+ } elseif (!empty($info['partita_iva'])) {
+ $anagrafica->where('piva', $info['partita_iva'])
+ ->orWhere('piva', 'like', '__'.$info['partita_iva']);
+ }
+
+ }
+
+
return $anagrafica->first();
}
diff --git a/plugins/pianificazione_fatturazione/actions.php b/plugins/pianificazione_fatturazione/actions.php
index a096e36fe..38d1dc126 100755
--- a/plugins/pianificazione_fatturazione/actions.php
+++ b/plugins/pianificazione_fatturazione/actions.php
@@ -99,7 +99,9 @@ switch ($operazione) {
$inizio = $date_pianificazioni[0];
$fine = date('Y-m-d', strtotime($inizio.' '.$timeing));
$fine = date('Y-m-d', strtotime($fine.' -1 days'));
-
+ if( $cadenza_fatturazione=='Fine' ){
+ $fine = Carbon\Carbon::parse($fine)->endOfMonth()->format("Y-m-d");
+ }
for ($rata = 1; $rata <= $numero_fatture; ++$rata) {
if ($qta_evasa < $r->qta) {
$qta_riga = ($qta[$r->id] <= ($r->qta - $qta_evasa) ? $qta[$r->id] : ($r->qta - $qta_evasa));
@@ -112,7 +114,9 @@ switch ($operazione) {
$fine = date('Y-m-d', strtotime($inizio.' '.$timeing));
$fine = date('Y-m-d', strtotime($fine.' -1 days'));
-
+ if( $cadenza_fatturazione=='Fine' ){
+ $fine = Carbon\Carbon::parse($fine)->endOfMonth()->format("Y-m-d");
+ }
$prezzo_unitario = setting('Utilizza prezzi di vendita comprensivi di IVA') ? (($r->subtotale + $r->iva) / $r->qta) : ($r->subtotale / $r->qta);
if (!empty($r->idarticolo)) {
diff --git a/plugins/pianificazione_interventi/row-list.php b/plugins/pianificazione_interventi/row-list.php
index 6ed41a16d..8ed5e072b 100755
--- a/plugins/pianificazione_interventi/row-list.php
+++ b/plugins/pianificazione_interventi/row-list.php
@@ -80,6 +80,12 @@ if (!$righe->isEmpty()) {
'.tr('SN').': '.implode(', ', $serials);
}
}
+
+ if ($riga->isArticolo() && !empty($riga->articolo->barcode)) {
+ echo '
+
'.$riga->articolo->barcode.'';
+ }
+
echo '
';
diff --git a/src/HTMLBuilder/Wrapper/HTMLWrapper.php b/src/HTMLBuilder/Wrapper/HTMLWrapper.php
index ed1aa030b..6abea7c0e 100755
--- a/src/HTMLBuilder/Wrapper/HTMLWrapper.php
+++ b/src/HTMLBuilder/Wrapper/HTMLWrapper.php
@@ -130,9 +130,7 @@ class HTMLWrapper implements WrapperInterface
var icon = container.find("i");
var id_record = "'.$id_record.'";
- if ($(".modal-content").is(":visible")) {
- var id_record = "";
- }
+ var id_module = "'.$id_module.'";
icon.attr("class", "fa fa-spinner fa-spin");
@@ -140,7 +138,7 @@ class HTMLWrapper implements WrapperInterface
url: globals.rootdir + "/actions.php",
type: "post",
data: {
- id_module: "'.$id_module.'",
+ id_module: id_module,
id_record: id_record,
name: "'.$name.'",
value: value,
diff --git a/update/2_4_38.sql b/update/2_4_38.sql
index c69cec9fe..e8a9e81ca 100644
--- a/update/2_4_38.sql
+++ b/update/2_4_38.sql
@@ -55,10 +55,17 @@ ORDER BY
TRIM(`ragione_sociale`)" WHERE `name` = 'Anagrafiche';
-- Creazione modelli prima nota per liquidazione salari e stipendi
+SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '8';
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
-(NULL, '000080', 'Personale c/Retribuzioni', '8', '', '100.00'),
-(NULL, '000090', 'INPS c/Competenza', '8', '', '100.00'),
-(NULL, '000090', 'Erario c/Ritenute dipendenti', '5', '', '100.00');
+(NULL, LPAD(@numero, 6, '0'), 'Personale c/Retribuzioni', '8', '', '100.00');
+
+SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '8';
+INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
+(NULL, LPAD(@numero, 6, '0'), 'INPS c/Competenza', '8', '', '100.00');
+
+SELECT @numero := MAX(CAST(numero AS UNSIGNED))+10 FROM co_pianodeiconti3 WHERE idpianodeiconti2 = '5';
+INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `percentuale_deducibile`) VALUES
+(NULL, LPAD(@numero, 6, '0'), 'Erario c/Ritenute dipendenti', '5', '', '100.00');
SELECT @idmastrino := MAX(idmastrino)+1 FROM co_movimenti_modelli;
INSERT INTO `co_movimenti_modelli` (`id`, `idmastrino`, `nome`, `descrizione`, `idconto`, `totale`) VALUES
@@ -478,6 +485,8 @@ WHERE
1=1
AND
`dir` = 'uscita' |segment(`co_documenti`.`id_segment`)||date_period(custom, '|period_start|' <= `co_documenti`.`data` AND '|period_end|' >= `co_documenti`.`data`, '|period_start|' <= `co_documenti`.`data_competenza` AND '|period_end|' >= `co_documenti`.`data_competenza` )|
+GROUP BY
+ co_documenti.id
HAVING
2=2
ORDER BY
@@ -676,4 +685,95 @@ DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato numero secondari
DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato numero secondario ordine';
DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato codice attività';
DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato codice preventivi';
-DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato codice contratti';
\ No newline at end of file
+DELETE FROM `zz_settings` WHERE `zz_settings`.`nome` = 'Formato codice contratti';
+
+-- Aggiunta campi provvigione su righe promemoria
+ALTER TABLE `co_righe_promemoria` ADD `provvigione` DECIMAL(15,6) NOT NULL AFTER `prezzo_unitario_ivato`, ADD `provvigione_unitaria` DECIMAL(15,6) NOT NULL AFTER `provvigione`, ADD `provvigione_percentuale` DECIMAL(15,6) NOT NULL AFTER `provvigione_unitaria`, ADD `tipo_provvigione` ENUM('UNT','PRC') NOT NULL DEFAULT 'UNT' AFTER `provvigione_percentuale`;
+
+-- Ottimizzazione query vista Stampe
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'zz_modules.NAME' WHERE `zz_modules`.`name` = 'Stampe' AND `zz_views`.`name` = 'Modulo';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'zz_prints.id' WHERE `zz_modules`.`name` = 'Stampe' AND `zz_views`.`name` = 'id';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'zz_prints.title' WHERE `zz_modules`.`name` = 'Stampe' AND `zz_views`.`name` = 'Titolo';
+UPDATE `zz_modules` SET `options` = "SELECT
+ |select|
+ FROM
+ `zz_prints`
+ LEFT JOIN zz_modules ON zz_modules.id = zz_prints.id_module
+WHERE
+ 1=1
+AND
+ zz_prints.enabled=1
+HAVING
+ 2=2" WHERE `name` = 'Stampe';
+
+
+-- Ottimizzazione query vista Articoli
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = 'IF( co_iva.percentuale IS NOT NULL, (mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita * co_iva.percentuale / 100), mg_articoli.prezzo_vendita + mg_articoli.prezzo_vendita*iva.perc/100)' WHERE `zz_modules`.`name` = 'Articoli' AND `zz_views`.`name` = 'Prezzo vendita ivato';
+UPDATE `zz_modules` SET `options` = "SELECT
+ |select|
+FROM
+ `mg_articoli`
+ LEFT JOIN an_anagrafiche ON mg_articoli.id_fornitore = an_anagrafiche.idanagrafica
+ LEFT JOIN co_iva ON mg_articoli.idiva_vendita = co_iva.id
+ LEFT JOIN (SELECT SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) AS qta_impegnata, or_righe_ordini.idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id INNER JOIN or_statiordine ON or_ordini.idstatoordine = or_statiordine.id WHERE or_tipiordine.dir = 'entrata' AND or_righe_ordini.confermato = 1 AND or_statiordine.impegnato = 1 GROUP BY idarticolo) a ON a.idarticolo = mg_articoli.id
+ LEFT JOIN (SELECT SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) AS qta_ordinata, or_righe_ordini.idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine = or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id INNER JOIN or_statiordine ON or_ordini.idstatoordine = or_statiordine.id WHERE or_tipiordine.dir = 'uscita' AND or_righe_ordini.confermato = 1 AND or_statiordine.impegnato = 1
+ GROUP BY idarticolo) ordini_fornitore ON ordini_fornitore.idarticolo = mg_articoli.id
+ LEFT JOIN mg_categorie ON mg_articoli.id_categoria = mg_categorie.id
+ LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria = sottocategorie.id
+ LEFT JOIN (SELECT co_iva.percentuale AS perc, co_iva.id, zz_settings.nome FROM co_iva INNER JOIN zz_settings ON co_iva.id=zz_settings.valore)AS iva ON iva.nome= 'Iva predefinita'
+WHERE
+ 1=1 AND(`mg_articoli`.`deleted_at`) IS NULL
+HAVING
+ 2=2
+ORDER BY
+ `mg_articoli`.`descrizione`" WHERE `name` = 'Articoli';
+
+
+-- Ottimizzazione query vista Utenti e permessi
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`nome`' WHERE `zz_modules`.`name` = 'Utenti e permessi' AND `zz_views`.`name` = 'Gruppo';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`zz_groups`.`id`' WHERE `zz_modules`.`name` = 'Utenti e permessi' AND `zz_views`.`name` = 'id';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`utenti`.`num`' WHERE `zz_modules`.`name` = 'Utenti e permessi' AND `zz_views`.`name` = 'N. utenti';
+UPDATE `zz_modules` SET `options` = "SELECT
+ |select|
+FROM
+ `zz_groups`
+ LEFT JOIN (SELECT `zz_users`.`id`, COUNT(`id`) AS num FROM `zz_users` GROUP BY `id`) AS utenti ON `zz_groups`.`id`=`utenti`.`id`
+WHERE
+ 1=1
+HAVING
+ 2=2
+ORDER BY
+ `id`,
+ `nome` ASC" WHERE `name` = 'Utenti e permessi';
+
+
+-- Ottimizzazione query vista Listini cliente
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_listini`.`id`' WHERE `zz_modules`.`name` = 'Listini cliente' AND `zz_views`.`name` = 'id';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_listini`.`id`' WHERE `zz_modules`.`name` = 'Listini cliente' AND `zz_views`.`name` = 'id';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`articoli`.`num`' WHERE `zz_modules`.`name` = 'Listini cliente' AND `zz_views`.`name` = 'Articoli';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`anagrafiche`.`num`' WHERE `zz_modules`.`name` = 'Listini cliente' AND `zz_views`.`name` = 'Anagrafiche';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`utente`.`username`' WHERE `zz_modules`.`name` = 'Listini cliente' AND `zz_views`.`name` = 'Ultima modifica';
+UPDATE `zz_modules` SET `options` = "SELECT
+ |select|
+FROM
+ `mg_listini`
+ LEFT JOIN (SELECT `mg_listini_articoli`.`id_listino`, COUNT(`id_listino`) AS num FROM `mg_listini_articoli` GROUP BY `id_listino`) AS articoli ON `mg_listini`.`id`=`articoli`.`id_listino`
+ LEFT JOIN (SELECT `an_anagrafiche`.`id_listino`, COUNT(`id_listino`) AS num FROM `an_anagrafiche` GROUP BY `id_listino`) AS anagrafiche ON `mg_listini`.`id`=`anagrafiche`.`id_listino`
+ LEFT JOIN (SELECT `zz_users`.`id`, `zz_users`.`username` FROM `zz_users` INNER JOIN (SELECT `id_utente`, `id_record` FROM `zz_operations` INNER JOIN `zz_modules` ON `zz_modules`.`NAME` = 'Listini cliente' ORDER BY `id_utente` DESC LIMIT 0, 1) AS `id`) AS `utente` ON `utente`.`id` = `mg_listini`.`id`
+WHERE
+ 1=1
+HAVING
+ 2=2" WHERE `name` = 'Listini cliente';
+
+
+-- Allineamento query vista Piani di sconto/maggiorazione
+UPDATE `zz_modules` SET `options` = "SELECT
+ |select|
+FROM
+ `mg_piani_sconto`
+WHERE
+ 1=1
+HAVING
+ 2=2
+ORDER BY
+ `nome`" WHERE `name` = 'Piani di sconto/maggiorazione';