diff --git a/ajax_dataload.php b/ajax_dataload.php index 346d73579..23365a061 100644 --- a/ajax_dataload.php +++ b/ajax_dataload.php @@ -114,12 +114,12 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom $value = trim($r[$field]); // Allineamento a destra se il valore della prima riga risulta numerica - if (Translator::getEnglishFormatter()->isNumber($value) || Translator::getEnglishFormatter()->isNumber($value)) { + if (Translator::getFormatter()->isStandardNumber($value)) { $align[$field] = 'text-right'; } // Allineamento al centro se il valore della prima riga risulta relativo a date o icone - elseif ((Translator::getEnglishFormatter()->isDate($value) || Translator::getEnglishFormatter()->isDate($value)) || preg_match('/^icontr(.+?)$/', $field)) { + elseif (Translator::getFormatter()->isStandardDate($value) || preg_match('/^icontr(.+?)$/', $field)) { $align[$field] = 'text-center'; } } @@ -142,14 +142,14 @@ if (!empty($module_query) && $module_query != 'menu' && $module_query != 'custom $value = trim($r[$field]); // Formattazione automatica - if (!empty($total['format'][$pos]) && !empty($value) && !empty(Translator::getEnglishFormatter())) { - if (Translator::getEnglishFormatter()->isNumber($value)) { + if (!empty($total['format'][$pos]) && !empty($value)) { + if (Translator::getFormatter()->isStandardNumber($value)) { $value = Translator::numberToLocale($value); - } elseif (Translator::getEnglishFormatter()->isTimestamp($value)) { + } elseif (Translator::getFormatter()->isStandardTimestamp($value)) { $value = Translator::timestampToLocale($value); - } elseif (Translator::getEnglishFormatter()->isDate($value)) { + } elseif (Translator::getFormatter()->isStandardDate($value)) { $value = Translator::dateToLocale($value); - } elseif (Translator::getEnglishFormatter()->isTime($value)) { + } elseif (Translator::getFormatter()->isStandardTime($value)) { $value = Translator::timeToLocale($value); } } diff --git a/core.php b/core.php index dd8727da1..ab43298e3 100644 --- a/core.php +++ b/core.php @@ -101,16 +101,13 @@ foreach ($handlers as $handler) { // Imposta Monolog come gestore degli errori Monolog\ErrorHandler::register($logger); -// Istanziamento della gestione di date e numeri -$formatter = !empty($formatter) ? $formatter : []; -Translator::setLocaleFormatter($formatter); - // Istanziamento del gestore delle traduzioni del progetto $lang = !empty($lang) ? $lang : 'it'; +$formatter = !empty($formatter) ? $formatter : []; $translator = Translator::getInstance(); $translator->addLocalePath($docroot.'/locale'); $translator->addLocalePath($docroot.'/modules/*/locale'); -$translator->setLocale($lang); +$translator->setLocale($lang, $formatter); // Individuazione di versione e revisione del progetto $version = Update::getVersion(); @@ -279,3 +276,4 @@ if (!API::isAPIRequest()) { $post = Filter::getPOST(); $get = Filter::getGET(); } + diff --git a/include/top.php b/include/top.php index b5ba85e63..c935822c4 100644 --- a/include/top.php +++ b/include/top.php @@ -89,7 +89,7 @@ if (Auth::check()) { id_record: \''.$id_record.'\', aggiornamenti_id: \''.($dbo->isInstalled() ? Modules::getModule('Aggiornamenti')['id'] : '').'\', cifre_decimali: '.get_var('Cifre decimali per importi').', - decimals: "'.Translator::getLocaleFormatter()->getNumberSeparators()['decimals'].'", thousands: "'.Translator::getLocaleFormatter()->getNumberSeparators()['thousands'].'", + decimals: "'.Translator::getFormatter()->getNumberSeparators()['decimals'].'", thousands: "'.Translator::getFormatter()->getNumberSeparators()['thousands'].'", search: search, translations: translations, start_date: \''.Translator::dateToLocale($_SESSION['period_start']).'\', diff --git a/modules/automezzi/actions.php b/modules/automezzi/actions.php index 9228e9cb5..b3280a195 100644 --- a/modules/automezzi/actions.php +++ b/modules/automezzi/actions.php @@ -48,7 +48,7 @@ switch (post('op')) { // Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio if (!empty($post['data_fine'])) { - if (Translator::getEnglishFormatter()->toDateObject(post('data_fine')) >= Translator::getEnglishFormatter()->toDateObject($data_inizio)) { + if (new DateTime(post('data_fine')) >= new DateTime($data_inizio)) { $data_fine = post('data_fine'); } } @@ -72,7 +72,7 @@ switch (post('op')) { // Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio if (!empty($post['data_fine'][$idautomezzotecnico])) { - if (Translator::getEnglishFormatter()->toDateObject(post('data_fine')[$idautomezzotecnico]) >= Translator::getEnglishFormatter()->toDateObject($data_inizio)) { + if (new DateTime(post('data_fine')[$idautomezzotecnico]) >= new DateTime($data_inizio)) { $data_fine = post('data_fine')[$idautomezzotecnico]; } } diff --git a/modules/automezzi/add_tecnico.php b/modules/automezzi/add_tecnico.php index b16479383..31616a22f 100644 --- a/modules/automezzi/add_tecnico.php +++ b/modules/automezzi/add_tecnico.php @@ -50,6 +50,10 @@ echo ' $(function () { $("#data_inizio").on("dp.change", function (e) { $("#data_fine").data("DateTimePicker").minDate(e.date); + + if($("#data_fine").data("DateTimePicker").date() < e.date){ + $("#data_fine").data("DateTimePicker").date(e.date); + } }) }); '; diff --git a/modules/automezzi/row-list-tecnici.php b/modules/automezzi/row-list-tecnici.php index 46204e7db..46da515b8 100644 --- a/modules/automezzi/row-list-tecnici.php +++ b/modules/automezzi/row-list-tecnici.php @@ -53,6 +53,10 @@ if (!empty($rs_art)) { $(function () { $("#data_inizio'.$r['id'].'").on("dp.change", function (e) { $("#data_fine'.$r['id'].'").data("DateTimePicker").minDate(e.date); + + if($("#data_fine'.$r['id'].'").data("DateTimePicker").date() < e.date){ + $("#data_fine'.$r['id'].'").data("DateTimePicker").date(e.date); + } }) }); '; diff --git a/modules/categorie/actions.php b/modules/categorie/actions.php index 10293b357..0d3d22f77 100644 --- a/modules/categorie/actions.php +++ b/modules/categorie/actions.php @@ -52,7 +52,6 @@ switch (filter('op')) { '_TYPE_' => 'categoria', ]); } else { - $_POST['backto'] = 'record-edit'; $_SESSION['errors'][] = tr('Esistono ancora alcuni articoli sotto questa categoria!'); } diff --git a/modules/categorie/edit.php b/modules/categorie/edit.php index 9fdd99ea0..bfea77165 100644 --- a/modules/categorie/edit.php +++ b/modules/categorie/edit.php @@ -77,6 +77,17 @@ include_once __DIR__.'/../../core.php'; }); +fetchNum('SELECT * FROM `mg_articoli` WHERE `id_categoria`='.prepare($id).' OR `id_sottocategoria`='.prepare($id).' OR `id_sottocategoria` IN (SELECT id FROM `mg_categorie` WHERE `parent`='.prepare($id).')'); +if ($res) { + echo ' - - + '.tr('Elimina').' +'; +} else { + echo ' +
+

