From dd37b196f8c4d2931554b9be3240d4f9229d948f Mon Sep 17 00:00:00 2001
From: Beppe <cjbeppe87@yahoo.it>
Date: Thu, 2 May 2019 13:17:06 +0200
Subject: [PATCH] Inserimento widgets interventi confermati, interventi in
 programmazione e modifica widget contratti in scadenza con aggiunta campo con
 ore da contratto rimanenti per il preavviso rinnovo anticipato

---
 modules/contratti/actions.php                 |  4 ++-
 modules/contratti/edit.php                    |  4 +++
 .../widgets/contratti_scadenza.dashboard.php  |  7 +++-
 .../widgets/interventi_confermati.php         | 32 +++++++++++++++++++
 .../widgets/interventi_da_pianificare.php     | 32 +++++++++++++++++++
 update/2_4_9.sql                              | 17 ++++++++--
 6 files changed, 92 insertions(+), 4 deletions(-)
 create mode 100644 modules/interventi/widgets/interventi_confermati.php
 create mode 100644 modules/interventi/widgets/interventi_da_pianificare.php

diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php
index 43fd2b225..bfd355048 100644
--- a/modules/contratti/actions.php
+++ b/modules/contratti/actions.php
@@ -50,6 +50,7 @@ switch (post('op')) {
             $rinnovabile = post('rinnovabile');
 
             $giorni_preavviso_rinnovo = post('giorni_preavviso_rinnovo');
+            $ore_preavviso_rinnovo = post('ore_preavviso_rinnovo');
             $validita = post('validita');
             $idreferente = post('idreferente');
             $esclusioni = post('esclusioni');
@@ -80,7 +81,8 @@ switch (post('op')) {
 				data_rifiuto='.prepare($data_rifiuto).',
 				data_conclusione='.prepare($data_conclusione).',
 				rinnovabile='.prepare($rinnovabile).',
-				giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).',
+                giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).',
+                ore_preavviso_rinnovo='.prepare($ore_preavviso_rinnovo).',
 				esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).',
 				id_documento_fe='.prepare($id_documento_fe).',
 				num_item='.prepare($num_item).',
diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php
index 040429e93..2bcdeeed1 100644
--- a/modules/contratti/edit.php
+++ b/modules/contratti/edit.php
@@ -76,6 +76,10 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
 				<div class="col-md-3">
 					{[ "type": "number", "label": "<?php echo tr('Preavviso per rinnovo'); ?>", "name": "giorni_preavviso_rinnovo", "decimals": "0", "value": "$giorni_preavviso_rinnovo$", "icon-after": "giorni", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?> ]}
 				</div>
+
+                <div class="col-md-3">
+					{[ "type": "number", "label": "<?php echo tr('Ore rimanenti rinnovo'); ?>", "name": "ore_preavviso_rinnovo", "decimals": "0", "value": "$ore_preavviso_rinnovo$", "icon-after": "ore", "disabled": <?php echo $record['rinnovabile'] ? 0 : 1; ?>, "help": "Numero ore restanti nel contratto per avviso rinnovo anticipato." ]}
+				</div>
 			</div>
 
 			<div class="row">
