From d0e3e267ef0027fdd5a53ba881a80b60036447b6 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 22 Mar 2019 11:35:26 +0100 Subject: [PATCH] Standardizzazione stati preventivi e contratti Fix blocco del periodo temporale. #532 --- modules/contratti/actions.php | 2 +- modules/contratti/ajax/select.php | 2 +- modules/contratti/buttons.php | 6 +- modules/contratti/init.php | 4 +- ...tti.pianificazionedashboard.interventi.php | 2 +- .../contratti.pianificazionedashboard.php | 2 +- .../widgets/contratti.ratecontrattuali.php | 2 +- .../widgets/contratti_scadenza.dashboard.php | 2 +- modules/dashboard/actions.php | 4 +- modules/dashboard/edit.php | 8 +-- modules/fatture/edit.php | 2 +- modules/preventivi/ajax/select.php | 2 +- modules/preventivi/buttons.php | 2 +- modules/preventivi/init.php | 3 +- plugins/pianificazione_interventi/edit.php | 6 +- src/Util/Query.php | 14 +++++ templates/contratti/init.php | 2 +- update/2_4_9.php | 40 ++++++++++++- update/2_4_9.sql | 57 ++++++++++++++++--- 19 files changed, 126 insertions(+), 36 deletions(-) diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 7dafbe028..0248de6d7 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -352,7 +352,7 @@ switch (post('op')) { } // Cambio stato precedente contratto in concluso (non più pianificabile) - $dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE pianificabile = 0 AND fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record)); + $dbo->query('UPDATE `co_contratti` SET `rinnovabile`= 0, `idstato`= (SELECT id FROM co_staticontratti WHERE is_pianificabile = 0 AND is_fatturabile = 1 AND descrizione = \'Concluso\') WHERE `id` = '.prepare($id_record)); flash()->info(tr('Contratto rinnovato!')); diff --git a/modules/contratti/ajax/select.php b/modules/contratti/ajax/select.php index 2f21472d3..d76a921ee 100644 --- a/modules/contratti/ajax/select.php +++ b/modules/contratti/ajax/select.php @@ -13,7 +13,7 @@ switch ($resource) { if (empty($elements)) { $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); - $stato = !empty($superselect['stato']) ? $superselect['stato'] : 'pianificabile'; + $stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_pianificabile'; $where[] = 'idstato IN (SELECT `id` FROM `co_staticontratti` WHERE '.$stato.' = 1)'; } diff --git a/modules/contratti/buttons.php b/modules/contratti/buttons.php index 5ef34e6d2..c7970b842 100644 --- a/modules/contratti/buttons.php +++ b/modules/contratti/buttons.php @@ -6,14 +6,14 @@ $rs_documento = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontr /* permetto di fatturare il contratto solo se contiene righe e si trova in uno stato fatturabile */ echo ' -'; if ($record['rinnovabile']) { - $rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['pianificabile']; + $rinnova = !empty($record['data_accettazione']) && !empty($record['data_conclusione']) && $record['data_accettazione'] != '0000-00-00' && $record['data_conclusione'] != '0000-00-00' && $record['is_pianificabile']; - $stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')['stati_pianificabili']; + $stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili']; echo '
diff --git a/modules/contratti/init.php b/modules/contratti/init.php index 357d38a47..de8c94780 100644 --- a/modules/contratti/init.php +++ b/modules/contratti/init.php @@ -5,8 +5,8 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { $record = $dbo->fetchOne('SELECT *, (SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS tipo_anagrafica, - (SELECT fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile, - (SELECT pianificabile FROM co_staticontratti WHERE id=idstato) AS pianificabile, + (SELECT is_fatturabile FROM co_staticontratti WHERE id=idstato) AS is_fatturabile, + (SELECT is_pianificabile FROM co_staticontratti WHERE id=idstato) AS is_pianificabile, (SELECT descrizione FROM co_staticontratti WHERE id=idstato) AS stato, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti FROM co_contratti WHERE id='.prepare($id_record)); diff --git a/modules/contratti/widgets/contratti.pianificazionedashboard.interventi.php b/modules/contratti/widgets/contratti.pianificazionedashboard.interventi.php index d0fd2484e..0887a8f6c 100644 --- a/modules/contratti/widgets/contratti.pianificazionedashboard.interventi.php +++ b/modules/contratti/widgets/contratti.pianificazionedashboard.interventi.php @@ -19,7 +19,7 @@ $mesi = [ ]; // Righe inserite -$qp = "SELECT *, DATE_FORMAT( data_richiesta, '%m-%Y') AS mese, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.id=idcontratto) AS ragione_sociale, (SELECT CONCAT('Contratto ', numero, ' del ', DATE_FORMAT(data_bozza, '%d/%m/%Y'), ' - ', nome, ' [', (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , ']') FROM co_contratti WHERE id = co_promemoria.idcontratto) contratto, (SELECT id FROM co_contratti WHERE id = co_promemoria.idcontratto) idcontratto FROM co_promemoria WHERE idcontratto IN ( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_richiesta, '%Y-%m') ASC, ragione_sociale ASC"; +$qp = "SELECT *, DATE_FORMAT( data_richiesta, '%m-%Y') AS mese, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM co_contratti INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_contratti.id=idcontratto) AS ragione_sociale, (SELECT CONCAT('Contratto ', numero, ' del ', DATE_FORMAT(data_bozza, '%d/%m/%Y'), ' - ', nome, ' [', (SELECT `descrizione` FROM `co_staticontratti` WHERE `co_staticontratti`.`id` = `idstato`) , ']') FROM co_contratti WHERE id = co_promemoria.idcontratto) contratto, (SELECT id FROM co_contratti WHERE id = co_promemoria.idcontratto) idcontratto FROM co_promemoria WHERE idcontratto IN ( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_richiesta, '%Y-%m') ASC, ragione_sociale ASC"; $rsp = $dbo->fetchArray($qp); if (!empty($rsp)) { diff --git a/modules/contratti/widgets/contratti.pianificazionedashboard.php b/modules/contratti/widgets/contratti.pianificazionedashboard.php index b021e69ec..dd2cb04a1 100644 --- a/modules/contratti/widgets/contratti.pianificazionedashboard.php +++ b/modules/contratti/widgets/contratti.pianificazionedashboard.php @@ -19,7 +19,7 @@ $mesi = [ ]; // Righe inserite -$qp = "SELECT *, DATE_FORMAT( data_scadenza, '%m-%Y') AS mese, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto)) AS ragione_sociale, (SELECT matricola FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT nome FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT idsede FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS idsede FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_scadenza, '%m-%Y') ASC, idcliente ASC"; +$qp = "SELECT *, DATE_FORMAT( data_scadenza, '%m-%Y') AS mese, (SELECT idanagrafica FROM co_contratti WHERE id=idcontratto) AS idcliente, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id=idcontratto)) AS ragione_sociale, (SELECT matricola FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT nome FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT idsede FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS idsede FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL ORDER BY DATE_FORMAT( data_scadenza, '%m-%Y') ASC, idcliente ASC"; $rsp = $dbo->fetchArray($qp); if (!empty($rsp)) { diff --git a/modules/contratti/widgets/contratti.ratecontrattuali.php b/modules/contratti/widgets/contratti.ratecontrattuali.php index d5bdf0448..f21598a68 100644 --- a/modules/contratti/widgets/contratti.ratecontrattuali.php +++ b/modules/contratti/widgets/contratti.ratecontrattuali.php @@ -19,7 +19,7 @@ $mesi = [ ]; // Righe inserite -//idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND +//idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND $qp = "SELECT *, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto=co_ordiniservizio_pianificazionefatture.idcontratto) AS budget_contratto, DATE_FORMAT(data_scadenza, '%m-%Y') AS mese, diff --git a/modules/contratti/widgets/contratti_scadenza.dashboard.php b/modules/contratti/widgets/contratti_scadenza.dashboard.php index 314221c5d..efc00931b 100644 --- a/modules/contratti/widgets/contratti_scadenza.dashboard.php +++ b/modules/contratti/widgets/contratti_scadenza.dashboard.php @@ -2,7 +2,7 @@ include_once __DIR__.'/../../../core.php'; -$rs = $dbo->fetchArray('SELECT *, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC'); +$rs = $dbo->fetchArray('SELECT *, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica) AS ragione_sociale FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC'); if (!empty($rs)) { echo ' diff --git a/modules/dashboard/actions.php b/modules/dashboard/actions.php index d196252f7..458664622 100644 --- a/modules/dashboard/actions.php +++ b/modules/dashboard/actions.php @@ -137,9 +137,9 @@ switch (get('op')) { $mese = $_GET['mese']; // Righe inserite - $qp = "SELECT co_promemoria.id, idcontratto, richiesta, DATE_FORMAT( data_richiesta, '%m%Y') AS mese, data_richiesta, an_anagrafiche.ragione_sociale, 'promemoria' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL + $qp = "SELECT co_promemoria.id, idcontratto, richiesta, DATE_FORMAT( data_richiesta, '%m%Y') AS mese, data_richiesta, an_anagrafiche.ragione_sociale, 'promemoria' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM (co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL - UNION SELECT co_ordiniservizio.id, idcontratto, '', DATE_FORMAT( data_scadenza, '%m%Y') AS mese, data_scadenza, an_anagrafiche.ragione_sociale, 'ordine' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) ) AND idintervento IS NULL + UNION SELECT co_ordiniservizio.id, idcontratto, '', DATE_FORMAT( data_scadenza, '%m%Y') AS mese, data_scadenza, an_anagrafiche.ragione_sociale, 'ordine' AS ref, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento='ODS') AS tipointervento FROM (co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id) INNER JOIN an_anagrafiche ON co_contratti.idanagrafica=an_anagrafiche.idanagrafica WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) ) AND idintervento IS NULL ORDER BY data_richiesta ASC"; diff --git a/modules/dashboard/edit.php b/modules/dashboard/edit.php index b2e4ee231..6e1fddc85 100644 --- a/modules/dashboard/edit.php +++ b/modules/dashboard/edit.php @@ -285,9 +285,9 @@ if ($total == 0) {

fetchArray($qp); @@ -309,9 +309,9 @@ if (!empty($rsp)) {

'.tr('Promemoria da pianificare').'

'; // Controllo pianificazioni mesi precedenti - $qp_old = 'SELECT co_promemoria.id FROM co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_promemoria.data_richiesta, INTERVAL 1 DAY) <= NOW() + $qp_old = 'SELECT co_promemoria.id FROM co_promemoria INNER JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_promemoria.data_richiesta, INTERVAL 1 DAY) <= NOW() - UNION SELECT co_ordiniservizio.id FROM co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_ordiniservizio.data_scadenza, INTERVAL 1 DAY) <= NOW() + UNION SELECT co_ordiniservizio.id FROM co_ordiniservizio INNER JOIN co_contratti ON co_ordiniservizio.idcontratto=co_contratti.id WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_pianificabile = 1) AND idintervento IS NULL AND DATE_ADD(co_ordiniservizio.data_scadenza, INTERVAL 1 DAY) <= NOW() UNION SELECT in_interventi.id FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 AND DATE_ADD(in_interventi.data_richiesta, INTERVAL 1 DAY) <= NOW()'; $rsp_old = $dbo->fetchNum($qp_old); diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 65d353cd9..c930cfa4f 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -453,7 +453,7 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') { '; // Lettura contratti accettati, in attesa di conferma o in lavorazione - $contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND co_contratti.id IN (SELECT idcontratto FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id AND (qta - qta_evasa) > 0)'; + $contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN( SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND co_contratti.id IN (SELECT idcontratto FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id AND (qta - qta_evasa) > 0)'; $contratti = $dbo->fetchArray($contr_query)[0]['tot']; echo '
diff --git a/modules/preventivi/ajax/select.php b/modules/preventivi/ajax/select.php index 373a4ce4e..66a6a3915 100644 --- a/modules/preventivi/ajax/select.php +++ b/modules/preventivi/ajax/select.php @@ -15,7 +15,7 @@ switch ($resource) { $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); $where[] = 'co_preventivi.default_revision=1'; - $stato = !empty($superselect['stato']) ? $superselect['stato'] : 'fatturabile'; + $stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_fatturabile'; $where[] = 'idstato IN (SELECT `id` FROM `co_statipreventivi` WHERE '.$stato.' = 1)'; } diff --git a/modules/preventivi/buttons.php b/modules/preventivi/buttons.php index 37931a601..2df24a2b0 100644 --- a/modules/preventivi/buttons.php +++ b/modules/preventivi/buttons.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; echo' '; -$disabled = $record['fatturabile'] || $record['annullato']; +$disabled = $record['is_fatturabile'] || $record['is_completato']; if (!$disabled) { echo ' '; diff --git a/modules/preventivi/init.php b/modules/preventivi/init.php index f57c9603d..9907cbe6b 100644 --- a/modules/preventivi/init.php +++ b/modules/preventivi/init.php @@ -7,8 +7,7 @@ if (isset($id_record)) { $record = $dbo->fetchOne('SELECT *, (SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_preventivi.idanagrafica) AS tipo_anagrafica, - (SELECT fatturabile FROM co_statipreventivi WHERE id=idstato) AS fatturabile, - (SELECT annullato FROM co_statipreventivi WHERE id=idstato) AS annullato, + (SELECT is_fatturabile FROM co_statipreventivi WHERE id=idstato) AS is_fatturabile, (SELECT descrizione FROM co_statipreventivi WHERE id=idstato) AS stato FROM co_preventivi WHERE id='.prepare($id_record)); diff --git a/plugins/pianificazione_interventi/edit.php b/plugins/pianificazione_interventi/edit.php index b71939db2..e1920a869 100644 --- a/plugins/pianificazione_interventi/edit.php +++ b/plugins/pianificazione_interventi/edit.php @@ -12,14 +12,14 @@ $contratto = $dbo->fetchOne('SELECT * FROM co_contratti WHERE id = :id', [ $records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM co_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC'); // Intervento/promemoria pianificabile -$pianificabile = $dbo->fetchOne('SELECT pianificabile FROM co_staticontratti WHERE id = :id', [ +$pianificabile = $dbo->fetchOne('SELECT is_pianificabile FROM co_staticontratti WHERE id = :id', [ ':id' => $contratto['idstato'], -])['pianificabile']; +])['is_pianificabile']; if ($pianificabile) { $pianificabile = (date('Y', strtotime($contratto['data_accettazione'])) > 1970 and date('Y', strtotime($contratto['data_conclusione'])) > 1970) ? true : false; } -$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `pianificabile` = 1')['stati_pianificabili']; +$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili']; echo ' diff --git a/src/Util/Query.php b/src/Util/Query.php index dc5fdbc0e..871628d36 100644 --- a/src/Util/Query.php +++ b/src/Util/Query.php @@ -61,6 +61,17 @@ class Query $user = Auth::user(); + // Sostituzione periodi temporali + preg_match('|date_period\((.+?)\)|', $query, $matches); + $dates = explode(',', $matches[1]); + $date_filter = $matches[0]; + + $filters = []; + foreach ($dates as $date) { + $filters[] = $date." BETWEEN '|period_start|' AND '|period_end|'"; + } + $date_query = !empty($filters) && !empty(self::$segments) ? ' AND ('.implode(' OR ', $filters).')' : ''; + // Elenco delle sostituzioni $replace = [ // Identificatori @@ -68,6 +79,9 @@ class Query '|id_utente|' => prepare($user['id']), '|id_parent|' => prepare($id_parent), + // Filtro temporale + '|'.$date_filter.'|' => $date_query, + // Date '|period_start|' => $_SESSION['period_start'], '|period_end|' => $_SESSION['period_end'], diff --git a/templates/contratti/init.php b/templates/contratti/init.php index a40b44563..835573161 100644 --- a/templates/contratti/init.php +++ b/templates/contratti/init.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; $module_name = 'Contratti'; // Lettura info fattura -$records = $dbo->fetchArray('SELECT *, co_contratti.descrizione AS desc_contratto, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_interventi.id LIMIT 0,1) AS data, (SELECT fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti, co_contratti.descrizione AS `cdescrizione`, co_contratti.idanagrafica AS `idanagrafica`, co_contratti.costo_orario AS costo_orario , co_contratti.costo_km AS costo_km FROM co_contratti LEFT OUTER JOIN (co_promemoria LEFT OUTER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id) ON co_contratti.id=co_promemoria.idcontratto WHERE co_contratti.id='.prepare($id_record)); +$records = $dbo->fetchArray('SELECT *, co_contratti.descrizione AS desc_contratto, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=in_interventi.id LIMIT 0,1) AS data, (SELECT is_fatturabile FROM co_staticontratti WHERE id=idstato) AS fatturabile, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS idimpianti, co_contratti.descrizione AS `cdescrizione`, co_contratti.idanagrafica AS `idanagrafica`, co_contratti.costo_orario AS costo_orario , co_contratti.costo_km AS costo_km FROM co_contratti LEFT OUTER JOIN (co_promemoria LEFT OUTER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id) ON co_contratti.id=co_promemoria.idcontratto WHERE co_contratti.id='.prepare($id_record)); $id_cliente = $records[0]['idanagrafica']; $id_sede = $records[0]['idsede']; diff --git a/update/2_4_9.php b/update/2_4_9.php index d64281a50..f2bd4a2a4 100644 --- a/update/2_4_9.php +++ b/update/2_4_9.php @@ -1,5 +1,41 @@ fetchArray("SELECT co_documenti.id, co_statidocumento.descrizione AS stato_fattura +FROM co_documenti + INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id + INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id +WHERE co_statidocumento.dir = 'entrata' AND co_statidocumento.descrizione IN ('Emessa', 'Parzialmente pagato', 'Pagato', 'Bozza', 'Annullata')"); + +foreach ($results as $result) { + $scadenze = $dbo->fetchArray('SELECT id, da_pagare, pagato, scadenza FROM co_scadenziario WHERE iddocumento = '.prepare($result['id'])); + + // Se esiste la scadenza la elimino + if (!empty($scadenze)) { + elimina_scadenza($result['id']); + } + + $is_pagato = null; + if ($result['stato_fattura'] == 'Pagato') { + $is_pagato = true; + } elseif (in_array($result['stato_fattura'], ['Emessa', 'Parzialmente pagato'])) { + $is_pagato = false; + } + + // Aggiungo la scadenza e la segno eventualmente come pagata + if (isset($is_pagato)) { + aggiungi_scadenza($result['id'], null, $is_pagato); + } + + if (!empty($scadenze) && $result['stato_fattura'] == 'Parzialmente pagato') { + foreach ($scadenza as $scadenze) { + $dbo->query('UPDATE co_scadenziario SET pagato = '.prepare($scadenza['pagato']).' WHERE scadenza = '.prepare($scadenza['scadenza']).' AND iddocumento = '.prepare($result['id'])); + } + } +} + // File e cartelle deprecate $files = [ 'plugins/xml/AT_v1.0.xml', @@ -11,8 +47,8 @@ $files = [ 'plugins/xml/NS_v1.0.xml', 'plugins/xml/RC_v1.0.xml', 'plugins/xml/SE_v1.0.xml', - 'plugins/exportFE/view.php', - 'plugins/exportFE/src/stylesheet-1.2.1.xsl', + 'plugins/exportFE/view.php', + 'plugins/exportFE/src/stylesheet-1.2.1.xsl', ]; foreach ($files as $key => $value) { diff --git a/update/2_4_9.sql b/update/2_4_9.sql index 3d3900464..c38403818 100644 --- a/update/2_4_9.sql +++ b/update/2_4_9.sql @@ -22,13 +22,6 @@ INSERT INTO `zz_prints` (`id`, `id_module`, `is_record`, `name`, `title`, `direc -- Dimensione dei file caricati ALTER TABLE `zz_files` ADD `size` INT(11) NULL AFTER `category`; --- Preventivi e contratti nello stato 'Pagato' non sono più fatturabili -UPDATE `co_staticontratti` SET `fatturabile` = '0' WHERE `descrizione` = 'Pagato'; -UPDATE `co_statipreventivi` SET `fatturabile` = '0' WHERE `descrizione` = 'Pagato'; - --- Definisco anche per i contratti lo stato completato (blocco la modifica della scheda) -ALTER TABLE `co_staticontratti` ADD `completato` BOOLEAN NOT NULL DEFAULT FALSE AFTER `pianificabile`; - -- Elimino data_evasione da co_righe_preventivi ALTER TABLE `co_righe_preventivi` DROP `data_evasione`; @@ -36,4 +29,52 @@ ALTER TABLE `co_righe_preventivi` DROP `data_evasione`; UPDATE `co_righe_preventivi` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idpreventivo` = `co_righe_preventivi`.`idpreventivo` SET `co_righe_preventivi`.`qta_evasa` = `co_righe_documenti`.`qta`; -- Allineo qta evase per le righe dei contratti inseriti in una fattura -UPDATE `co_righe_contratti` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idcontratto` = `co_righe_contratti`.`idcontratto` SET `co_righe_contratti`.`qta_evasa` = `co_righe_documenti`.`qta`; \ No newline at end of file +UPDATE `co_righe_contratti` INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idcontratto` = `co_righe_contratti`.`idcontratto` SET `co_righe_contratti`.`qta_evasa` = `co_righe_documenti`.`qta`; + +-- Standardizzazione stati preventivi e contratti +ALTER TABLE `co_staticontratti` ADD `is_completato` BOOLEAN NOT NULL DEFAULT FALSE AFTER `pianificabile`; +ALTER TABLE `co_statipreventivi` ADD `is_fatturabile` BOOLEAN NOT NULL DEFAULT FALSE AFTER `completato`; +ALTER TABLE `co_statipreventivi` ADD `is_pianificabile` BOOLEAN NOT NULL DEFAULT FALSE AFTER `is_fatturabile`; +ALTER TABLE `co_statipreventivi` DROP `annullato`; + +ALTER TABLE `co_statipreventivi` CHANGE `completato` `is_completato` BOOLEAN NOT NULL DEFAULT FALSE; + +ALTER TABLE `co_staticontratti` CHANGE `pianificabile` `is_pianificabile` BOOLEAN NOT NULL DEFAULT FALSE; +ALTER TABLE `co_staticontratti` CHANGE `fatturabile` `is_fatturabile` BOOLEAN NOT NULL DEFAULT FALSE; + +-- Fix degli stati predefiniti preventivi e contratti +UPDATE `co_staticontratti` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Bozza'; +UPDATE `co_staticontratti` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'In attesa di conferma'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Accettato'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Rifiutato'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 1, `is_fatturabile` = 1 WHERE `descrizione` = 'In lavorazione'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Fatturato'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Pagato'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Concluso'; +UPDATE `co_staticontratti` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Parzialmente fatturato'; + +UPDATE `co_statipreventivi` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Bozza'; +UPDATE `co_statipreventivi` SET `is_completato` = 0, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'In attesa di conferma'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Accettato'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Rifiutato'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 1, `is_fatturabile` = 1 WHERE `descrizione` = 'In lavorazione'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Fatturato'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 0 WHERE `descrizione` = 'Pagato'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Concluso'; +UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 0, `is_fatturabile` = 1 WHERE `descrizione` = 'Parzialmente fatturato'; + +UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato, co_contratti.id, DATEDIFF( data_conclusione, NOW() ) AS giorni_rimanenti FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND rinnovabile=1 AND NOW() > DATE_ADD( data_conclusione, INTERVAL - ABS(giorni_preavviso_rinnovo) DAY) AND YEAR(data_conclusione) > 1970 HAVING ISNULL((SELECT id FROM co_contratti contratti WHERE contratti.idcontratto_prev=co_contratti.id )) ORDER BY giorni_rimanenti ASC' WHERE `zz_widgets`.`name` = 'Contratti in scadenza'; +UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_ordiniservizio WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN(SELECT id FROM co_staticontratti WHERE ispianificabile = 1)) AND idintervento IS NULL' WHERE `zz_widgets`.`name` = 'Ordini di servizio da impostare'; +UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM co_promemoria WHERE idcontratto IN( SELECT id FROM co_contratti WHERE idstato IN (SELECT id FROM co_staticontratti WHERE is_pianificabile = 1)) AND idintervento IS NULL' WHERE `zz_widgets`.`name` = 'Interventi da pianificare'; + +-- Fix filtri per data +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_documenti` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` WHERE 1=1 AND `dir` = \'uscita\' |segment| |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(IF(numero_esterno=\'\', numero, numero_esterno) AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Fatture di acquisto'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id WHERE 1=1 AND dir = ''entrata'' |segment| |date_period(`data`)| HAVING 2=2 ORDER BY data DESC, CAST(numero_esterno AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Fatture di vendita'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM (`in_interventi` INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`) LEFT OUTER JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` WHERE 1=1 |date_period(`orario_inizio`,`data_richiesta`)| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY IFNULL(`orario_fine`, `data_richiesta`) DESC' WHERE `zz_modules`.`name` = 'Interventi'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_preventivi` WHERE 1=1 AND default_revision=1 |date_period(`data_bozza`)| HAVING 2=2 ORDER BY `id` DESC' WHERE `zz_modules`.`name` = 'Preventivi'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_contratti` WHERE 1=1 |date_period(`data_bozza`)| HAVING 2=2 ORDER BY `id` DESC' WHERE `zz_modules`.`name` = 'Contratti'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_movimenti` INNER JOIN `co_pianodeiconti3` ON `co_movimenti`.`idconto` = `co_pianodeiconti3`.`id` WHERE 1=1 AND `primanota` = 1 |date_period(`co_movimenti`.`data`)| GROUP BY `idmastrino`, `primanota`, `co_movimenti`.`data` HAVING 2=2 ORDER BY `co_movimenti`.`data` DESC' WHERE `zz_modules`.`name` = 'Prima nota'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `or_ordini` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` WHERE 1=1 AND `dir` = ''entrata'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ordini cliente'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `or_ordini` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` WHERE 1=1 AND `dir` = ''uscita'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ordini fornitore'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''entrata'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC,`dt_ddt`.created_at DESC' WHERE `zz_modules`.`name` = 'Ddt di vendita'; +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE 1=1 AND `dir` = ''uscita'' |date_period(`data`)| HAVING 2=2 ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `zz_modules`.`name` = 'Ddt di acquisto';