'.tr('Esistono ancora alcuni articoli sotto questa categoria!').'

+
'; +} diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 8d77b76eb..896d1417d 100644 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -105,7 +105,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" $ordiniservizio) { - $data_scadenza = date_create_from_format('Ym', $data_scadenza)->format(Translator::getEnglishFormatter()->getTimestampPattern()); + $data_scadenza = date_create_from_format('Ym', $data_scadenza)->format(Intl\Formatter::getStandardFormats()['date']); // Ogni data può avere più voci di servizio da salvare foreach ($ordiniservizio as $n => $idvoce) { diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 99100e0f8..76dfbee25 100644 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -109,7 +109,7 @@ if ($dir == 'uscita') {
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]} + {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
diff --git a/modules/fatture/add_ddt.php b/modules/fatture/add_ddt.php index d6da0a21d..fdbc6760e 100644 --- a/modules/fatture/add_ddt.php +++ b/modules/fatture/add_ddt.php @@ -19,7 +19,7 @@ $idanagrafica = $record[0]['idanagrafica']; echo '
- {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT id, CONCAT(\'nr. \', if(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione, numero, numero_esterno, DATE_FORMAT(data, \'%d-%m-%Y\') AS data FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') ORDER BY data DESC, numero DESC" ]} + {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_ddt", "required": 1, "values": "query=SELECT dt_ddt.id, CONCAT(\'nr. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($idanagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
'; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index b44585ff1..24f4f6e48 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -63,12 +63,10 @@ if ($dir == 'uscita') { ?> {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "ajax-source": "clienti", "value": "$idanagrafica$" ]} {[ "type": "select", "label": "", "name": "idanagrafica", "required": 1, "ajax-source": "fornitori", "value": "$idanagrafica$" ]}
@@ -83,7 +81,6 @@ if ($dir == 'uscita') { {[ "type": "select", "label": "", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
fetchNum($query2); @@ -192,14 +187,12 @@ if (($n2 <= 0 && $records[0]['stato'] == 'Emessa') || $differenza != 0) { ?> Aggiungi prima nota...

Riapri fattura...
@@ -207,7 +200,7 @@ if ($records[0]['stato'] == 'Pagato') {
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"fetchArray($qi); $ni = sizeof($rsi); - //Se non trovo niente provo a vedere se ce ne sono per clienti terzi + // Se non trovo niente provo a vedere se ce ne sono per clienti terzi if ($ni == 0) { - //Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti (clienti terzi) + // Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti (clienti terzi) $qi = 'SELECT id FROM in_interventi WHERE idclientefinale='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)"; $rsi = $dbo->fetchArray($qi); $ni = sizeof($rsi); } - //Lettura preventivi accettati, in attesa di conferma o in lavorazione + // Lettura preventivi accettati, in attesa di conferma o in lavorazione $qp = 'SELECT id FROM co_preventivi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')"; $rsp = $dbo->fetchArray($qp); $np = sizeof($rsp); - //Lettura contratti accettati, in attesa di conferma o in lavorazione + // Lettura contratti accettati, in attesa di conferma o in lavorazione $qc = 'SELECT id FROM co_contratti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)'; $rsc = $dbo->fetchArray($qc); $nc = sizeof($rsc); - //Lettura ddt - $qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']); + // Lettura ddt + $qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione=\'Bozza\') AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; $rsd = $dbo->fetchArray($qd); $nd = sizeof($rsd); + if ($ni > 0) { ?> Intervento Intervento 0) { ?> Preventivo Preventivo 0) { ?> Contratto Contratto Ddt'; } + } + + if ($dbo->fetchNum('SELECT * FROM mg_articoli WHERE qta > 0')) { + echo ' + Articolo'; } ?> - Articolo + Riga generica
@@ -364,12 +356,10 @@ if ($dir == 'entrata') { ?> Stampa fattura Stampa fattura getDatePattern()); + $data = date(Translator::getFormatter()->getDatePattern()); } } diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php index 4f1f29951..ff46fe6a5 100644 --- a/modules/interventi/ajax_costi.php +++ b/modules/interventi/ajax_costi.php @@ -45,7 +45,7 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') { - '.tr('Sconto totale', [], ['upper' => true]).' + '.tr('Sconto incondizionato', [], ['upper' => true]).' - - '.Translator::numberToLocale(-$costi['sconto_globale']).' € @@ -60,7 +60,7 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') { '; } -// Lettura dello sconto globale +// Lettura dello sconto incondizionato $rss = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_record)); $sconto = $rss[0]['sconto_globale']; $tipo_sconto = $rss[0]['tipo_sconto_globale']; @@ -70,7 +70,7 @@ echo '
- {[ "type": "number", "label": "'.tr('Sconto globale').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]} + {[ "type": "number", "label": "'.tr('Sconto incondizionato').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
'; diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index fca39709a..842b1e2e5 100644 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -234,7 +234,7 @@ function get_costi_intervento($id_intervento) $result['altro_scontato'], ]); - // Calcolo dello sconto globale + // Calcolo dello sconto incondizionato $sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_intervento))[0]; $result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $result['totale_scontato'] * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale']; $result['sconto_globale'] = round($result['sconto_globale'], $decimals); diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index 62b224a56..0bbaced77 100644 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -64,7 +64,7 @@ if ($module['name'] == 'Ordini cliente') {
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]} + {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index ba03dbbdb..9c936ea51 100644 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -97,7 +97,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]} + {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
diff --git a/src/Filter.php b/src/Filter.php index 055a2b117..ef04ab5a2 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -114,13 +114,13 @@ class Filter $output = trim(self::getPurifier()->purify($input)); if (!empty($output)) { - if (Translator::getLocaleFormatter()->isNumber($output)) { + if (Translator::getFormatter()->isFormattedNumber($output)) { $output = Translator::numberToEnglish($output); - } elseif (Translator::getLocaleFormatter()->isTimestamp($output)) { + } elseif (Translator::getFormatter()->isFormattedTimestamp($output)) { $output = Translator::timestampToEnglish($output); - } elseif (Translator::getLocaleFormatter()->isDate($output)) { + } elseif (Translator::getFormatter()->isFormattedDate($output)) { $output = Translator::dateToEnglish($output); - } elseif (Translator::getLocaleFormatter()->isTime($output)) { + } elseif (Translator::getFormatter()->isFormattedTime($output)) { $output = Translator::timeToEnglish($output); } } diff --git a/src/HTMLBuilder/Handler/DateHandler.php b/src/HTMLBuilder/Handler/DateHandler.php index fc5304c77..0850c9f77 100644 --- a/src/HTMLBuilder/Handler/DateHandler.php +++ b/src/HTMLBuilder/Handler/DateHandler.php @@ -11,33 +11,25 @@ class DateHandler implements HandlerInterface { // Impostazione alla data corrente se il contenuto corrisponde a "now" if ($values['value'] == '-now-') { - $values['value'] = date(\Translator::getEnglishFormatter()->getTimestampPattern()); + $values['value'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); } if ($values['max-date'] == '-now-') { - $values['max-date'] = date(\Translator::getEnglishFormatter()->getTimestampPattern()); + $values['max-date'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); } if ($values['min-date'] == '-now-') { - $values['min-date'] = date(\Translator::getEnglishFormatter()->getTimestampPattern()); + $values['min-date'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); } - if (\Translator::getEnglishFormatter()->isTimestamp($values['value']) && $values['type'] == 'timestamp') { + if ($values['type'] == 'timestamp') { $values['value'] = \Translator::timestampToLocale($values['value']); - } elseif (\Translator::getEnglishFormatter()->isDate($values['value']) && $values['type'] == 'date') { + } elseif ($values['type'] == 'date') { $values['value'] = \Translator::dateToLocale($values['value']); - } elseif (\Translator::getEnglishFormatter()->isTime($values['value']) && $values['type'] == 'time') { + } elseif ($values['type'] == 'time') { $values['value'] = \Translator::timeToLocale($values['value']); } - $resetValues = [ - \Translator::timestampToLocale('0000-00-00 00:00:00'), - \Translator::dateToLocale('0000-00-00'), - \Translator::timeToLocale('00:00:00'), - ]; - - $values['value'] = in_array($values['value'], $resetValues) ? '' : $values['value']; - $result = $this->{$values['type']}($values, $extras); $values['type'] = 'text'; @@ -55,8 +47,6 @@ class DateHandler implements HandlerInterface $values['class'][] = 'text-center'; $values['class'][] = 'timestamp-picker'; $values['class'][] = 'timestamp-mask'; - - $values['value'] = (\Translator::getLocaleFormatter()->isTimestamp($values['value'])) ? $values['value'] : ''; } protected function date(&$values, &$extras) @@ -64,15 +54,11 @@ class DateHandler implements HandlerInterface $values['class'][] = 'text-center'; $values['class'][] = 'datepicker'; $values['class'][] = 'date-mask'; - - $values['value'] = (\Translator::getLocaleFormatter()->isDate($values['value'])) ? $values['value'] : ''; } protected function time(&$values, &$extras) { $values['class'][] = 'text-center'; $values['class'][] = 'timepicker'; - - $values['value'] = (\Translator::getLocaleFormatter()->isTime($values['value'])) ? $values['value'] : ''; } } diff --git a/src/HTMLBuilder/Handler/DefaultHandler.php b/src/HTMLBuilder/Handler/DefaultHandler.php index 81ef9b407..db134d54d 100644 --- a/src/HTMLBuilder/Handler/DefaultHandler.php +++ b/src/HTMLBuilder/Handler/DefaultHandler.php @@ -75,7 +75,7 @@ class DefaultHandler implements HandlerInterface } } - $values['value'] = (\Translator::getEnglishFormatter()->isNumber($values['value'])) ? \Translator::numberToLocale($values['value'], $decimals) : $values['value']; + $values['value'] = (\Translator::getFormatter()->isStandardNumber($values['value'])) ? \Translator::numberToLocale($values['value'], $decimals) : $values['value']; $values['type'] = 'text'; diff --git a/src/Intl/Formatter.php b/src/Intl/Formatter.php index a34f92869..da82851b2 100644 --- a/src/Intl/Formatter.php +++ b/src/Intl/Formatter.php @@ -3,8 +3,7 @@ namespace Intl; use DateTime; -use UnexpectedValueException; -use Exception; +use NumberFormatter; /** * Classe per gestire la formattazione di date e numeri in convenzioni differenti. @@ -13,8 +12,14 @@ use Exception; */ class Formatter { - /** @var array Separatori per la formattazione dei numeri */ - protected $numberSeparators; + protected static $standards = [ + 'timestamp' => 'Y-m-d H:i:s', + 'date' => 'Y-m-d', + 'time' => 'H:i:s', + ]; + + /** @var NumberFormatter Oggetto dedicato alla formattazione dei numeri */ + protected $numberFormatter; /** @var string Pattern per le date */ protected $datePattern; @@ -23,135 +28,64 @@ class Formatter /** @var string Pattern per i timestamp */ protected $timestampPattern; - public function __construct($numberSeparators = [], $date = null, $time = null, $timestamp = null) + public function __construct($locale, $timestamp = null, $date = null, $time = null) { - $this->setNumberSeparators($numberSeparators); + $this->numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); + + $this->setTimestampPattern($timestamp); $this->setDatePattern($date); $this->setTimePattern($time); - - $this->setTimestampPattern($timestamp); } /** - * Imposta il formato dei numeri. - * - * @param string $values - */ - protected function setNumberSeparators($values) - { - $decimals = empty($values['decimals']) ? '.' : $values['decimals']; - $thousands = !isset($values['thousands']) ? '' : $values['thousands']; - - if ($decimals == $thousands) { - throw new Exception('Bad separators'); - } - - $this->numberSeparators = [ - 'decimals' => $decimals, - 'thousands' => $thousands, - ]; - } - - /** - * Restituisce i separatori utilizzati per la formattazione. + * Restituisce gli elementi di separazione secondo la formattazione in utilizzo. * * @return array */ - public function getNumberSeparators() + public function getStandardFormats() { - return $this->numberSeparators; + return static::$standards; } + // Gestione della conversione dei numeri + /** - * Imposta il formato della data. + * Converte un numero da una formattazione all'altra. * * @param string $value - */ - protected function setDatePattern($value) - { - $value = empty($value) ? 'Y-m-d' : $value; - - if (is_array($value)) { - $pattern = implode($value['separator'], $value['order']); - $pattern = str_replace(['day', 'month', 'year'], ['d', 'm', 'Y'], $pattern); - } else { - $pattern = $value; - } - - $this->datePattern = $pattern; - } - - /** - * Restituisce il formato della data. * * @return string */ - public function getDatePattern() + public function formatNumber($value, $decimals = null) { - return $this->datePattern; - } + $value = trim($value); - /** - * Imposta il formato dell'orario. - * - * @param string $value - */ - protected function setTimePattern($value) - { - $value = empty($value) ? 'H:i:s' : $value; - - if (is_array($value)) { - $pattern = implode($value['separator'], $value['order']); - $pattern = str_replace(['hours', 'minutes', 'seconds'], ['H', 'i', 's'], $pattern); - } else { - $pattern = $value; + if (!empty($decimals)) { + $original = $this->numberFormatter->getAttribute(NumberFormatter::FRACTION_DIGITS); + $this->numberFormatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $decimals); } - $this->timePattern = $pattern; + $result = $this->numberFormatter->format($value); + + if (!empty($decimals)) { + $this->numberFormatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $original); + } + + return $result; } /** - * Restituisce il formato dell'orario. + * Converte un numero da una formattazione all'altra. + * + * @param string $value * * @return string */ - public function getTimePattern() + public function parseNumber($value) { - return $this->timePattern; - } - - /** - * Imposta il formato del timestamp. - * - * @param string $value - */ - protected function setTimestampPattern($value) - { - $value = empty($value) ? [ - 'order' => ['date', 'time'], - 'separator' => ' ', - ] : $value; - - if (is_array($value)) { - $pattern = implode($value['separator'], $value['order']); - $pattern = str_replace(['date', 'time'], [$this->getDatePattern(), $this->getTimePattern()], $pattern); - } else { - $pattern = $value; - } - - $this->timestampPattern = $pattern; - } - - /** - * Restituisce il formato del timestamp. - * - * @return string - */ - public function getTimestampPattern() - { - return $this->timestampPattern; + return $this->numberFormatter->parse($value); } /** @@ -161,15 +95,80 @@ class Formatter * * @return bool */ - public function isNumber($value) + public function isStandardNumber($value) { - try { - $this->toNumberObject($value); - } catch (Exception $e) { - return false; - } + $result = $this->formatNumber($value); - return true; + return is_numeric($value) && !empty($result); + } + + /** + * Controlla se l'elemento indicato è un numero. + * + * @param string $value + * + * @return bool + */ + public function isFormattedNumber($value) + { + $result = $this->parseNumber($value); + + return !empty($result); + } + + /** + * Imposta la precisione di default per i numeri da formattare. + * + * @param int $decimals + */ + public function setPrecision($decimals) + { + $this->numberFormatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $decimals); + } + + /** + * Restituisce gli elementi di separazione secondo la formattazione in utilizzo. + * + * @return array + */ + public function getNumberSeparators() + { + return [ + 'decimals' => $this->numberFormatter->getSymbol(NumberFormatter::DECIMAL_SEPARATOR_SYMBOL), + 'thousands' => $this->numberFormatter->getSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL), + ]; + } + + // Gestione della conversione dei timestamp + + /** + * Converte un timestamp da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function formatTimestamp($value) + { + $object = DateTime::createFromFormat(static::$standards['timestamp'], $value); + $result = is_object($object) ? $object->format($this->getTimestampPattern()) : false; + + return $result; + } + + /** + * Converte un timestamp da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function parseTimestamp($value) + { + $object = DateTime::createFromFormat($this->getTimestampPattern(), $value); + $result = is_object($object) ? $object->format(static::$standards['timestamp']) : false; + + return $result; } /** @@ -179,15 +178,81 @@ class Formatter * * @return bool */ - public function isTimestamp($value) + public function isStandardTimestamp($value) { - try { - $this->toTimestampObject($value); - } catch (Exception $e) { - return false; - } + $result = $this->formatTimestamp($value); - return true; + return !empty($result); + } + + /** + * Controlla se l'elemento indicato è un timestamp. + * + * @param string $value + * + * @return bool + */ + public function isFormattedTimestamp($value) + { + $result = $this->parseTimestamp($value); + + return !empty($result); + } + + /** + * Restituisce il formato del timestamp. + * + * @return string + */ + public function getTimestampPattern($type = null) + { + return $this->timestampPattern; + } + + /** + * Imposta il formato del timestamp. + * + * @return string + */ + public function setTimestampPattern($pattern) + { + return $this->timestampPattern = $pattern; + } + + // Gestione della conversione delle date + + /** + * Converte una data da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function formatDate($value) + { + $object = DateTime::createFromFormat(static::$standards['date'], $value); + + // Fallback per la gestione dei timestamp + $object = !is_object($object) ? DateTime::createFromFormat(static::$standards['timestamp'], $value) : $object; + + $result = is_object($object) ? $object->format($this->getDatePattern()) : false; + + return $result; + } + + /** + * Converte una data da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function parseDate($value) + { + $object = DateTime::createFromFormat($this->getDatePattern(), $value); + $result = is_object($object) ? $object->format(static::$standards['date']) : false; + + return $result; } /** @@ -197,15 +262,81 @@ class Formatter * * @return bool */ - public function isDate($value) + public function isStandardDate($value) { - try { - $this->toDateObject($value); - } catch (Exception $e) { - return false; - } + $result = $this->formatDate($value); - return true; + return !empty($result); + } + + /** + * Controlla se l'elemento indicato è una data. + * + * @param string $value + * + * @return bool + */ + public function isFormattedDate($value) + { + $result = $this->parseDate($value); + + return !empty($result); + } + + /** + * Restituisce il formato del timestamp. + * + * @return string + */ + public function getDatePattern($type = null) + { + return $this->timestampPattern; + } + + /** + * Imposta il formato del timestamp. + * + * @return string + */ + public function setDatePattern($pattern) + { + return $this->timestampPattern = $pattern; + } + + // Gestione della conversione degli orarii + + /** + * Converte un orario da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function formatTime($value) + { + $object = DateTime::createFromFormat(static::$standards['time'], $value); + + // Fallback per la gestione dei timestamp + $object = !is_object($object) ? DateTime::createFromFormat(static::$standards['timestamp'], $value) : $object; + + $result = is_object($object) ? $object->format($this->getTimePattern()) : false; + + return $result; + } + + /** + * Converte un orario da una formattazione all'altra. + * + * @param string $value + * + * @return string + */ + public function parseTime($value) + { + $object = DateTime::createFromFormat($this->getTimePattern(), $value); + $result = is_object($object) ? $object->format(static::$standards['time']) : false; + + return $result; } /** @@ -215,260 +346,44 @@ class Formatter * * @return bool */ - public function isTime($value) + public function isStandardTime($value) { - try { - $this->toTimeObject($value); - } catch (Exception $e) { - return false; - } + $result = $this->formatTime($value); - return true; + return !empty($result); } /** - * Converte l'elemento in una rappresentazione numerica. + * Controlla se l'elemento indicato è un orario. * * @param string $value * - * @return array + * @return bool */ - public function toNumberObject($value) + public function isFormattedTime($value) { - $value = trim($value); + $result = $this->parseTime($value); - if (strlen($value) == 0) { - throw new UnexpectedValueException('Format not supported'); - } - - $sign = null; - if ($value[0] == '+' || $value[0] == '-') { - $sign = $value[0]; - $value = trim(substr($value, 1)); - } elseif (!is_numeric($value[0])) { - throw new UnexpectedValueException('Format not supported'); - } - - if (strlen($value) == 0) { - throw new UnexpectedValueException('Format not supported'); - } - - $pieces = explode($this->getNumberSeparators()['decimals'], $value); - if (count($pieces) > 2) { - throw new UnexpectedValueException('Format not supported'); - } - $integer = $pieces[0]; - $decimal = (isset($pieces[1])) ? $pieces[1] : null; - - if (!empty($this->getNumberSeparators()['thousands'])) { - $error = true; - if (floor(strlen($integer) / 4) == substr_count($integer, $this->getNumberSeparators()['thousands'])) { - $values = str_split(strrev($integer), 4); - - foreach ($values as $key => $value) { - if (strlen($value) == 4 && ends_with($value, '.')) { - $values[$key] = substr($value, 0, -1); - } - } - - $integer = strrev(implode($values)); - - $error = substr_count($integer, $this->getNumberSeparators()['thousands']); - } - - if (!empty($error)) { - throw new UnexpectedValueException('Format not supported'); - } - } - - if (!ctype_digit($integer) || (strlen($integer) != strlen((int) $integer)) || (isset($decimal) && !ctype_digit($decimal))) { - throw new UnexpectedValueException('Format not supported'); - } - - return [$sign, $integer, $decimal]; + return !empty($result); } /** - * Converte l'elemento dal formato personalizzato a quello predefinito di PHP. - * - * @param string $value + * Restituisce il formato del orario. * * @return string */ - public function toTimestampObject($value) + public function getTimePattern($type = null) { - $value = trim($value); - - $result = DateTime::createFromFormat($this->getTimestampPattern(), $value); - - if (!is_object($result)) { - throw new UnexpectedValueException('Format not supported'); - } - - return $result; + return $this->orarioPattern; } /** - * Converte l'elemento dal formato personalizzato a quello predefinito di PHP. - * - * @param string $value + * Imposta il formato del orario. * * @return string */ - public function toDateObject($value) + public function setTimePattern($pattern) { - $value = trim($value); - - $result = DateTime::createFromFormat($this->getDatePattern(), $value); - - $result = !is_object($result) ? $this->toTimestampObject($value) : $result; - - if (!is_object($result)) { - throw new UnexpectedValueException('Format not supported'); - } - - return $result; - } - - /** - * Converte l'elemento dal formato personalizzato a quello predefinito di PHP. - * - * @param string $value - * - * @return string - */ - public function toTimeObject($value) - { - $value = trim($value); - - $result = DateTime::createFromFormat($this->getTimePattern(), $value); - - $result = !is_object($result) ? $this->toTimestampObject($value) : $result; - - if (!is_object($result)) { - throw new UnexpectedValueException('Format not supported'); - } - - return $result; - } - - /** - * Converte un numero da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatNumberTo($formatter, $value) - { - $pieces = $this->toNumberObject($value); - - $result = (!empty($pieces[0])) ? $pieces[0] : ''; - - $result .= number_format($pieces[1], 0, '', $formatter->getNumberSeparators()['thousands']); - - if (isset($pieces[2])) { - $result .= $formatter->getNumberSeparators()['decimals'].$pieces[2]; - } - - return $result; - } - - /** - * Converte un timestamp da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatTimestampTo($formatter, $value) - { - $result = $this->toTimestampObject($value); - - return $result->format($formatter->getTimestampPattern()); - } - - /** - * Converte una data da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatDateTo($formatter, $value) - { - $result = $this->toDateObject($value); - - return $result->format($formatter->getDatePattern()); - } - - /** - * Converte un orario da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatTimeTo($formatter, $value) - { - $result = $this->toTimeObject($value); - - return $result->format($formatter->getTimePattern()); - } - - /** - * Converte un numero da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatNumberFrom($formatter, $value) - { - return $formatter->formatNumberTo($this, $value); - } - - /** - * Converte un timestamp da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatTimestampFrom($formatter, $value) - { - return $formatter->formatTimestampTo($this, $value); - } - - /** - * Converte una data da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatDateFrom($formatter, $value) - { - return $formatter->formatDateTo($this, $value); - } - - /** - * Converte un orario da una formattazione all'altra. - * - * @param Formatter $formatter - * @param string $value - * - * @return string - */ - public function formatTimeFrom($formatter, $value) - { - return $formatter->formatTimeTo($this, $value); + return $this->orarioPattern = $pattern; } } diff --git a/src/Permissions.php b/src/Permissions.php index 529d52ff7..ebfb7e92b 100644 --- a/src/Permissions.php +++ b/src/Permissions.php @@ -20,7 +20,7 @@ class Permissions public static function addModule($module) { $id = Modules::getModule($module)['id']; - if (is_int($id) && !in_array($id, self::$permissions)) { + if (!in_array($id, self::$permissions)) { self::$permissions[] = $id; } } diff --git a/src/Translator.php b/src/Translator.php index 8a48b600d..084ec0ac1 100644 --- a/src/Translator.php +++ b/src/Translator.php @@ -8,9 +8,7 @@ class Translator extends Util\Singleton { /** @var Intl\Formatter Oggetto per la conversione di date e numeri nella lingua selezionata */ - protected static $localeFormatter; - /** @var Intl\Formatter Oggetto per la conversione di date e numeri nella formattazione originale */ - protected static $englishFormatter; + protected static $formatter; /** @var Symfony\Component\Translation\Translator Oggetto dedicato alle traduzioni */ protected $translator; @@ -112,11 +110,20 @@ class Translator extends Util\Singleton * * @param string $locale */ - public function setLocale($locale) + public function setLocale($locale, $formatter = []) { if (!empty($locale) && $this->isLocaleAvailable($locale)) { $this->translator->setLocale($locale); $this->locale = $locale; + + self::$formatter = new Intl\Formatter( + $this->locale, + empty($formatter['timestamp']) ? 'd/m/Y H:i' : $formatter['timestamp'], + empty($formatter['date']) ? 'd/m/Y' : $formatter['date'], + empty($formatter['time']) ? 'H:i' : $formatter['time'] + ); + + self::$formatter->setPrecision(Settings::get('Cifre decimali per importi')); } } @@ -168,59 +175,14 @@ class Translator extends Util\Singleton return (string) $result; } - /** - * Genera l'oggetto dedicato alla gestione delle conversioni nella lingua locale. - * - * @param array $formatter - */ - public static function setLocaleFormatter($formatter = []) - { - self::$localeFormatter = new Intl\Formatter( - empty($formatter['numbers']) ? [ - 'decimals' => ',', - 'thousands' => '.', - ] : $formatter['numbers'], - empty($formatter['date']) ? 'd/m/Y' : $formatter['date'], - empty($formatter['time']) ? 'H:i' : $formatter['time'], - empty($formatter['timestamp']) ? null : $formatter['timestamp']); - } - /** * Restituisce il formato locale della data. * * @return Intl\Formatter */ - public static function getLocaleFormatter() + public static function getFormatter() { - if (empty(self::$localeFormatter)) { - self::setLocaleFormatter(); - } - - return self::$localeFormatter; - } - - /** - * Restituisce il formato locale della data. - * - * @return Intl\Formatter - */ - public static function getEnglishFormatter() - { - if (empty(self::$englishFormatter)) { - self::$englishFormatter = new Intl\Formatter(); - } - - return self::$englishFormatter; - } - - /** - * Restituisce il formato locale della data. - * - * @return string - */ - public static function getLocaleDatePattern() - { - return self::getLocaleFormatter()->getDatePattern(); + return self::$formatter; } /** @@ -232,7 +194,7 @@ class Translator extends Util\Singleton */ public static function numberToEnglish($string) { - return floatval(self::getLocaleFormatter()->formatNumberTo(self::getEnglishFormatter(), $string)); + return floatval(self::getFormatter()->parseNumber($string)); } /** @@ -243,17 +205,11 @@ class Translator extends Util\Singleton * * @return string */ - public static function numberToLocale($string, $decimals = true) + public static function numberToLocale($string, $decimals = null) { $string = !isset($string) ? 0 : $string; - if (isset($decimals) && (is_int($decimals) || !empty($decimals))) { - $decimals = is_numeric($decimals) ? $decimals : Settings::get('Cifre decimali per importi'); - - $string = number_format($string, $decimals, self::getEnglishFormatter()->getNumberSeparators()['decimals'], self::getEnglishFormatter()->getNumberSeparators()['thousands']); - } - - return self::getEnglishFormatter()->formatNumberTo(self::getLocaleFormatter(), $string); + return self::getFormatter()->formatNumber($string, $decimals); } /** @@ -265,7 +221,7 @@ class Translator extends Util\Singleton */ public static function dateToEnglish($string) { - return self::getLocaleFormatter()->formatDateTo(self::getEnglishFormatter(), $string); + return self::getFormatter()->parseDate($string); } /** @@ -276,13 +232,9 @@ class Translator extends Util\Singleton * * @return string */ - public static function dateToLocale($string, $fail = null) + public static function dateToLocale($string) { - if (!self::isValid($string)) { - return $fail; - } - - return self::getEnglishFormatter()->formatDateTo(self::getLocaleFormatter(), $string); + return self::getFormatter()->formatDate($string); } /** @@ -294,7 +246,7 @@ class Translator extends Util\Singleton */ public static function timeToEnglish($string) { - return self::getLocaleFormatter()->formatTimeTo(self::getEnglishFormatter(), $string); + return self::getFormatter()->parseTime($string); } /** @@ -305,13 +257,9 @@ class Translator extends Util\Singleton * * @return string */ - public static function timeToLocale($string, $fail = null) + public static function timeToLocale($string) { - if (!self::isValid($string)) { - return $fail; - } - - return self::getEnglishFormatter()->formatTimeTo(self::getLocaleFormatter(), $string); + return self::getFormatter()->formatTime($string); } /** @@ -323,7 +271,7 @@ class Translator extends Util\Singleton */ public static function timestampToEnglish($string) { - return self::getLocaleFormatter()->formatTimestampTo(self::getEnglishFormatter(), $string); + return self::getFormatter()->parseTimestamp($string); } /** @@ -334,24 +282,8 @@ class Translator extends Util\Singleton * * @return string */ - public static function timestampToLocale($string, $fail = null) + public static function timestampToLocale($string) { - if (!self::isValid($string)) { - return $fail; - } - - return self::getEnglishFormatter()->formatTimestampTo(self::getLocaleFormatter(), $string); - } - - /** - * Controlla se una data inserita nella formattazione inglese è valida. - * - * @param string $timestamp - * - * @return bool - */ - protected static function isValid($string) - { - return !in_array($string, ['0000-00-00 00:00:00', '0000-00-00', '00:00:00']); + return self::getFormatter()->formatTimestamp($string); } } diff --git a/update/2_3.sql b/update/2_3.sql index fb16b457a..3919f9353 100644 --- a/update/2_3.sql +++ b/update/2_3.sql @@ -492,19 +492,23 @@ UPDATE `zz_plugins` SET `script` = 'referenti.php' WHERE `zz_plugins`.`name` = ' UPDATE `zz_plugins` SET `script` = 'sedi.php' WHERE `zz_plugins`.`name` = 'Sedi'; -- Aggiornamento dei vari campi per le Viste -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 125; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 113; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 103; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 96; -UPDATE `zz_views` SET `order_by` = 'scadenza' WHERE `zz_views`.`id` = 65; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 55; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 48; -UPDATE `zz_views` SET `order_by` = 'data' WHERE `zz_views`.`id` = 40; -UPDATE `zz_views` SET `order_by` = 'orario_fine' WHERE `zz_views`.`id` = 12; -UPDATE `zz_views` SET `order_by` = 'orario_inizio' WHERE `zz_views`.`id` = 11; -UPDATE `zz_views` SET `search` = '0' WHERE `zz_views`.`id` = 16; -UPDATE `zz_views` SET `search_inside` = 'color_title_Rel.' WHERE `zz_views`.`id` = 6; -UPDATE `zz_views` SET `order_by` = 'data_emissione' WHERE `zz_views`.`id` = 64; +UPDATE `zz_views` SET `order_by` = 'data' WHERE +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Ddt di acquisto')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'MyImpianti')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini cliente')) OR +(`name` = 'Data' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Ddt di vendita')); + +UPDATE `zz_views` SET `order_by` = 'scadenza' WHERE (`name` = 'Data scadenza' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario')); + +UPDATE `zz_views` SET `order_by` = 'orario_fine' WHERE (`name` = 'Orario fine' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi')); +UPDATE `zz_views` SET `order_by` = 'orario_inizio' WHERE (`name` = 'Orario inizio' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Interventi')); + +UPDATE `zz_views` SET `search_inside` = 'color_title_Rel' WHERE (`name` = 'color_Rel.' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Anagrafiche')); + +UPDATE `zz_views` SET `search` = '0' WHERE `name` = '_print_'; -- Aggiornamento icona di default per i moduli senza icona specifica UPDATE `zz_modules` SET `icon`='fa fa-angle-right' WHERE `icon`='fa fa-external-link';