From bc81339f185d4d489f6f136db81b84558bfe5c04 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Sat, 14 Mar 2020 12:21:14 +0100 Subject: [PATCH] =?UTF-8?q?Correzione=20widget=20Attivit=C3=A0=20da=20pian?= =?UTF-8?q?ificare=20e=20da=20programmare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spostamento delle funzioni deprecate. --- lib/common.php | 195 ------------------ lib/deprecated.php | 195 ++++++++++++++++++ modules/backups/init.php | 0 modules/interventi/src/Intervento.php | 5 + ...nti.pianificazionedashboard.interventi.php | 89 -------- .../widgets/interventi_da_pianificare.php | 102 +++++++-- .../widgets/interventi_da_programmare.php | 32 +++ templates/barcode/footer.php | 0 templates/barcode/header.php | 0 update/2_4_14.sql | 4 + 10 files changed, 318 insertions(+), 304 deletions(-) mode change 100644 => 100755 modules/backups/init.php delete mode 100755 modules/interventi/widgets/interventi.pianificazionedashboard.interventi.php create mode 100755 modules/interventi/widgets/interventi_da_programmare.php mode change 100644 => 100755 templates/barcode/footer.php mode change 100644 => 100755 templates/barcode/header.php diff --git a/lib/common.php b/lib/common.php index 212e0cb48..960832bef 100755 --- a/lib/common.php +++ b/lib/common.php @@ -43,71 +43,6 @@ function sum($first, $second = null, $decimals = 4) return floatval($result); } -/** - * @param $field - * @param $id_riga - * @param $old_qta - * @param $new_qta - * @param $dir - * - * @throws Exception - * - * @return bool - * - * @deprecated - */ -function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir) -{ - $dbo = database(); - - $new_qta = abs($new_qta); - $old_qta = abs($old_qta); - - if ($old_qta >= $new_qta) { - // Controllo sulla possibilità di rimuovere i seriali (se non utilizzati da documenti di vendita) - if ($dir == 'uscita' && $new_qta < count(seriali_non_rimuovibili($field, $id_riga, $dir))) { - return false; - } else { - // Controllo sul numero di seriali effettivi da rimuovere - $count = $dbo->fetchArray('SELECT COUNT(*) AS tot FROM mg_prodotti WHERE '.$field.'='.prepare($id_riga))[0]['tot']; - if ($new_qta < $count) { - $deletes = $dbo->fetchArray("SELECT id FROM mg_prodotti WHERE serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata' AND ".$field.'!='.prepare($id_riga).') AND '.$field.'='.prepare($id_riga).' ORDER BY serial DESC LIMIT '.abs($count - $new_qta)); - - // Rimozione - foreach ($deletes as $delete) { - $dbo->query('DELETE FROM mg_prodotti WHERE id = '.prepare($delete['id'])); - } - } - } - } - - return true; -} - -/** - * Individua i seriali non rimuovibili poichè utilizzati in documenti rilasciati. - * - * @param string $field - * @param int $id_riga - * @param string $dir - * - * @return array - * - * @deprecated - */ -function seriali_non_rimuovibili($field, $id_riga, $dir) -{ - $dbo = database(); - - $results = []; - - if ($dir == 'uscita') { - $results = $dbo->fetchArray("SELECT serial FROM mg_prodotti WHERE serial IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata') AND ".$field.'='.prepare($id_riga)); - } - - return $results; -} - /** * Calcola gli sconti in modo automatico. * @@ -140,136 +75,6 @@ function calcola_sconto($data) return $result; } -/** - * Restistuisce le informazioni sull'eventuale riferimento ai documenti. - * - * @param $info - * @param $dir - * @param array $ignore - * - * @deprecated - * - * @throws Exception - * - * @return array - */ -function doc_references($info, $dir, $ignore = []) -{ - $dbo = database(); - - // Rimozione valori da non controllare - foreach ($ignore as $field) { - if (isset($info[$field])) { - unset($info[$field]); - } - } - - $module = null; - $id = null; - - // DDT - if (!empty($info['idddt'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($info['idddt'])); - - $module = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; - $id = $info['idddt']; - - $document = tr('Ddt'); - } - - // Ordine - elseif (!empty($info['idordine'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($info['idordine'])); - - $module = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; - $id = $info['idordine']; - - $document = tr('Ordine'); - } - - // Preventivo - elseif (!empty($info['idpreventivo'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($info['idpreventivo'])); - - $module = 'Preventivi'; - $id = $info['idpreventivo']; - - $document = tr('Preventivo'); - } - - // Contratto - elseif (!empty($info['idcontratto'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($info['idcontratto'])); - - $module = 'Contratti'; - $id = $info['idcontratto']; - - $document = tr('Contratto'); - } - - // Intervento - elseif (!empty($info['idintervento'])) { - $data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($info['idintervento'])); - - $module = 'Interventi'; - $id = $info['idintervento']; - - $document = tr('Intervento'); - } - - // Testo relativo - if (!empty($module) && !empty($id)) { - $document = Stringy\Stringy::create($document)->toLowerCase(); - - if (!empty($data)) { - $description = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ - '_DOC_' => $document, - '_NUM_' => $data[0]['numero'], - '_DATE_' => Translator::dateToLocale($data[0]['data']), - ]); - } else { - $description = tr('_DOC_ di riferimento _ID_ eliminato', [ - '_DOC_' => $document->upperCaseFirst(), - '_ID_' => $id, - ]); - } - - return [ - 'module' => $module, - 'id' => $id, - 'description' => $description, - ]; - } - - return []; -} - -/** - * Restituisce i mesi tradotti nella lingua corrente. - * Da sostituire con il relativo corretto utilizzo delle date PHP. - * - * @deprecated - * - * @return array - */ -function months() -{ - return [ - 1 => tr('Gennaio'), - 2 => tr('Febbraio'), - 3 => tr('Marzo'), - 4 => tr('Aprile'), - 5 => tr('Maggio'), - 6 => tr('Giugno'), - 7 => tr('Luglio'), - 8 => tr('Agosto'), - 9 => tr('Settembre'), - 10 => tr('Ottobre'), - 11 => tr('Novembre'), - 12 => tr('Dicembre'), - ]; -} - /** * Individua il valore della colonna order per i nuovi elementi di una tabella. * diff --git a/lib/deprecated.php b/lib/deprecated.php index 4fc4fbfe0..70b105b4a 100755 --- a/lib/deprecated.php +++ b/lib/deprecated.php @@ -188,3 +188,198 @@ function datediff($interval, $datefrom, $dateto, $using_timestamps = false) return $datediff; } + +/** + * @param $field + * @param $id_riga + * @param $old_qta + * @param $new_qta + * @param $dir + * + * @throws Exception + * + * @return bool + * + * @deprecated + */ +function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir) +{ + $dbo = database(); + + $new_qta = abs($new_qta); + $old_qta = abs($old_qta); + + if ($old_qta >= $new_qta) { + // Controllo sulla possibilità di rimuovere i seriali (se non utilizzati da documenti di vendita) + if ($dir == 'uscita' && $new_qta < count(seriali_non_rimuovibili($field, $id_riga, $dir))) { + return false; + } else { + // Controllo sul numero di seriali effettivi da rimuovere + $count = $dbo->fetchArray('SELECT COUNT(*) AS tot FROM mg_prodotti WHERE '.$field.'='.prepare($id_riga))[0]['tot']; + if ($new_qta < $count) { + $deletes = $dbo->fetchArray("SELECT id FROM mg_prodotti WHERE serial NOT IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata' AND ".$field.'!='.prepare($id_riga).') AND '.$field.'='.prepare($id_riga).' ORDER BY serial DESC LIMIT '.abs($count - $new_qta)); + + // Rimozione + foreach ($deletes as $delete) { + $dbo->query('DELETE FROM mg_prodotti WHERE id = '.prepare($delete['id'])); + } + } + } + } + + return true; +} + +/** + * Individua i seriali non rimuovibili poichè utilizzati in documenti rilasciati. + * + * @param string $field + * @param int $id_riga + * @param string $dir + * + * @return array + * + * @deprecated + */ +function seriali_non_rimuovibili($field, $id_riga, $dir) +{ + $dbo = database(); + + $results = []; + + if ($dir == 'uscita') { + $results = $dbo->fetchArray("SELECT serial FROM mg_prodotti WHERE serial IN (SELECT serial FROM mg_prodotti WHERE dir = 'entrata') AND ".$field.'='.prepare($id_riga)); + } + + return $results; +} + +/** + * Restistuisce le informazioni sull'eventuale riferimento ai documenti. + * + * @param $info + * @param $dir + * @param array $ignore + * + * @deprecated + * + * @throws Exception + * + * @return array + */ +function doc_references($info, $dir, $ignore = []) +{ + $dbo = database(); + + // Rimozione valori da non controllare + foreach ($ignore as $field) { + if (isset($info[$field])) { + unset($info[$field]); + } + } + + $module = null; + $id = null; + + // DDT + if (!empty($info['idddt'])) { + $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($info['idddt'])); + + $module = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; + $id = $info['idddt']; + + $document = tr('Ddt'); + } + + // Ordine + elseif (!empty($info['idordine'])) { + $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($info['idordine'])); + + $module = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; + $id = $info['idordine']; + + $document = tr('Ordine'); + } + + // Preventivo + elseif (!empty($info['idpreventivo'])) { + $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($info['idpreventivo'])); + + $module = 'Preventivi'; + $id = $info['idpreventivo']; + + $document = tr('Preventivo'); + } + + // Contratto + elseif (!empty($info['idcontratto'])) { + $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($info['idcontratto'])); + + $module = 'Contratti'; + $id = $info['idcontratto']; + + $document = tr('Contratto'); + } + + // Intervento + elseif (!empty($info['idintervento'])) { + $data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($info['idintervento'])); + + $module = 'Interventi'; + $id = $info['idintervento']; + + $document = tr('Intervento'); + } + + // Testo relativo + if (!empty($module) && !empty($id)) { + $document = Stringy\Stringy::create($document)->toLowerCase(); + + if (!empty($data)) { + $description = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $document, + '_NUM_' => $data[0]['numero'], + '_DATE_' => Translator::dateToLocale($data[0]['data']), + ]); + } else { + $description = tr('_DOC_ di riferimento _ID_ eliminato', [ + '_DOC_' => $document->upperCaseFirst(), + '_ID_' => $id, + ]); + } + + return [ + 'module' => $module, + 'id' => $id, + 'description' => $description, + ]; + } + + return []; +} + +/** + * Restituisce i mesi tradotti nella lingua corrente. + * Da sostituire con il relativo corretto utilizzo delle date PHP. + * + * @deprecated + * + * @return array + */ +function months() +{ + return [ + 1 => tr('Gennaio'), + 2 => tr('Febbraio'), + 3 => tr('Marzo'), + 4 => tr('Aprile'), + 5 => tr('Maggio'), + 6 => tr('Giugno'), + 7 => tr('Luglio'), + 8 => tr('Agosto'), + 9 => tr('Settembre'), + 10 => tr('Ottobre'), + 11 => tr('Novembre'), + 12 => tr('Dicembre'), + ]; +} diff --git a/modules/backups/init.php b/modules/backups/init.php old mode 100644 new mode 100755 diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php index 0bf0e3d4e..2dfcc8a5a 100755 --- a/modules/interventi/src/Intervento.php +++ b/modules/interventi/src/Intervento.php @@ -21,6 +21,11 @@ class Intervento extends Document protected $info = []; + protected $dates = [ + 'data_richiesta', + 'data_scadenza', + ]; + /** * Crea un nuovo intervento. * diff --git a/modules/interventi/widgets/interventi.pianificazionedashboard.interventi.php b/modules/interventi/widgets/interventi.pianificazionedashboard.interventi.php deleted file mode 100755 index c212c73c8..000000000 --- a/modules/interventi/widgets/interventi.pianificazionedashboard.interventi.php +++ /dev/null @@ -1,89 +0,0 @@ -fetchArray($qp); -$n = $dbo->fetchNum($qp); - -if (!empty($n)) { - // Elenco interventi da pianificare - foreach ($rsp as $i => $r) { - // Se cambia il mese ricreo l'intestazione della tabella - if (!isset($rsp[$i - 1]) || $r['mese'] != $rsp[$i - 1]['mese']) { - if ($i == 0) { - $attr = ''; - $class = 'fa-minus-circle'; - } else { - $attr = 'style="display:none;"'; - $class = 'fa-plus-circle'; - } - - echo " -

- - ".$mesi[intval(date('m', strtotime($r['data'])))].' '.date('Y', strtotime($r['data'])).' - -

'; - - echo ' -
- - - - - - - - - - - - - - '; - } - - echo ' - - - - - - - - '; - - echo ' - '; - - echo ' - '; - - if (!isset($rsp[$i + 1]) || $r['mese'] != $rsp[$i + 1]['mese']) { - echo ' - -
'.tr('Codice').''.tr('Cliente').''.tr('Data richiesta').''.tr('Data scadenza').''.tr('Tipo intervento').''.tr('Descrizione').''.tr('Sede').'
'.Modules::link(Modules::get('Interventi')['id'], $r['id'], $r['codice']).''.$r['ragione_sociale'].''.Translator::dateToLocale($r['data_richiesta']).''.((empty($r['data_scadenza'])) ? ' - ' : Translator::dateToLocale($r['data_scadenza'])).''.$r['tipointervento'].''.nl2br($r['richiesta']).''; - // Sede - if ($r['idsede'] == '-1') { - echo '- '.('Nessuna').' -'; - } elseif (empty($r['idsede'])) { - echo tr('Sede legale'); - } else { - $rsp2 = $dbo->fetchArray("SELECT id, CONCAT( CONCAT_WS( ' (', CONCAT_WS(', ', nomesede, citta), indirizzo ), ')') AS descrizione FROM an_sedi WHERE id=".prepare($r['idsede'])); - - echo $rsp2[0]['descrizione']; - } - echo ' -
-
'; - } - } -} else { - echo ' -

'.tr('Non ci sono interventi da pianificare').'.

'; -} diff --git a/modules/interventi/widgets/interventi_da_pianificare.php b/modules/interventi/widgets/interventi_da_pianificare.php index f0126e0bc..414e1f801 100755 --- a/modules/interventi/widgets/interventi_da_pianificare.php +++ b/modules/interventi/widgets/interventi_da_pianificare.php @@ -1,32 +1,94 @@ fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY data_richiesta ASC'); +// Interventi da pianificare +$interventi_da_pianificare = Intervento::doesntHave('sessioni') + ->orderByRaw('IF(data_scadenza IS NULL, data_richiesta, data_scadenza)') + ->get(); +$raggruppamenti = $interventi_da_pianificare->groupBy(function ($item, $key) { + $data = $item->data_scadenza ?: $item->data_richiesta; + + return $data->formatLocalized('%B %Y'); +}); + +$counter = 0; +foreach ($raggruppamenti as $mese => $raggruppamento) { + ++$counter; + + // Se cambia il mese ricreo l'intestazione della tabella + if ($counter == 1) { + $attr = ''; + $class = 'fa-minus-circle'; + } else { + $attr = 'style="display:none;"'; + $class = 'fa-plus-circle'; + } + + echo " +

+ + ".$mese.' + +

'; -if (!empty($rs)) { echo ' - - - - - '; +
+
'.tr('Attività').''.tr('Data richiesta').'
+ + + + + + + + + + + - foreach ($rs as $r) { - $data_richiesta = !empty($r['data_richiesta']) ? Translator::dateToLocale($r['data_richiesta']) : ''; + '; + + // Elenco interventi da pianificare + foreach ($raggruppamento as $r) { + echo ' + + + + + + + + '; echo ' - - - - '; + '; + + echo ' + '; } + echo ' -
'.tr('Codice').''.tr('Cliente').''.tr('Data richiesta').''.tr('Data scadenza').''.tr('Tipo intervento').''.tr('Descrizione').''.tr('Sede').'
'.Modules::link(Modules::get('Interventi')['id'], $r['id'], $r['codice']).''.$r['ragione_sociale'].''.Translator::dateToLocale($r['data_richiesta']).''.((empty($r['data_scadenza'])) ? ' - ' : Translator::dateToLocale($r['data_scadenza'])).''.$r['tipointervento'].''.nl2br($r['richiesta']).'
- '.Modules::link('Interventi', $r['id'], 'Intervento n. '.$r['codice'].' del '.$data_richiesta).'
- '.$r['ragione_sociale'].' -
'.$data_richiesta.'
'; + // Sede + if ($r['idsede'] == '-1') { + echo '- '.('Nessuna').' -'; + } elseif (empty($r['idsede'])) { + echo tr('Sede legale'); + } else { + $rsp2 = $dbo->fetchArray("SELECT id, CONCAT( CONCAT_WS( ' (', CONCAT_WS(', ', nomesede, citta), indirizzo ), ')') AS descrizione FROM an_sedi WHERE id=".prepare($r['idsede'])); + + echo $rsp2[0]['descrizione']; + } + echo ' +
'; -} else { - echo ' -

'.tr('Non ci sono attività da programmare').'.

'; + + +'; +} + +if ($raggruppamenti->isEmpty()) { + echo ' +

'.tr('Non ci sono interventi da pianificare').'.

'; } diff --git a/modules/interventi/widgets/interventi_da_programmare.php b/modules/interventi/widgets/interventi_da_programmare.php new file mode 100755 index 000000000..f0126e0bc --- /dev/null +++ b/modules/interventi/widgets/interventi_da_programmare.php @@ -0,0 +1,32 @@ +fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY data_richiesta ASC'); + +if (!empty($rs)) { + echo ' + + + + + '; + + foreach ($rs as $r) { + $data_richiesta = !empty($r['data_richiesta']) ? Translator::dateToLocale($r['data_richiesta']) : ''; + + echo ' + + + + '; + } + echo ' +
'.tr('Attività').''.tr('Data richiesta').'
+ '.Modules::link('Interventi', $r['id'], 'Intervento n. '.$r['codice'].' del '.$data_richiesta).'
+ '.$r['ragione_sociale'].' +
'.$data_richiesta.'
'; +} else { + echo ' +

'.tr('Non ci sono attività da programmare').'.

'; +} diff --git a/templates/barcode/footer.php b/templates/barcode/footer.php old mode 100644 new mode 100755 diff --git a/templates/barcode/header.php b/templates/barcode/header.php old mode 100644 new mode 100755 diff --git a/update/2_4_14.sql b/update/2_4_14.sql index 9eef32a65..15801b0e5 100755 --- a/update/2_4_14.sql +++ b/update/2_4_14.sql @@ -473,3 +473,7 @@ UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM in_interventi W -- Lista con indirizzi email validi per ogni anagrafica caricata a sistema INSERT INTO `em_lists` (`id`, `name`, `description`, `query`, `deleted_at`) VALUES (NULL, 'Tutte le anagrafiche', 'Indirizzi email validi per ogni anagrafica caricata a sistema', 'SELECT idanagrafica AS id FROM an_anagrafiche WHERE email != \'\'', NULL); + +-- Correzioni minori su widget +UPDATE `zz_widgets` SET `more_link` = './modules/interventi/widgets/interventi_da_programmare.php' WHERE `name` = 'Attività nello stato da programmare'; +UPDATE `zz_widgets` SET `more_link` = './modules/interventi/widgets/interventi_da_pianificare.php' WHERE `name` = 'Attività da pianificare';