Aggiornamento nella gestione delle conversioni

Miglioramento della gestione delle conversioni di numeri e date, ora semplificate in una singola classe.
Bugfix distribuito e rinominazione dello sconto globale in sconto incondizionato (a livello di label).
This commit is contained in:
Thomas Zilio 2017-09-19 16:20:44 +02:00
parent 941bc8d26d
commit 667425df8b
25 changed files with 383 additions and 540 deletions

View File

@ -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);
}
}

View File

@ -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();
}

View File

@ -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']).'\',

View File

@ -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];
}
}

View File

@ -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);
}
})
});
</script>';

View File

@ -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);
}
})
});
</script>';

View File

@ -52,7 +52,6 @@ switch (filter('op')) {
'_TYPE_' => 'categoria',
]);
} else {
$_POST['backto'] = 'record-edit';
$_SESSION['errors'][] = tr('Esistono ancora alcuni articoli sotto questa categoria!');
}

View File

@ -77,6 +77,17 @@ include_once __DIR__.'/../../core.php';
});
</script>
<?php
$res = $dbo->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 '
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a>
<i class="fa fa-trash"></i> '.tr('Elimina').'
</a>';
} else {
echo '
<div class="alert alert-danger">
<p>'.tr('Esistono ancora alcuni articoli sotto questa categoria!').'</p>
</div>';
}

View File