diff --git a/modules/contratti/widgets/contratti_scadenza.dashboard.php b/modules/contratti/widgets/contratti_scadenza.dashboard.php
index efc00931b..f10a08e41 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 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');
+$rs = $dbo->fetchArray('SELECT *, ( (SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.completato = 1)), 0) ) AS ore, 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 ( ( (SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.completato = 1)), 0) ) < co_contratti.ore_preavviso_rinnovo OR 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 '
@@ -22,6 +22,11 @@ if (!empty($rs)) {
         // Se scaduto, segna la riga in rosso
         $class = (strtotime($r['data_conclusione']) < strtotime(date('Y-m-d')) && !empty($data_conclusione)) ? 'danger' : '';
 
+        if( $class!='danger' ){
+            // Se ore finite, segna la riga in rosso
+            $class = ($r['ore'] < 1 && !empty($r['ore'])) ? 'danger' : '';
+        }
+
         $scadenza = ($r['giorni_rimanenti'] > 0) ? tr('scade fra _DAYS_ giorni') : tr('scaduto da _DAYS_ giorni');
         $scadenza = str_replace('_DAYS_', $r['giorni_rimanenti'], $scadenza);
 
diff --git a/modules/interventi/widgets/interventi_confermati.php b/modules/interventi/widgets/interventi_confermati.php
new file mode 100644
index 000000000..2e666b99b
--- /dev/null
+++ b/modules/interventi/widgets/interventi_confermati.php
@@ -0,0 +1,32 @@
+<?php
+
+include_once __DIR__.'/../../../core.php';
+
+$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROm in_statiintervento WHERE in_statiintervento.descrizione=\'In programmazione\') ORDER BY data_richiesta ASC');
+
+if (!empty($rs)) {
+    echo '
+<table class="table table-hover">
+    <tr>
+        <th width="50%">'.tr('Attività').'</th>
+        <th width="15%">'.tr('Data richiesta').'</th>
+    </tr>';
+
+    foreach ($rs as $r) {
+        $data_richiesta = !empty($r['data_richiesta']) ? Translator::dateToLocale($r['data_richiesta']) : '';
+
+        echo '
+    <tr >
+        <td>
+            '.Modules::link('Interventi', $r['id'], 'Intervento n. '.$r['codice'].' del '.$data_richiesta).'<br>
+            <small class="help-block">'.$r['ragione_sociale'].'</small>
+        </td>
+        <td class="text-center">'.$data_richiesta.'</td>
+    </tr>';
+    }
+    echo '
+</table>';
+} else {
+    echo '
+<p>'.tr('Non ci sono attività in programmazione').'.</p>';
+}
diff --git a/modules/interventi/widgets/interventi_da_pianificare.php b/modules/interventi/widgets/interventi_da_pianificare.php
new file mode 100644
index 000000000..81cb39c9d
--- /dev/null
+++ b/modules/interventi/widgets/interventi_da_pianificare.php
@@ -0,0 +1,32 @@
+<?php
+
+include_once __DIR__.'/../../../core.php';
+
+$rs = $dbo->fetchArray('SELECT * FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROm in_statiintervento WHERE in_statiintervento.descrizione=\'Da programmare\') ORDER BY data_richiesta ASC');
+
+if (!empty($rs)) {
+    echo '
+<table class="table table-hover">
+    <tr>
+        <th width="50%">'.tr('Attività').'</th>
+        <th width="15%">'.tr('Data richiesta').'</th>
+    </tr>';
+
+    foreach ($rs as $r) {
+        $data_richiesta = !empty($r['data_richiesta']) ? Translator::dateToLocale($r['data_richiesta']) : '';
+
+        echo '
+    <tr >
+        <td>
+            '.Modules::link('Interventi', $r['id'], 'Intervento n. '.$r['codice'].' del '.$data_richiesta).'<br>
+            <small class="help-block">'.$r['ragione_sociale'].'</small>
+        </td>
+        <td class="text-center">'.$data_richiesta.'</td>
+    </tr>';
+    }
+    echo '
+</table>';
+} else {
+    echo '
+<p>'.tr('Non ci sono attività in programmazione').'.</p>';
+}
diff --git a/update/2_4_9.sql b/update/2_4_9.sql
index 5e91a23ab..a946234a6 100644
--- a/update/2_4_9.sql
+++ b/update/2_4_9.sql
@@ -63,7 +63,8 @@ UPDATE `co_statipreventivi` SET `is_completato` = 1, `is_pianificabile` = 1, `is
 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` = 1, `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, 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 ( ( (SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.completato = 1)), 0) ) < co_contratti.ore_preavviso_rinnovo OR 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 is_pianificabile = 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';
 
@@ -280,4 +281,16 @@ UPDATE `zz_views` SET `query` = 'IF( pagato=da_pagare, ''#38CD4E'', IF(scadenza
 INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT id FROM zz_modules WHERE `name`='Scadenzario'), 'Saldo', 'da_pagare-pagato', 13, 1, 1, 1, '', '', 1, 1, 1);
 
 -- Aggiunta vista ore rimanenti nei contratti
-INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`="Contratti"), 'Ore rimanenti', '( (SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=''ore'' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id ), 0) )', '5', '1', '0', '1', '', '', '0', '0', '0');
\ No newline at end of file
+INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`="Contratti"), 'Ore rimanenti', '( (SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=''ore'' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id ), 0) )', '5', '1', '0', '1', '', '', '0', '0', '0');
+
+-- inserimento stato intervento da programmare
+INSERT INTO `in_statiintervento` (`idstatointervento`, `descrizione`, `colore`, `can_delete`, `completato`, `created_at`, `notifica`, `id_email`, `destinatari`) VALUES ('DAP', 'Da programmare', '#2deded', '1', '0', NULL, '0', NULL, NULL);
+
+-- Widget attività in programmazione
+INSERT INTO `zz_widgets` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`, `help`) VALUES (NULL, 'Attività in programmazione', 'stats', '1', 'controller_top', 'col-md-12', 'SELECT COUNT(id) AS dato FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.descrizione=\'Da programmare\') ORDER BY in_interventi.data_richiesta ASC', '#2deded', 'fa fa-hourglass-half', '', './modules/interventi/widgets/interventi_da_pianificare.php', 'popup', '', 'Attività in programmazione', '1', '8', NULL); 
+
+-- Widget attività ancora da programmare
+INSERT INTO `zz_widgets` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `order`, `help`) VALUES (NULL, 'Attività confermate', 'stats', '1', 'controller_top', 'col-md-12', 'SELECT COUNT(id) AS dato FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.descrizione=\'In programmazione\') ORDER BY in_interventi.data_richiesta ASC', '#f2bd00', 'fa fa-hourglass-half', '', './modules/interventi/widgets/interventi_confermati.php', 'popup', '', 'Attività confermate', '1', '8', NULL); 
+
+--Aggiunta ore rimanenti nel contratto per preavviso rinnovo
+ALTER TABLE `co_contratti` ADD `ore_preavviso_rinnovo` INT(11) NULL AFTER `giorni_preavviso_rinnovo`; 
\ No newline at end of file