@ -105,7 +105,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo del contratto'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo del contratto'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($records[0]['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}

View File

@ -26,7 +26,7 @@ if ($get['op'] == 'add_ordineservizio') {
// Ciclo fra le voci in arrivo dal form
foreach ($post['voce'] as $data_scadenza => $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) {

View File

@ -109,7 +109,7 @@ if ($dir == 'uscita') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
</div>
</div>

View File

@ -19,7 +19,7 @@ $idanagrafica = $record[0]['idanagrafica'];
echo '
<div class="row">
<div class="col-md-6">
{[ "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" ]}
</div>
</div>';

View File

@ -63,12 +63,10 @@ if ($dir == 'uscita') {
?>
{[ "type": "select", "label": "<?php echo tr('Cliente'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "clienti", "value": "$idanagrafica$" ]}
<?php
} else {
?>
{[ "type": "select", "label": "<?php echo tr('Fornitore'); ?>", "name": "idanagrafica", "required": 1, "ajax-source": "fornitori", "value": "$idanagrafica$" ]}
<?php
}
?>
</div>
@ -83,7 +81,6 @@ if ($dir == 'uscita') {
{[ "type": "select", "label": "<?php echo tr('Agente di riferimento'); ?>", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
</div>
<?php
} ?>
<?php
@ -159,7 +156,6 @@ if ($tipodoc == 'Fattura accompagnatoria di vendita') {
</div>
<?php
}
if ($dir == 'uscita') {
@ -172,14 +168,13 @@ if ($dir == 'uscita') {
</div>
</div>
<?php
}
?>
<div class="pull-right">
<?php
//Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
// Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
$query2 = 'SELECT id FROM co_movimenti WHERE iddocumento='.$id_record.' AND primanota=1';
$n2 = $dbo->fetchNum($query2);
@ -192,14 +187,12 @@ if (($n2 <= 0 && $records[0]['stato'] == 'Emessa') || $differenza != 0) {
?>
<a class="btn btn-sm btn-primary" href="javascript:;" onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir ?>/add.php?id_module=<?php echo Modules::getModule('Prima nota')['id'] ?>&iddocumento=<?php echo $id_record ?>&dir=<?php echo $dir ?>', 1 );"><i class="fa fa-euro"></i> Aggiungi prima nota...</a><br><br>
<?php
}
if ($records[0]['stato'] == 'Pagato') {
?>
<a class="btn btn-sm btn-primary" href="javascript:;" onclick="if( confirm('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?') ){ $.post( '<?php echo $rootdir ?>/editor.php?id_module=<?php echo Modules::getModule($name)['id'] ?>&id_record=<?php echo $id_record ?>', { id_module: '<?php echo Modules::getModule($name)['id'] ?>', id_record: '<?php echo $id_record ?>', op: 'reopen' }, function(){ location.href='<?php echo $rootdir ?>/editor.php?id_module=<?php echo Modules::getModule($name)['id'] ?>&id_record=<?php echo $id_record ?>'; } ); }" title="Aggiungi prima nota"><i class="fa fa-folder-open"></i> Riapri fattura...</a>
<?php
}
?>
</div>
@ -207,7 +200,7 @@ if ($records[0]['stato'] == 'Pagato') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($records[0]['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}
@ -250,67 +243,62 @@ if ($records[0]['stato'] == 'Emessa') {
<?php
if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
if ($dir == 'entrata') {
//Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti
// Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti
$qi = 'SELECT id FROM in_interventi WHERE idanagrafica='.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);
//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) {
?>
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_intervento.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> Intervento</a>
<?php
} else {
?>
<a class="btn btn-sm btn-primary tip" title="<?php echo tr('Nessun Intervento'); ?>" style="opacity:0.5;cursor:default;" ><i class="fa fa-plus"></i> Intervento</a>
<?php
}
if ($np > 0) {
?>
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_preventivo.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> Preventivo</a>
<?php
} else {
?>
<a class="btn btn-sm btn-primary tip" title="<?php echo tr('Nessun Preventivo'); ?>" style="opacity:0.5;cursor:default;" ><i class="fa fa-plus"></i> Preventivo</a>
<?php
}
if ($nc > 0) {
?>
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_contratto.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> Contratto</a>
<?php
} else {
?>
<a class="btn btn-sm btn-primary tip" title="<?php echo tr('Nessun Contratto'); ?>" style="opacity:0.5;cursor:default;" ><i class="fa fa-plus"></i> Contratto</a>
<?php
}
$numero_doc = ($records[0]['numero_esterno'] != '') ? $records[0]['numero_esterno'] : $records[0]['numero'];
@ -322,12 +310,16 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
echo '
<a class="btn btn-sm btn-primary tip" title="Nessun ddt" style="opacity:0.5;cursor:default;"><i class="fa fa-plus"></i> Ddt</a>';
}
}
if ($dbo->fetchNum('SELECT * FROM mg_articoli WHERE qta > 0')) {
echo '
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_articolo.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi articolo" data-target="#bs-popup"><i class="fa fa-plus"></i> Articolo</a>';
} ?>
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_articolo.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi articolo" data-target="#bs-popup"><i class="fa fa-plus"></i> Articolo</a>
<a class="btn btn-sm btn-primary" data-href="<?php echo $rootdir ?>/modules/fatture/add_riga.php?id_module=<?php echo $id_module ?>&id_record=<?php echo $id_record ?>" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup"><i class="fa fa-plus"></i> Riga generica</a>
<?php
}
?>
</div>
@ -364,12 +356,10 @@ if ($dir == 'entrata') {
?>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir ?>/pdfgen.php?ptype=fatture_accompagnatorie&iddocumento=<?php echo $id_record ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<?php
} else {
?>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir ?>/pdfgen.php?ptype=fatture&iddocumento=<?php echo $id_record ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<?php
}
}
}

View File

@ -79,7 +79,7 @@ if (empty($data)) {
if (null !== filter('data')) {
$data = filter('data');
} else {
$data = date(Translator::getLocaleFormatter()->getDatePattern());
$data = date(Translator::getFormatter()->getDatePattern());
}
}

View File

@ -45,7 +45,7 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
</tr>
<tr>
<th>'.tr('Sconto totale', [], ['upper' => true]).'</th>
<th>'.tr('Sconto incondizionato', [], ['upper' => true]).'</th>
<td class="text-right">-</td>
<td class="text-right">-</td>
<td class="text-right">'.Translator::numberToLocale(-$costi['sconto_globale']).' &euro;</td>
@ -60,7 +60,7 @@ if (Auth::admin() || $_SESSION['gruppo'] != 'Tecnici') {
</table>';
}
// 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 '
<!-- SCONTO -->
<div class="row">
<div class="col-md-4 pull-right">
{[ "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.'" ]}
</div>
</div>';

View File

@ -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);

View File

@ -64,7 +64,7 @@ if ($module['name'] == 'Ordini cliente') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
</div>
</div>

View File

@ -97,7 +97,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
</div>
</div>

View File

@ -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);
}
}

View File

@ -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'] : '';
}
}

View File

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

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

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