diff --git a/include/common/importa.php b/include/common/importa.php index be2fb605f..7b797d5f5 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -119,13 +119,13 @@ if (!empty($options['create_document'])) { elseif ($final_module['name'] == 'Interventi') { echo '
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato_intervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL AND is_completato = 0 ORDER BY descrizione" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato_intervento", "required": 1, "values": "query=SELECT `id_statiintervento`.`id`, `in_statiintervento_lang`.`name` as `descrizione`, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL AND `is_completato` = 0 ORDER BY `name`" ]}
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "id_tipo_intervento", "required": 1, "ajax-source": "tipiintervento" ]}
'; - } + } // Opzioni aggiuntive per i Contratti elseif ($final_module['name'] == 'Contratti') { diff --git a/modules/contratti/widgets/contratti_scadenza.dashboard.php b/modules/contratti/widgets/contratti_scadenza.dashboard.php index 0024768c7..f6836903e 100755 --- a/modules/contratti/widgets/contratti_scadenza.dashboard.php +++ b/modules/contratti/widgets/contratti_scadenza.dashboard.php @@ -35,7 +35,7 @@ $rs = $dbo->fetchArray('SELECT INNER JOIN `co_righe_contratti` ON (`co_righe_contratti`.`idcontratto`=`co_contratti`.`id` AND `co_righe_contratti`.`um`=\'ore\') INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato`=`co_staticontratti`.`id` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') - LEFT JOIN `in_interventi` ON (`in_interventi`.`id_contratto` = `co_contratti`.`id` AND `in_interventi`.`idstatointervento` IN (SELECT `in_statiintervento`.`idstatointervento` FROM `in_statiintervento` WHERE `in_statiintervento`.`is_completato` = 1)) + LEFT JOIN `in_interventi` ON (`in_interventi`.`id_contratto` = `co_contratti`.`id` AND `in_interventi`.`idstatointervento` IN (SELECT `id` FROM `in_statiintervento` WHERE `in_statiintervento`.`is_completato` = 1)) LEFT JOIN `in_interventi_tecnici` ON (`in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) WHERE `co_contratti`.`rinnovabile` = 1 AND diff --git a/modules/dashboard/ajax.php b/modules/dashboard/ajax.php index a39f0c0ea..2c5f58bb8 100644 --- a/modules/dashboard/ajax.php +++ b/modules/dashboard/ajax.php @@ -41,56 +41,57 @@ switch (filter('op')) { $tecnici = (array) $_SESSION['dashboard']['idtecnici']; $query = 'SELECT - in_interventi_tecnici.id, - in_interventi_tecnici.idintervento, - in_interventi.codice, - colore, - in_interventi_tecnici.idtecnico, - in_interventi_tecnici.orario_inizio, - in_interventi_tecnici.orario_fine, - (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica = idtecnico) AS nome_tecnico, - (SELECT id FROM zz_files WHERE id_record = in_interventi.id AND id_module = '.prepare($modulo_interventi->id).' LIMIT 1) AS have_attachments, - (SELECT colore FROM an_anagrafiche WHERE idanagrafica = idtecnico) AS colore_tecnico, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS cliente, - (SELECT idzona FROM an_anagrafiche WHERE idanagrafica = in_interventi.idanagrafica) AS idzona, - in_statiintervento.is_completato AS is_completato - FROM in_interventi_tecnici - INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id - LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento + `in_interventi_tecnici`.`id`, + `in_interventi_tecnici`.`idintervento`, + `in_interventi`.`codice`, + `in_statiintervento`.`colore`, + `in_interventi_tecnici`.`idtecnico`, + `in_interventi_tecnici`.`orario_inizio`, + `in_interventi_tecnici`.`orario_fine`, + `tecnico`.`ragione_sociale` AS nome_tecnico, + `tecnico`.`colore` AS colore_tecnico, + `zz_files`.`id` AS have_attachments, + `an_anagrafiche`.`ragione_sociale` as cliente, + `an_anagrafiche`.`idzona` as idzona, + `in_statiintervento`.`is_completato` AS is_completato + FROM `in_interventi_tecnici` + INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` + LEFT JOIN `an_anagrafiche` as tecnico ON `in_interventi_tecnici`.`idtecnico` = `tecnico`.`idanagrafica` + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN `zz_files` ON (`zz_files`.`id_record` = `in_interventi`.`id` AND `zz_files`.`id_module` = '.prepare($modulo_interventi->id).') + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`id` WHERE ( ( - in_interventi_tecnici.orario_inizio >= '.prepare($start).' + `in_interventi_tecnici`.`orario_inizio` >= '.prepare($start).' AND - in_interventi_tecnici.orario_fine <= '.prepare($end).' + `in_interventi_tecnici`.`orario_fine` <= '.prepare($end).' ) OR ( - in_interventi_tecnici.orario_inizio >= '.prepare($start).' + `in_interventi_tecnici`.`orario_inizio` >= '.prepare($start).' AND - in_interventi_tecnici.orario_inizio <= '.prepare($end).' + `in_interventi_tecnici`.`orario_inizio` <= '.prepare($end).' ) OR ( - in_interventi_tecnici.orario_inizio <= '.prepare($start).' + `in_interventi_tecnici`.`orario_inizio` <= '.prepare($start).' AND - in_interventi_tecnici.orario_fine >= '.prepare($end).' + `in_interventi_tecnici`.`orario_fine` >= '.prepare($end).' ) OR ( - in_interventi_tecnici.orario_fine >= '.prepare($start).' + `in_interventi_tecnici`.`orario_fine` >= '.prepare($start).' AND - in_interventi_tecnici.orario_fine <= '.prepare($end).' + `in_interventi_tecnici`.`orario_fine` <= '.prepare($end).' ) ) - AND - idtecnico IN('.implode(',', $tecnici).') - AND - in_interventi.idstatointervento IN('.implode(',', $stati).') - AND - in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') + AND `idtecnico` IN('.implode(',', $tecnici).') + AND `in_interventi`.`idstatointervento` IN('.implode(',', $stati).') + AND `in_interventi_tecnici`.`idtipointervento` IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' HAVING - idzona IN ('.implode(',', $zone).')'; + `idzona` IN ('.implode(',', $zone).')'; $sessioni = $dbo->fetchArray($query); $results = []; @@ -236,7 +237,17 @@ switch (filter('op')) { $orario_fine = filter('timeEnd'); // Aggiornamento prezzo totale - $q = 'SELECT in_interventi_tecnici.prezzo_ore_unitario, idtecnico, in_statiintervento.is_completato FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento = in_statiintervento.idstatointervento WHERE in_interventi.id='.prepare($idintervento).' AND in_statiintervento.is_completato = 0 '.Modules::getAdditionalsQuery('Interventi'); + $q = 'SELECT + `in_interventi_tecnici`.`prezzo_ore_unitario`, + `idtecnico`, + `in_statiintervento`.`is_completato` + FROM + `in_interventi_tecnici` + INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id` + LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`id` + WHERE + `in_interventi`.`id`='.prepare($idintervento).' AND + `in_statiintervento`.`is_completato` = 0 '.Modules::getAdditionalsQuery('Interventi'); $rs = $dbo->fetchArray($q); $prezzo_ore = 0.00; @@ -276,7 +287,25 @@ switch (filter('op')) { } // Lettura dati intervento - $query = 'SELECT *, in_interventi.codice, an_anagrafiche.note AS note_anagrafica, idstatointervento AS parent_idstato, in_interventi.idtipointervento AS parent_idtipo, (SELECT GROUP_CONCAT(CONCAT(matricola, " - ", nome) SEPARATOR ", ") FROM my_impianti INNER JOIN my_impianti_interventi ON my_impianti.id=my_impianti_interventi.idimpianto WHERE my_impianti_interventi.idintervento='.prepare($id).' GROUP BY my_impianti_interventi.idintervento) AS impianti, (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=parent_idstato) AS stato, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=parent_idtipo) AS tipo, (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona FROM in_interventi LEFT JOIN in_interventi_tecnici ON in_interventi.id =in_interventi_tecnici.idintervento LEFT JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica WHERE in_interventi.id='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi', null, false); + $query = 'SELECT + *, + `in_interventi`.`codice`, + `an_anagrafiche`.`note` AS note_anagrafica, + `in_statiintervento`.`id` AS parent_idstato, + `in_statiintervento_lang`.`name` AS stato, + `in_interventi`.`idtipointervento` AS parent_idtipo, + (SELECT GROUP_CONCAT(CONCAT(`matricola`, " - ", `nome`) SEPARATOR ", ") FROM `my_impianti` INNER JOIN `my_impianti_interventi` ON `my_impianti`.`id`=`my_impianti_interventi`.`idimpianto` WHERE `my_impianti_interventi`.`idintervento`='.prepare($id).' GROUP BY `my_impianti_interventi`.`idintervento`) AS impianti, + `in_tipiintervento`.`descrizione` AS tipo, + (SELECT idzona FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS idzona + FROM + `in_interventi` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` + LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') + INNER JOIN `in_tipiintervento` ON `in_interventi`.`idtipointervento`=`in_tipiintervento`.`idtipointervento` + LEFT JOIN `in_interventi_tecnici` ON `in_interventi`.`id` =`in_interventi_tecnici`.`idintervento` + LEFT JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` + WHERE + `in_interventi`.`id`='.prepare($id).' '.Modules::getAdditionalsQuery('Interventi', null, false); $rs = $dbo->fetchArray($query); // correggo info indirizzo citta cap provincia con quelle della sede di destinazione @@ -427,15 +456,15 @@ switch (filter('op')) { // Visualizzo solo promemoria del tecnico loggato if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) { $query_interventi .= ' - INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); + INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); } else { $query_interventi .= ' - LEFT JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento`'; + LEFT JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento`'; } $query_interventi .= ' LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` - INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`idstatointervento` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`id` LEFT JOIN `an_anagrafiche` AS tecnico ON `in_interventi_tecnici_assegnati`.`id_tecnico` = `tecnico`.`idanagrafica` WHERE `in_statiintervento`.`is_completato` = 0 diff --git a/modules/dashboard/edit.php b/modules/dashboard/edit.php index 27f63563c..631ef1891 100755 --- a/modules/dashboard/edit.php +++ b/modules/dashboard/edit.php @@ -1,4 +1,3 @@ - fetchArray('SELECT `idstatointervento` AS id, `descrizione`, `colore` FROM `in_statiintervento` WHERE `deleted_at` IS NULL ORDER BY `descrizione` ASC'); +$stati_intervento = $dbo->fetchArray('SELECT `in_statiintervento`.`id`, `name` as descrizione, `colore` FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL ORDER BY `name` ASC'); // Tipi intervento $tipi_intervento = $dbo->fetchArray('SELECT `idtipointervento` AS id, `descrizione` FROM `in_tipiintervento` WHERE `deleted_at` IS NULL ORDER BY `descrizione` ASC'); @@ -243,31 +242,32 @@ if ($user['gruppo'] == 'Tecnici' && !empty($user['idanagrafica'])) { } $query_da_programmare = 'SELECT - `data_richiesta` AS data -FROM - `co_promemoria` - INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto` = `co_contratti`.`id` - INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id` - LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') - INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` -WHERE - `co_staticontratti`.`is_pianificabile` = 1 AND `idintervento` IS NULL - -UNION -SELECT - IF(`data_scadenza` IS NULL, `data_richiesta`, `data_scadenza`) AS data -FROM - `in_interventi` - INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`'; + `data_richiesta` AS data + FROM + `co_promemoria` + INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto` = `co_contratti`.`id` + INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id` + LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(setting('Lingua')).') + INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + WHERE + `co_staticontratti`.`is_pianificabile` = 1 AND `idintervento` IS NULL + UNION + SELECT + IF(`data_scadenza` IS NULL, `data_richiesta`, `data_scadenza`) AS data + FROM + `in_interventi` + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`'; // Visualizzo solo promemoria del tecnico loggato if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) { $query_da_programmare .= ' - INNER JOIN in_interventi_tecnici_assegnati ON in_interventi.id = in_interventi_tecnici_assegnati.id_intervento AND id_tecnico = '.prepare($id_tecnico); + INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); } $query_da_programmare .= ' -WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 AND in_interventi.idstatointervento IN(SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0)'; + WHERE + (SELECT COUNT(*) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) = 0 AND + `in_interventi`.`idstatointervento` IN(SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0)'; $risultati_da_programmare = $dbo->fetchArray($query_da_programmare); if (!empty($risultati_da_programmare)) { @@ -288,18 +288,33 @@ if (!empty($risultati_da_programmare)) { // Controllo pianificazioni mesi precedenti // Promemoria contratti + promemoria interventi - $query_mesi_precenti = '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 in_interventi.id FROM in_interventi - INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica'; + $query_mesi_precenti = '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 + `in_interventi`.`id` + FROM + `in_interventi` + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`'; // Visualizzo solo promemoria del tecnico loggato if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) { $query_mesi_precenti .= ' - INNER JOIN in_interventi_tecnici_assegnati ON in_interventi.id = in_interventi_tecnici_assegnati.id_intervento AND id_tecnico = '.prepare($id_tecnico); + INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); } $query_mesi_precenti .= ' -WHERE (SELECT COUNT(*) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id) = 0 AND in_interventi.idstatointervento IN(SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0) AND DATE_ADD(IF(in_interventi.data_scadenza IS NULL, in_interventi.data_richiesta, in_interventi.data_scadenza), INTERVAL 1 DAY) <= NOW()'; + WHERE + (SELECT COUNT(*) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) = 0 + AND `in_interventi`.`idstatointervento` IN(SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) + AND DATE_ADD(IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`), INTERVAL 1 DAY) <= NOW()'; $numero_mesi_precenti = $dbo->fetchNum($query_mesi_precenti); if ($numero_mesi_precenti > 0) { diff --git a/modules/fatture/add_intervento.php b/modules/fatture/add_intervento.php index 692e3e589..60628e9b9 100755 --- a/modules/fatture/add_intervento.php +++ b/modules/fatture/add_intervento.php @@ -65,17 +65,19 @@ echo ' '; $rs = $dbo->fetchArray('SELECT - in_interventi.id, - CONCAT(\'Attività numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\'), " [", `in_statiintervento`.`descrizione` , "]") AS descrizione, - CONCAT(\'Attività numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\')) AS info, - CONCAT(\'\n\', in_interventi.descrizione) AS descrizione_intervento, - IF(idclientefinale='.prepare($idanagrafica).', \'Interventi conto terzi\', \'Interventi diretti\') AS `optgroup` + `in_interventi`.`id`, + CONCAT(\'Attività numero \', `in_interventi`.`codice`, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id`), `in_interventi`.`data_richiesta`), \'%d/%m/%Y\'), " [", `in_statiintervento_lang`.`name` , "]") AS descrizione, + CONCAT(\'Attività numero \', `in_interventi`.`codice`, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id`), `in_interventi`.`data_richiesta`), \'%d/%m/%Y\')) AS info, + CONCAT(\'\n\', `in_interventi`.`descrizione`) AS descrizione_intervento, + IF(`idclientefinale`='.prepare($idanagrafica).', \'Interventi conto terzi\', \'Interventi diretti\') AS `optgroup` FROM - in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento + `in_interventi` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` + LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE - (in_interventi.idanagrafica='.prepare($idanagrafica).' OR in_interventi.idclientefinale='.prepare($idanagrafica).') - AND in_statiintervento.is_fatturabile=1 - AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) + (`in_interventi`.`idanagrafica`='.prepare($idanagrafica).' OR `in_interventi`.`idclientefinale`='.prepare($idanagrafica).') + AND `in_statiintervento`.`is_fatturabile`=1 + AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) '.$where); foreach ($rs as $key => $value) { $intervento = Modules\Interventi\Intervento::find($value['id']); diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index a9473d718..0a92ea472 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -764,13 +764,13 @@ if (!$block_edit) { } // Lettura interventi non rifiutati, non fatturati - $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idanagrafica='.prepare($record['idanagrafica']).' AND in_statiintervento.is_fatturabile=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) '.$where; + $int_query = 'SELECT COUNT(*) AS tot FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE `idanagrafica`='.prepare($record['idanagrafica']).' AND `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) '.$where; $interventi = $dbo->fetchArray($int_query)[0]['tot']; // Se non trovo niente provo a vedere se ce ne sono per clienti terzi if (empty($interventi)) { // Lettura interventi non rifiutati, non fatturati - $int_query = 'SELECT COUNT(*) AS tot FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE idclientefinale='.prepare($record['idanagrafica']).' AND in_statiintervento.is_fatturabile=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) '.$where; + $int_query = 'SELECT COUNT(*) AS tot FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE `idclientefinale`='.prepare($record['idanagrafica']).' AND `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) '.$where; $interventi = $dbo->fetchArray($int_query)[0]['tot']; } diff --git a/modules/fatture/src/Components/RelationTrait.php b/modules/fatture/src/Components/RelationTrait.php index d01eebc65..aefd0c03e 100755 --- a/modules/fatture/src/Components/RelationTrait.php +++ b/modules/fatture/src/Components/RelationTrait.php @@ -172,7 +172,7 @@ trait RelationTrait $result = parent::delete(); if (!empty($this->idintervento) && $this->fattura->getRighe()->where('idintervento', $this->idintervento)->count() == 1) { - database()->query("UPDATE in_interventi SET idstatointervento = (SELECT idstatointervento FROM in_statiintervento WHERE codice = 'OK') WHERE id=".prepare($this->idintervento)); + database()->query("UPDATE `in_interventi` SET `idstatointervento` = (SELECT `id` FROM `in_statiintervento` WHERE `codice` = 'OK') WHERE `id`=".prepare($this->idintervento)); } return $result; diff --git a/modules/impianti/plugins/my_impianti.interventi.php b/modules/impianti/plugins/my_impianti.interventi.php index b39b606b7..6c695bfd6 100644 --- a/modules/impianti/plugins/my_impianti.interventi.php +++ b/modules/impianti/plugins/my_impianti.interventi.php @@ -85,7 +85,7 @@ if (filter('op') == 'link_impianti') { } // Blocco della modifica impianti se l'intervento è completato -$dati_intervento = $dbo->fetchArray('SELECT in_statiintervento.is_completato FROM in_statiintervento INNER JOIN in_interventi ON in_statiintervento.idstatointervento = in_interventi.idstatointervento WHERE in_interventi.id='.prepare($id_record)); +$dati_intervento = $dbo->fetchArray('SELECT `in_statiintervento`.`is_completato` FROM `in_statiintervento` INNER JOIN `in_interventi` ON `in_statiintervento`.`id` = `in_interventi`.`idstatointervento` WHERE `in_interventi`.`id`='.prepare($id_record)); $is_completato = $dati_intervento[0]['is_completato']; if ($is_completato) { diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index ca6a039f4..7ad67d767 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -132,8 +132,8 @@ switch (post('op')) { ]); // Notifica cambio stato intervento - $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => post('idstatointervento')]); - if (!empty($stato['notifica']) && $stato['idstatointervento'] != $record['idstatointervento']) { + $stato = $dbo->selectOne('in_statiintervento', '*', ['id' => post('idstatointervento')]); + if (!empty($stato['notifica']) && $stato['id'] != $record['idstatointervento']) { $template = Template::find($stato['id_email']); if (!empty($stato['destinatari'])) { @@ -182,7 +182,7 @@ switch (post('op')) { if (post('id_intervento') == null) { $idanagrafica = post('idanagrafica'); $idtipointervento = post('idtipointervento'); - $idstatointervento = post('idstatointervento'); + $idstatointervento = post('id'); $data_richiesta = post('data_richiesta'); $data_scadenza = post('data_scadenza') ?: null; $id_segment = post('id_segment'); @@ -349,7 +349,7 @@ switch (post('op')) { // Calcolo il nuovo codice $new->codice = Intervento::getNextCodice($data_ricorrenza, $new->id_segment); $new->data_richiesta = $data_ricorrenza; - $new->idstatointervento = $stato->idstatointervento; + $new->idstatointervento = $stato->id; $new->save(); $idintervento = $new->id; @@ -674,7 +674,7 @@ switch (post('op')) { // Modifica finale dello stato /* if (post('create_document') == 'on') { - $intervento->idstatointervento = post('id_stato_intervento'); + $intervento->id = post('id_stato_intervento'); $intervento->save(); }*/ @@ -711,11 +711,11 @@ switch (post('op')) { flash()->info(tr('Firma salvata correttamente!')); $id_stato = setting("Stato dell'attività dopo la firma"); - $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => $id_stato]); + $stato = $dbo->selectOne('in_statiintervento', '*', ['id' => $id_stato]); $intervento = Intervento::find($id_record); if (!empty($stato)) { $intervento = Intervento::find($id_record); - $intervento->idstatointervento = $stato['idstatointervento']; + $intervento->id = $stato['id']; $intervento->save(); } @@ -791,11 +791,11 @@ switch (post('op')) { ++$firmati; $id_stato = setting("Stato dell'attività dopo la firma"); - $stato = $dbo->selectOne('in_statiintervento', '*', ['idstatointervento' => $id_stato]); + $stato = $dbo->selectOne('in_statiintervento', '*', ['id' => $id_stato]); $intervento = Intervento::find($id_record); if (!empty($stato)) { $intervento = Intervento::find($id_record); - $intervento->idstatointervento = $stato['idstatointervento']; + $intervento->id = $stato['id']; $intervento->save(); } diff --git a/modules/interventi/add.php b/modules/interventi/add.php index 300ed7239..3de0a3a58 100755 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -206,7 +206,7 @@ echo '
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "'.($origine_dashboard ? setting('Stato predefinito dell\'attività da Dashboard') : setting('Stato predefinito dell\'attività')).'" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "id", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `in_statiintervento_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL ORDER BY `name`", "value": "'.($origine_dashboard ? setting('Stato predefinito dell\'attività da Dashboard') : setting('Stato predefinito dell\'attività')).'" ]}
@@ -394,7 +394,7 @@ echo '
- {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "idstatoricorrenze", "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL AND is_completato=0 ORDER BY descrizione" ]} + {[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "idstatoricorrenze", "values": "query=SELECT `in_statiintervento`.`id`,`in_statiintervento_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL AND `is_completato`=0 ORDER BY `name`" ]}
diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php index bc115d1c7..464605133 100755 --- a/modules/interventi/ajax_costi.php +++ b/modules/interventi/ajax_costi.php @@ -28,7 +28,7 @@ $righe = $intervento->getRighe(); $show_prezzi = Auth::user()['gruppo'] != 'Tecnici' || (Auth::user()['gruppo'] == 'Tecnici' && setting('Mostra i prezzi al tecnico')); if ($show_prezzi) { - $rss = $dbo->fetchArray('SELECT in_statiintervento.is_completato AS flag_completato FROM in_statiintervento INNER JOIN in_interventi ON in_statiintervento.idstatointervento=in_interventi.idstatointervento WHERE in_interventi.id='.prepare($id_record)); + $rss = $dbo->fetchArray('SELECT `in_statiintervento`.`is_completato` AS flag_completato FROM `in_statiintervento` INNER JOIN `in_interventi` ON `in_statiintervento`.`id`=`in_interventi`.`idstatointervento` WHERE `in_interventi`.`id`='.prepare($id_record)); if ($rss[0]['flag_completato']) { $readonly = 'readonly'; diff --git a/modules/interventi/ajax_tecnici.php b/modules/interventi/ajax_tecnici.php index 5e069540e..37faf8506 100755 --- a/modules/interventi/ajax_tecnici.php +++ b/modules/interventi/ajax_tecnici.php @@ -27,7 +27,7 @@ if ($user['gruppo'] == 'Tecnici') { } // Stato dell'intervento -$rss = $dbo->fetchArray('SELECT is_completato AS flag_completato FROM in_statiintervento WHERE idstatointervento = (SELECT idstatointervento FROM in_interventi WHERE id='.prepare($id_record).')'); +$rss = $dbo->fetchArray('SELECT `is_completato` AS flag_completato FROM `in_statiintervento` INNER JOIN `in_interventi` ON `in_statiintervento`.`id` = `in_interventi`.`idstatointervento` WHERE `in_interventi`.`id`='.prepare($id_record).')'); $is_completato = $rss[0]['flag_completato']; // Sessioni dell'intervento diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php index c4d8634f7..f1c1db902 100755 --- a/modules/interventi/bulk.php +++ b/modules/interventi/bulk.php @@ -95,7 +95,7 @@ switch (post('op')) { $raggruppamento = post('raggruppamento'); $where = ''; - $query = 'SELECT *, IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id), in_interventi.data_richiesta) AS data, in_statiintervento.descrizione AS stato, in_interventi.codice AS codice_intervento FROM in_interventi INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento WHERE in_statiintervento.is_fatturabile=1 AND in_interventi.id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND in_interventi.id IN ('.implode(',', $id_records).')'; + $query = 'SELECT *, IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`), `in_interventi`.`data_richiesta`) AS data, `in_statiintervento_lang`.`name` AS stato, `in_interventi`.`codice` AS codice_intervento FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record`=`in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang`='.prepare(setting('Lingua')).') WHERE `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) AND `in_interventi`.`id` IN ('.implode(',', $id_records).')'; // Se non è attiva la relativa impostazione considero solo interventi non collegati a contratti, ordini o preventivi (default) if (!setting('Permetti fatturazione delle attività collegate a contratti')) { @@ -432,7 +432,7 @@ $operations['cambia_stato'] = [ 'data' => [ 'title' => tr('Vuoi davvero cambiare lo stato per questi interventi?'), 'msg' => tr('Seleziona lo stato in cui spostare tutti gli interventi non completati').'.
-
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione" ]}', +
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL ORDER BY `name`" ]}', 'button' => tr('Procedi'), 'class' => 'btn btn-lg btn-warning', 'blank' => false, @@ -444,7 +444,7 @@ $operations['copy-bulk'] = [ 'data' => [ 'title' => tr('Vuoi davvero fare una copia degli interventi selezionati?'), 'msg' => '
{[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "required": 0, "value": "-now-", "required":1 ]} -
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "" ]} +
{[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatointervento", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL ORDER BY `name`", "value": "" ]}
{[ "type":"checkbox", "label":"'.tr('Duplica righe').'", "name":"righe", "value":"" ]}
{[ "type":"checkbox", "label":"'.tr('Duplica sessioni').'", "name":"sessioni", "value":"" ]}
{[ "type":"checkbox", "label":"'.tr('Duplica impianti').'", "name":"impianti", "value":"" ]} diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index 418939cfa..237313d26 100755 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -342,7 +342,7 @@ echo '
- {[ "type": "select", "label": "", "name": "idstatointervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "$idstatointervento$", "class": "unblockable" ]} + {[ "type": "select", "label": "", "name": "idstatointervento", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = ) WHERE `deleted_at` IS NULL ORDER BY `name`", "value": "$id$", "class": "unblockable" ]}
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `name` as descrizione, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `deleted_at` IS NULL ORDER BY `name`", "value": "" ]}
diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index 24f59e6af..5beace48e 100755 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -333,7 +333,7 @@ if (!function_exists('aggiungi_intervento_in_fattura')) { ricalcola_costiagg_fattura($id_fattura); // Metto l'intervento in stato "Fatturato" - $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE codice='FAT') WHERE id=".prepare($id_intervento)); + $dbo->query("UPDATE `in_interventi` SET `idstatointervento`=(SELECT `id` FROM `in_statiintervento` WHERE `codice`='FAT') WHERE `id`=".prepare($id_intervento)); } } diff --git a/modules/interventi/src/API/v1/Interventi.php b/modules/interventi/src/API/v1/Interventi.php index 2221e9bd7..40eda1f14 100755 --- a/modules/interventi/src/API/v1/Interventi.php +++ b/modules/interventi/src/API/v1/Interventi.php @@ -41,13 +41,19 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface, 'in_interventi.*', 'MAX(in_interventi_tecnici.orario_fine) as data', 'GROUP_CONCAT(DISTINCT b.ragione_sociale SEPARATOR \', \') AS tecnici', - 'in_statiintervento.descrizione AS stato', + 'in_statiintervento_lang.name AS stato', ]; $joins[] = [ 'in_statiintervento', 'in_interventi.idstatointervento', - 'in_statiintervento.idstatointervento', + 'in_statiintervento.id', + ]; + + $joins[] = [ + 'in_statiintervento_lang', + 'in_statiintervento_lang.id_record', + 'in_statiintervento.id', ]; $joins[] = [ @@ -115,7 +121,7 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface, $intervento = Intervento::find($data['id']); - $intervento->idstatointervento = $data['id_stato_intervento']; + $intervento->id = $data['id_stato_intervento']; $intervento->descrizione = $data['descrizione']; $intervento->informazioniaggiuntive = $data['informazioni_aggiuntive']; $intervento->save(); diff --git a/modules/interventi/src/API/v1/Sync.php b/modules/interventi/src/API/v1/Sync.php index dd28fd873..fb0440451 100755 --- a/modules/interventi/src/API/v1/Sync.php +++ b/modules/interventi/src/API/v1/Sync.php @@ -21,6 +21,7 @@ namespace Modules\Interventi\API\v1; use API\Interfaces\RetrieveInterface; use API\Interfaces\UpdateInterface; +use Modules\Interventi\Stato; use API\Resource; use Carbon\Carbon; @@ -144,7 +145,7 @@ class Sync extends Resource implements RetrieveInterface, UpdateInterface $idriga = $rs_copie[0]['id']; } else { $idintervento = get_new_idintervento(); - $stato = $database->fetchArray("SELECT * FROM in_statiintervento WHERE descrizione = 'Chiamata'"); + $stato = (new Stato())->getByName('Chiamata')->id_record; $database->insert('in_interventi', [ 'idintervento' => $idintervento, @@ -152,7 +153,7 @@ class Sync extends Resource implements RetrieveInterface, UpdateInterface 'data_richiesta' => Carbon::now(), 'richiesta' => $richiesta, 'idtipointervento' => 0, - 'idstatointervento' => $stato['idstatointerventoWIP'], + 'idstatointervento' => $stato, 'oggetto' => $summary, ]); diff --git a/modules/interventi/src/Stato.php b/modules/interventi/src/Stato.php index 005388484..f7fe98d73 100755 --- a/modules/interventi/src/Stato.php +++ b/modules/interventi/src/Stato.php @@ -25,8 +25,7 @@ use Illuminate\Database\Eloquent\Model; class Stato extends Model { use SimpleModelTrait; - - protected $primaryKey = 'idstatointervento'; + protected $table = 'in_statiintervento'; public function interventi() @@ -44,4 +43,34 @@ class Stato extends Model return $model; } + + /** + * Ritorna l'attributo name dello stato intervento. + * + * @return string + */ + public function getNameAttribute() + { + return database()->table($this->table.'_lang') + ->select('name') + ->where('id_record', '=', $this->id) + ->where('id_lang', '=', setting('Lingua')) + ->first()->name; + } + + /** + * Ritorna l'id dello stato intervento a partire dal nome. + * + * @param string $name il nome da ricercare + * + * @return \Illuminate\Support\Collection + */ + public function getByName($name) + { + return database()->table($this->table.'_lang') + ->select('id_record') + ->where('name', '=', $name) + ->where('id_lang', '=', setting('Lingua')) + ->first(); + } } diff --git a/modules/interventi/variables.php b/modules/interventi/variables.php index d35f6f425..6e415fb43 100755 --- a/modules/interventi/variables.php +++ b/modules/interventi/variables.php @@ -18,20 +18,22 @@ */ $r = $dbo->fetchOne('SELECT *, - an_anagrafiche.idanagrafica AS id_anagrafica, - an_anagrafiche.email, - an_anagrafiche.pec, - an_referenti.nome, - in_interventi.codice AS codice, - (SELECT MAX(orario_fine) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS data_fine, - (SELECT descrizione FROM in_statiintervento WHERE idstatointervento=in_interventi.idstatointervento) AS stato, - impianti.descrizione AS impianti, - in_interventi.descrizione AS descrizione -FROM in_interventi - INNER JOIN an_anagrafiche ON in_interventi.idanagrafica = an_anagrafiche.idanagrafica - LEFT OUTER JOIN an_referenti ON an_referenti.id=in_interventi.idreferente - LEFT JOIN (SELECT GROUP_CONCAT(CONCAT(matricola, IF(nome != "", CONCAT(" - ", nome), "")) SEPARATOR "
") AS descrizione, my_impianti_interventi.idintervento FROM my_impianti INNER JOIN my_impianti_interventi ON my_impianti.id = my_impianti_interventi.idimpianto GROUP BY my_impianti_interventi.idintervento) AS impianti ON impianti.idintervento = in_interventi.id -WHERE in_interventi.id='.prepare($id_record)); + `an_anagrafiche`.`idanagrafica` AS id_anagrafica, + `an_anagrafiche`.`email`, + `an_anagrafiche`.`pec`, + `an_referenti`.`nome`, + `in_interventi`.`codice` AS codice, + (SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `idintervento`=`in_interventi`.`id`) AS data_fine, + `in_statiintervento_lang`.`name` AS stato, + `impianti`.`descrizione` AS impianti, + `in_interventi`.`descrizione` AS descrizione + FROM `in_interventi` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`id` + LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).') + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN `an_referenti` ON `an_referenti`.`id`=`in_interventi`.`idreferente` + LEFT JOIN (SELECT GROUP_CONCAT(CONCAT(`matricola`, IF(`nome` != "", CONCAT(" - ", `nome`), "")) SEPARATOR "
") AS descrizione, `my_impianti_interventi`.`idintervento` FROM `my_impianti` INNER JOIN `my_impianti_interventi` ON `my_impianti`.`id` = `my_impianti_interventi`.`idimpianto` GROUP BY `my_impianti_interventi`.`idintervento`) AS impianti ON `impianti`.`idintervento` = `in_interventi`.`id` + WHERE `in_interventi`.`id`='.prepare($id_record)); // Variabili da sostituire return [ diff --git a/modules/interventi/widgets/interventi_confermati.php b/modules/interventi/widgets/interventi_confermati.php index 9e93c8361..5515eb6e6 100755 --- a/modules/interventi/widgets/interventi_confermati.php +++ b/modules/interventi/widgets/interventi_confermati.php @@ -19,7 +19,10 @@ 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.codice=\'WIP\') ORDER BY data_richiesta ASC'); +use Modules\Interventi\Stato; + +$stato_wip = (new Stato())->getByName('WIP')->id_record; +$rs = $dbo->fetchArray('SELECT * FROM `in_interventi` WHERE `in_interventi`.`idstatointervento` = '.prepare($stato_wip).' ORDER BY `data_richiesta` ASC'); if (!empty($rs)) { echo ' diff --git a/modules/interventi/widgets/interventi_da_pianificare.php b/modules/interventi/widgets/interventi_da_pianificare.php index 14e237805..0a4150ad1 100755 --- a/modules/interventi/widgets/interventi_da_pianificare.php +++ b/modules/interventi/widgets/interventi_da_pianificare.php @@ -97,8 +97,8 @@ foreach ($raggruppamenti as $mese => $raggruppamento) { '.$rs_tecnici[0]['tecnici'].' - '.$dbo->fetchOne("SELECT CONCAT_WS(' - ', codice,descrizione) AS descrizione FROM in_tipiintervento WHERE idtipointervento=".prepare($r['idtipointervento']))['descrizione'].' - '.$dbo->fetchOne("SELECT CONCAT_WS(' - ', codice,descrizione) AS descrizione FROM in_statiintervento WHERE idstatointervento=".prepare($r['idstatointervento']))['descrizione'].' + '.$dbo->fetchOne("SELECT CONCAT_WS(' - ', `codice`,`descrizione`) AS descrizione FROM `in_tipiintervento` WHERE `idtipointervento`=".prepare($r['idtipointervento']))['descrizione'].' + '.$dbo->fetchOne("SELECT CONCAT_WS(' - ', `codice`,`name`) AS descrizione FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang` = ".prepare(setting('Lingua')).") WHERE `in_statiintervento`.`id`=".prepare($r['idstatointervento']))['descrizione'].' '.nl2br($r['richiesta']).' '; diff --git a/modules/interventi/widgets/interventi_da_programmare.php b/modules/interventi/widgets/interventi_da_programmare.php index c33ad02ad..50df6e902 100755 --- a/modules/interventi/widgets/interventi_da_programmare.php +++ b/modules/interventi/widgets/interventi_da_programmare.php @@ -19,7 +19,10 @@ 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.codice=\'TODO\') ORDER BY data_richiesta ASC'); +use Modules\Interventi\Stato; + +$stato = (new Stato())->getByName('TODO')->id_record; +$rs = $dbo->fetchArray('SELECT * FROM `in_interventi` WHERE `in_interventi`.`idstatointervento` = '.prepare($stato).' ORDER BY `data_richiesta` ASC'); if (!empty($rs)) { echo ' diff --git a/modules/mappa/actions.php b/modules/mappa/actions.php index 389e11566..29b66ea2d 100644 --- a/modules/mappa/actions.php +++ b/modules/mappa/actions.php @@ -29,19 +29,19 @@ switch (get('op')) { $where = []; // Filtro per anagrafica if (!empty($idanagrafica) && $idanagrafica != 'null') { - $where[] = 'in_interventi.idanagrafica='.prepare($idanagrafica); + $where[] = '`in_interventi`.`idanagrafica`='.prepare($idanagrafica); } // Filtri per stato $checks = explode(',', $checks); - $where[] = "in_statiintervento.descrizione IN ('".implode("','", $checks)."')"; + $where[] = "`in_statiintervento_lang`.`name` IN ('".implode("','", $checks)."')"; $add_query = 'WHERE 1=1 AND '.implode(' AND ', $where); // Filtri per data $add_query .= ' |date_period(`orario_inizio`,`data_richiesta`)|'; - $query = 'SELECT *, in_interventi.id AS idintervento, an_anagrafiche.lat AS lat_anagrafica, an_anagrafiche.lng AS lng_anagrafica, an_anagrafiche.indirizzo AS indirizzo_anagrafica, an_anagrafiche.cap AS cap_anagrafica, an_anagrafiche.citta AS citta_anagrafica, an_anagrafiche.provincia AS provincia_anagrafica, an_sedi.lat AS lat_sede, an_sedi.lng AS lng_sede, an_sedi.indirizzo AS indirizzo_sede, an_sedi.cap AS cap_sede, an_sedi.citta AS citta_sede, an_sedi.provincia AS provincia_sede, in_statiintervento.descrizione AS stato FROM in_interventi INNER JOIN an_anagrafiche ON in_interventi.idanagrafica=an_anagrafiche.idanagrafica LEFT JOIN an_sedi ON in_interventi.idsede_destinazione=an_sedi.id INNER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento LEFT JOIN in_interventi_tecnici ON in_interventi_tecnici.idintervento = in_interventi.id '.$add_query; + $query = 'SELECT *, `in_interventi`.`id` AS idintervento, `an_anagrafiche`.`lat` AS lat_anagrafica, `an_anagrafiche`.`lng` AS lng_anagrafica, `an_anagrafiche`.`indirizzo` AS indirizzo_anagrafica, `an_anagrafiche`.`cap` AS cap_anagrafica, `an_anagrafiche`.`citta` AS citta_anagrafica, `an_anagrafiche`.`provincia` AS provincia_anagrafica, `an_sedi`.`lat` AS lat_sede, `an_sedi`.`lng` AS lng_sede, `an_sedi`.`indirizzo` AS indirizzo_sede, `an_sedi`.`cap` AS cap_sede, `an_sedi`.`citta` AS citta_sede, `an_sedi`.`provincia` AS provincia_sede, `in_statiintervento_lang`.`name` AS stato FROM `in_interventi` INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` LEFT JOIN `an_sedi` ON `in_interventi`.`idsede_destinazione`=`an_sedi`.`id` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_interventi`.`id` AND `in_statiintervento_lang`.`id_lang`= '.prepare(setting('Lingua')).') LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` '.$add_query; $query = Query::replacePlaceholder($query); $query = Modules::replaceAdditionals(Modules::get('Interventi')['id'], $query); diff --git a/modules/mappa/edit.php b/modules/mappa/edit.php index 15fca2994..2b71e407f 100644 --- a/modules/mappa/edit.php +++ b/modules/mappa/edit.php @@ -57,15 +57,15 @@ include_once __DIR__.'/../../core.php';
fetchArray('SELECT * FROM in_statiintervento'); + $rs_stati = $dbo->fetchArray('SELECT * FROM `in_statiintervento`LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(setting('Lingua')).')'); foreach ($rs_stati as $stato) { ?>
- +
- - + +
update('in_statiintervento', [ 'codice' => post('codice'), - 'descrizione' => post('descrizione'), 'colore' => post('colore'), 'is_completato' => post('is_completato'), 'is_fatturabile' => post('is_fatturabile'), @@ -33,7 +32,11 @@ switch (post('op')) { 'notifica_tecnico_assegnato' => post('notifica_tecnico_sessione'), 'id_email' => post('email') ?: null, 'destinatari' => post('destinatari'), - ], ['idstatointervento' => $id_record]); + ], ['id' => $id_record]); + + $dbo->update('in_statiintervento_lang', [ + 'descrizione' => post('descrizione'), + ], ['id_record' => $id_record, 'id_lang' => setting('Lingua')]); flash()->info(tr('Informazioni salvate correttamente.')); @@ -45,14 +48,15 @@ switch (post('op')) { $colore = post('colore'); // controllo che il codice non sia duplicato - if (count($dbo->fetchArray('SELECT idstatointervento FROM in_statiintervento WHERE codice='.prepare($codice))) > 0) { + if (count($dbo->fetchArray('SELECT `id` FROM `in_statiintervento` WHERE `codice`='.prepare($codice))) > 0) { flash()->warning(tr('Attenzione: lo stato attività _COD_ risulta già esistente.', [ '_COD_' => $codice, ])); } else { - $query = 'INSERT INTO in_statiintervento(codice, descrizione, colore) VALUES ('.prepare($codice).', '.prepare($descrizione).', '.prepare($colore).')'; - $dbo->query($query); + $dbo->query('INSERT INTO in_statiintervento(codice, colore) VALUES ('.prepare($codice).', '.prepare($colore).')'); $id_record = $database->lastInsertedID(); + + $dbo->query('INSERT INTO in_statiintervento_lang (name, id_record, id_lang) VALUES ('.prepare($descrizione).', '.prepare($id_record).', '.prepare(setting('Lingua')).')'); flash()->info(tr('Nuovo stato attività aggiunto.')); } @@ -60,10 +64,10 @@ switch (post('op')) { case 'delete': // scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato negli interventi - if (count($dbo->fetchArray('SELECT id FROM in_interventi WHERE idstatointervento='.prepare($id_record))) > 0) { - $query = 'UPDATE in_statiintervento SET deleted_at = NOW() WHERE idstatointervento='.prepare($id_record).' AND `can_delete`=1'; + if (count($dbo->fetchArray('SELECT `id` FROM `in_interventi` WHERE `idstatointervento`='.prepare($id_record))) > 0) { + $query = 'UPDATE `in_statiintervento` SET `deleted_at` = NOW() WHERE `id`='.prepare($id_record).' AND `can_delete`=1'; } else { - $query = 'DELETE FROM in_statiintervento WHERE idstatointervento='.prepare($id_record).' AND `can_delete`=1'; + $query = 'DELETE FROM `in_statiintervento` WHERE `id`='.prepare($id_record).' AND `can_delete`=1'; } $dbo->query($query); diff --git a/modules/stati_intervento/init.php b/modules/stati_intervento/init.php index c1635575b..9aca20e90 100755 --- a/modules/stati_intervento/init.php +++ b/modules/stati_intervento/init.php @@ -20,5 +20,5 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT * FROM in_statiintervento WHERE idstatointervento='.prepare($id_record)); + $record = $dbo->fetchOne('SELECT * FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = "'.prepare(setting('Lingua')).'") WHERE `id`='.prepare($id_record)); } diff --git a/modules/stati_intervento/src/API/v1/StatiInterventi.php b/modules/stati_intervento/src/API/v1/StatiInterventi.php index 7a49bcddd..ad11ce8a3 100755 --- a/modules/stati_intervento/src/API/v1/StatiInterventi.php +++ b/modules/stati_intervento/src/API/v1/StatiInterventi.php @@ -32,7 +32,6 @@ class StatiInterventi extends Resource implements RetrieveInterface if (empty($select)) { $select = [ '*', - 'id' => 'idstatointervento', ]; } diff --git a/modules/statistiche/edit.php b/modules/statistiche/edit.php index c25e85dfb..1be291b82 100755 --- a/modules/statistiche/edit.php +++ b/modules/statistiche/edit.php @@ -513,7 +513,7 @@ ORDER BY $dataset = ''; $where = implode(',', (array) json_decode($_SESSION['superselect']['idtipiintervento'])) != '' ? '`in_interventi_tecnici`.`idtipointervento` IN('.implode(',', (array) json_decode($_SESSION['superselect']['idtipiintervento'])).')' : '1=1'; foreach ($tecnici as $tecnico) { - $sessioni = $dbo->fetchArray('SELECT SUM(`in_interventi_tecnici`.`ore`) AS result, CONCAT(CAST(SUM(`in_interventi_tecnici`.`ore`) AS char(20)),\' ore\') AS ore_lavorate, YEAR(`in_interventi_tecnici`.`orario_inizio`) AS year, MONTH(`in_interventi_tecnici`.`orario_inizio`) AS month FROM `in_interventi_tecnici` INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE `in_interventi_tecnici`.`idtecnico` = '.prepare($tecnico['id']).' AND `in_interventi_tecnici`.`orario_inizio` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `in_statiintervento`.`is_completato` AND '.$where.' GROUP BY YEAR(`in_interventi_tecnici`.`orario_inizio`), MONTH(`in_interventi_tecnici`.`orario_inizio`) ORDER BY YEAR(`in_interventi_tecnici`.`orario_inizio`) ASC, MONTH(`in_interventi_tecnici`.`orario_inizio`) ASC'); + $sessioni = $dbo->fetchArray('SELECT SUM(`in_interventi_tecnici`.`ore`) AS result, CONCAT(CAST(SUM(`in_interventi_tecnici`.`ore`) AS char(20)),\' ore\') AS ore_lavorate, YEAR(`in_interventi_tecnici`.`orario_inizio`) AS year, MONTH(`in_interventi_tecnici`.`orario_inizio`) AS month FROM `in_interventi_tecnici` INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE `in_interventi_tecnici`.`idtecnico` = '.prepare($tecnico['id']).' AND `in_interventi_tecnici`.`orario_inizio` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `in_statiintervento`.`is_completato` AND '.$where.' GROUP BY YEAR(`in_interventi_tecnici`.`orario_inizio`), MONTH(`in_interventi_tecnici`.`orario_inizio`) ORDER BY YEAR(`in_interventi_tecnici`.`orario_inizio`) ASC, MONTH(`in_interventi_tecnici`.`orario_inizio`) ASC'); $sessioni = Stats::monthly($sessioni, $start, $end); diff --git a/src/API/App/v1/Interventi.php b/src/API/App/v1/Interventi.php index e2f552c7d..0eb25de9e 100755 --- a/src/API/App/v1/Interventi.php +++ b/src/API/App/v1/Interventi.php @@ -127,41 +127,38 @@ class Interventi extends AppResource if (\Auth::user()->is_admin) { $query = ' SELECT - in_interventi.id, - in_interventi.updated_at + `in_interventi`.`id`, + `in_interventi`.`updated_at` FROM - in_interventi + `in_interventi` WHERE - deleted_at IS NULL AND (in_interventi.id IN ( - SELECT idintervento FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento = in_interventi.id AND in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end + `deleted_at` IS NULL AND (`in_interventi`.`id` IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` AND `in_interventi_tecnici`.`orario_fine` BETWEEN :period_start AND :period_end) + OR + (`in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `in_interventi_tecnici`) AND `in_interventi`.`idstatointervento` IN (SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) ) - OR ( - in_interventi.id NOT IN ( SELECT idintervento FROM in_interventi_tecnici - ) - AND in_interventi.idstatointervento IN (SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0) - ) - )'; + )'; } else { $query = ' SELECT - in_interventi.id, - in_interventi.updated_at + `in_interventi`.`id`, + `in_interventi`.`updated_at` FROM - in_interventi + `in_interventi` WHERE - deleted_at IS NULL AND ( - in_interventi.id IN ( - SELECT idintervento FROM in_interventi_tecnici - WHERE in_interventi_tecnici.idintervento = in_interventi.id - AND in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end - AND in_interventi_tecnici.idtecnico = :id_tecnico_q1 + `deleted_at` IS NULL AND ( + `in_interventi`.`id` IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` + WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` + AND `in_interventi_tecnici`.`orario_fine` BETWEEN :period_start AND :period_end + AND `in_interventi_tecnici`.`idtecnico` = :id_tecnico_q1 ) OR ( - in_interventi.id NOT IN ( - SELECT idintervento FROM in_interventi_tecnici + `in_interventi`.`id` NOT IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` ) - AND in_interventi.idstatointervento IN (SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0) AND in_interventi.id IN ( - SELECT id_intervento FROM in_interventi_tecnici_assegnati WHERE in_interventi_tecnici_assegnati.id_tecnico = :id_tecnico_q2 + AND `in_interventi`.`idstatointervento` IN (SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) AND `in_interventi`.`id` IN ( + SELECT `id_intervento` FROM `in_interventi_tecnici_assegnati` WHERE `in_interventi_tecnici_assegnati`.`id_tecnico` = :id_tecnico_q2 ) ) )'; @@ -170,44 +167,44 @@ class Interventi extends AppResource if (\Auth::user()->is_admin) { $query = ' SELECT - in_interventi.id, - in_interventi.updated_at + `in_interventi`.`id`, + `in_interventi`.`updated_at` FROM - in_interventi + `in_interventi` WHERE - deleted_at IS NULL AND ( - in_interventi.id IN ( - SELECT idintervento FROM in_interventi_tecnici - WHERE in_interventi_tecnici.idintervento = in_interventi.id - AND in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end + `deleted_at` IS NULL AND ( + `in_interventi`.`id` IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` + WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` + AND `in_interventi_tecnici`.`orario_fine` BETWEEN :period_start AND :period_end ) OR ( - in_interventi.id NOT IN ( - SELECT idintervento FROM in_interventi_tecnici + `in_interventi`.`id` NOT IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` ) - AND in_interventi.idstatointervento IN (SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0) + AND `in_interventi`.`idstatointervento` IN (SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) ) )'; } else { $query = ' SELECT - in_interventi.id, - in_interventi.updated_at + `in_interventi`.`id`, + `in_interventi`.`updated_at` FROM - in_interventi + `in_interventi` WHERE - deleted_at IS NULL AND ( - in_interventi.id IN ( - SELECT idintervento FROM in_interventi_tecnici - WHERE in_interventi_tecnici.idintervento = in_interventi.id - AND in_interventi_tecnici.orario_fine BETWEEN :period_start AND :period_end - AND in_interventi_tecnici.idtecnico = :id_tecnico_q1 + `deleted_at` IS NULL AND ( + `in_interventi`.`id` IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` + WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` + AND `in_interventi_tecnici`.`orario_fine` BETWEEN :period_start AND :period_end + AND `in_interventi_tecnici`.`idtecnico` = :id_tecnico_q1 ) OR ( - in_interventi.id NOT IN ( - SELECT idintervento FROM in_interventi_tecnici + `in_interventi`.`id` NOT IN ( + SELECT `idintervento` FROM `in_interventi_tecnici` ) - AND in_interventi.idstatointervento IN (SELECT idstatointervento FROM in_statiintervento WHERE is_completato = 0) + AND `in_interventi`.`idstatointervento` IN (SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) ) )'; } @@ -218,10 +215,10 @@ class Interventi extends AppResource // Possibile problematica: in caso di rimozione di un tecnico assegnato o impianto collegato, la modifica non viene rilevata if ($last_sync_at) { $query .= ' AND ( - in_interventi.updated_at > '.prepare($last_sync_at).' OR - in_interventi.id IN ( - SELECT idintervento FROM my_impianti_interventi WHERE my_impianti_interventi.created_at > '.prepare($last_sync_at).' - UNION SELECT id_intervento FROM in_interventi_tecnici_assegnati WHERE in_interventi_tecnici_assegnati.created_at > '.prepare($last_sync_at).' + `in_interventi`.`updated_at` > '.prepare($last_sync_at).' OR + `in_interventi`.`id` IN ( + SELECT `idintervento` FROM `my_impianti_interventi` WHERE `my_impianti_interventi`.`created_at` > '.prepare($last_sync_at).' + UNION SELECT `id_intervento` FROM `in_interventi_tecnici_assegnati` WHERE `in_interventi_tecnici_assegnati`.`created_at` > '.prepare($last_sync_at).' ) )'; } diff --git a/src/API/App/v1/StatiIntervento.php b/src/API/App/v1/StatiIntervento.php index 6dd592657..74aff6d07 100644 --- a/src/API/App/v1/StatiIntervento.php +++ b/src/API/App/v1/StatiIntervento.php @@ -25,16 +25,16 @@ class StatiIntervento extends AppResource { public function getCleanupData($last_sync_at) { - return $this->getDeleted('in_statiintervento', 'idstatointervento', $last_sync_at); + return $this->getDeleted('in_statiintervento', 'id', $last_sync_at); } public function getModifiedRecords($last_sync_at) { - $query = 'SELECT in_statiintervento.idstatointervento AS id, in_statiintervento.updated_at FROM in_statiintervento'; + $query = 'SELECT `in_statiintervento`.`id`, `in_statiintervento`.`updated_at` FROM `in_statiintervento`'; // Filtro per data if ($last_sync_at) { - $query .= ' WHERE in_statiintervento.updated_at > '.prepare($last_sync_at); + $query .= ' WHERE `in_statiintervento`.`updated_at` > '.prepare($last_sync_at); } $records = database()->fetchArray($query); @@ -45,13 +45,14 @@ class StatiIntervento extends AppResource public function retrieveRecord($id) { // Gestione della visualizzazione dei dettagli del record - $query = 'SELECT in_statiintervento.idstatointervento AS id, - in_statiintervento.codice, - in_statiintervento.descrizione, - in_statiintervento.colore, - in_statiintervento.is_completato - FROM in_statiintervento - WHERE in_statiintervento.idstatointervento = '.prepare($id); + $query = 'SELECT `in_statiintervento`.`id`, + `in_statiintervento`.`codice`, + `in_statiintervento_lang`.`name`, + `in_statiintervento`.`colore`, + `in_statiintervento`.`is_completato` + FROM `in_statiintervento` + LEFT JOIN `in_statiiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = "'.prepare(setting('Lingua')).'") + WHERE `in_statiintervento`.`id` = '.prepare($id); $record = database()->fetchOne($query); diff --git a/templates/dashboard/body.php b/templates/dashboard/body.php index 11bb76460..bc070cd0e 100755 --- a/templates/dashboard/body.php +++ b/templates/dashboard/body.php @@ -79,17 +79,22 @@ $tipi = (array) $calendar['idtipiintervento']; $tecnici = (array) $calendar['idtecnici']; $query = "SELECT - DATE(orario_inizio) AS data, - (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS anagrafica, - GROUP_CONCAT((SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi_tecnici.idtecnico) SEPARATOR ', ') AS tecnico -FROM in_interventi_tecnici - INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id - LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento -WHERE ".$where.' - idtecnico IN('.implode(',', $tecnici).') AND - in_interventi.idstatointervento IN('.implode(',', $stati).') AND - in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' -GROUP BY in_interventi.id, data'; + DATE(`orario_inizio`) AS data, + `an_anagrafiche`.`ragione_sociale` AS anagrafica, + GROUP_CONCAT(DISTINCT `tecnico`.`ragione_sociale` SEPARATOR ', ') AS tecnico + FROM + `in_interventi_tecnici` + INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id` + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` + LEFT JOIN `an_anagrafiche AS tecnico ON `in_interventi_tecnici`.`idtecnico`=`tecnico`.`idanagrafica` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` + WHERE + ".$where.' + `idtecnico` IN('.implode(',', $tecnici).') AND + `in_interventi`.`idstatointervento` IN('.implode(',', $stati).') AND + `in_interventi_tecnici`.`idtipointervento` IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' + GROUP BY + `in_interventi`.`id`, data'; $sessioni = $dbo->fetchArray($query); $sessioni = collect($sessioni)->groupBy('data'); diff --git a/templates/dashboard_settimanale/body.php b/templates/dashboard_settimanale/body.php index 2f215bad3..c5ec97c1e 100644 --- a/templates/dashboard_settimanale/body.php +++ b/templates/dashboard_settimanale/body.php @@ -64,22 +64,28 @@ $tipi = (array) $calendar['idtipiintervento']; $tecnici = (array) $calendar['idtecnici']; $query = "SELECT - DATE(orario_inizio) AS data, - in_interventi.richiesta AS richiesta, - DATE_FORMAT(orario_inizio, '%H:%i') AS ora_inizio, - DATE_FORMAT(orario_fine, '%H:%i') AS ora_fine, - (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi.idanagrafica) AS anagrafica, - GROUP_CONCAT((SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=in_interventi_tecnici.idtecnico) SEPARATOR ', ') AS tecnico, - in_statiintervento.colore AS color -FROM in_interventi_tecnici - INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id - LEFT OUTER JOIN in_statiintervento ON in_interventi.idstatointervento=in_statiintervento.idstatointervento -WHERE ".$where.' - idtecnico IN('.implode(',', $tecnici).') AND - in_interventi.idstatointervento IN('.implode(',', $stati).') AND - in_interventi_tecnici.idtipointervento IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' -GROUP BY in_interventi.id, data -ORDER BY ora_inizio ASC'; + DATE(`orario_inizio`) AS data, + `in_interventi`.`richiesta` AS richiesta, + DATE_FORMAT(`orario_inizio`, '%H:%i') AS ora_inizio, + DATE_FORMAT(`orario_fine`, '%H:%i') AS ora_fine, + `an_anagrafiche`.`ragione_sociale` AS anagrafica, + GROUP_CONCAT(`tecnico`.`ragione_sociale` SEPARATOR ', ') AS tecnico, + `in_statiintervento`.`colore` AS color + FROM + `in_interventi_tecnici` + INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id` + INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` + LEFT JOIN `an_anagrafiche` AS tecnico ON `in_interventi_tecnici`.`idtecnico`=`tecnico`.`idanagrafica` + LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` + WHERE + ".$where.' + `idtecnico` IN('.implode(',', $tecnici).') AND + `in_interventi`.`idstatointervento` IN('.implode(',', $stati).') AND + `in_interventi_tecnici`.`idtipointervento` IN('.implode(',', $tipi).') '.Modules::getAdditionalsQuery('Interventi').' + GROUP BY + `in_interventi`.`id`, `data` + ORDER BY + `ora_inizio` ASC'; $sessioni = $dbo->fetchArray($query); $sessioni = collect($sessioni)->groupBy('data'); diff --git a/update/2_4_55.sql b/update/2_4_55.sql index bd943dab5..85ffdd012 100644 --- a/update/2_4_55.sql +++ b/update/2_4_55.sql @@ -1290,4 +1290,62 @@ WHERE 1=1 AND deleted_at IS NULL HAVING 2=2" WHERE `name` = 'Fasce orarie'; -UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`in_fasceorarie_lang`.`name`' WHERE `zz_modules`.`name` = 'Fasce orarie' AND `zz_views`.`name` = 'nOME'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`in_fasceorarie_lang`.`name`' WHERE `zz_modules`.`name` = 'Fasce orarie' AND `zz_views`.`name` = 'Nome'; + +-- Aggiunta tabella in_statiintervento_lang +CREATE TABLE IF NOT EXISTS `in_statiintervento_lang` ( + `id` int NOT NULL, + `id_lang` int NOT NULL, + `id_record` int NOT NULL, + `name` VARCHAR(255) NOT NULL +); +ALTER TABLE `in_statiintervento_lang` + ADD PRIMARY KEY (`id`); + +ALTER TABLE `in_statiintervento_lang` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +ALTER TABLE `in_statiintervento` CHANGE `idstatointervento` `id` INT NOT NULL AUTO_INCREMENT; + +INSERT INTO `in_statiintervento_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `in_statiintervento`; + +ALTER TABLE `in_statiintervento` + DROP `descrizione`; + +ALTER TABLE `in_statiintervento_lang` ADD CONSTRAINT `in_statiintervento_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `in_statiintervento`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; + +-- Allineamento vista Attività +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `in_interventi` + LEFT JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` + LEFT JOIN `in_interventi_tecnici_assegnati` ON `in_interventi_tecnici_assegnati`.`id_intervento` = `in_interventi`.`id` + LEFT JOIN (SELECT `idintervento`, SUM(`prezzo_unitario`*`qta`-`sconto`) AS `ricavo_righe`, SUM(`costo_unitario`*`qta`) AS `costo_righe` FROM `in_righe_interventi` GROUP BY `idintervento`) AS `righe` ON `righe`.`idintervento` = `in_interventi`.`id` + INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` + LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.|lang|) + LEFT JOIN `an_referenti` ON `in_interventi`.`idreferente` = `an_referenti`.`id` + LEFT JOIN (SELECT `an_sedi`.`id`, CONCAT(`an_sedi`.`nomesede`, '
',IF(`an_sedi`.`telefono`!='',CONCAT(`an_sedi`.`telefono`,'
'),''),IF(`an_sedi`.`cellulare`!='',CONCAT(`an_sedi`.`cellulare`,'
'),''),`an_sedi`.`citta`,IF(`an_sedi`.`indirizzo`!='',CONCAT(' - ',`an_sedi`.`indirizzo`),'')) AS `info` FROM `an_sedi`) AS `sede_destinazione` ON `sede_destinazione`.`id` = `in_interventi`.`idsede_destinazione` + LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT `co_documenti`.`numero_esterno` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idintervento` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type` = 'Modules\\Interventi\\Intervento' GROUP BY `idintervento`, `original_document_id`) AS `fattura` ON `fattura`.`idintervento` = `in_interventi`.`id` + LEFT JOIN (SELECT `in_interventi_tecnici_assegnati`.`id_intervento`, GROUP_CONCAT( DISTINCT `ragione_sociale` SEPARATOR ', ') AS `nomi` FROM `an_anagrafiche` INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi_tecnici_assegnati`.`id_tecnico` = `an_anagrafiche`.`idanagrafica` GROUP BY `id_intervento`) AS `tecnici_assegnati` ON `in_interventi`.`id` = `tecnici_assegnati`.`id_intervento` + LEFT JOIN (SELECT `in_interventi_tecnici`.`idintervento`, GROUP_CONCAT( DISTINCT `ragione_sociale` SEPARATOR ', ') AS `nomi` FROM `an_anagrafiche` INNER JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idtecnico` = `an_anagrafiche`.`idanagrafica` GROUP BY `idintervento`) AS `tecnici` ON `in_interventi`.`id` = `tecnici`.`idintervento` + LEFT JOIN (SELECT COUNT(id) as emails, em_emails.id_record FROM em_emails INNER JOIN zz_operations ON zz_operations.id_email = em_emails.id WHERE id_module IN(SELECT id FROM zz_modules WHERE name = 'Interventi') AND `zz_operations`.`op` = 'send-email' GROUP BY em_emails.id_record) AS `email` ON `email`.`id_record` = `in_interventi`.`id` + LEFT JOIN (SELECT GROUP_CONCAT(CONCAT(`matricola`, IF(`nome` != '', CONCAT(' - ', `nome`), '')) SEPARATOR '
') AS `descrizione`, `my_impianti_interventi`.`idintervento` FROM `my_impianti` INNER JOIN `my_impianti_interventi` ON `my_impianti`.`id` = `my_impianti_interventi`.`idimpianto` GROUP BY `my_impianti_interventi`.`idintervento`) AS `impianti` ON `impianti`.`idintervento` = `in_interventi`.`id` + LEFT JOIN (SELECT `co_contratti`.`id`, CONCAT(`co_contratti`.`numero`, ' del ', DATE_FORMAT(`data_bozza`, '%d/%m/%Y')) AS `info` FROM `co_contratti`) AS `contratto` ON `contratto`.`id` = `in_interventi`.`id_contratto` + LEFT JOIN (SELECT `co_preventivi`.`id`, CONCAT(`co_preventivi`.`numero`, ' del ', DATE_FORMAT(`data_bozza`, '%d/%m/%Y')) AS `info` FROM `co_preventivi`) AS `preventivo` ON `preventivo`.`id` = `in_interventi`.`id_preventivo` + LEFT JOIN (SELECT `or_ordini`.`id`, CONCAT(`or_ordini`.`numero`, ' del ', DATE_FORMAT(`data`, '%d/%m/%Y')) AS `info` FROM `or_ordini`) AS `ordine` ON `ordine`.`id` = `in_interventi`.`id_ordine` + LEFT JOIN `in_tipiintervento` ON `in_interventi`.`idtipointervento` = `in_tipiintervento`.`idtipointervento` + LEFT JOIN( SELECT zz_files.* FROM zz_files INNER JOIN zz_modules ON zz_files.id_module = zz_modules.id WHERE zz_modules.name = 'Interventi' ) AS zz_files ON zz_files.id_record = in_interventi.id +WHERE + 1=1 |segment(`in_interventi`.`id_segment`)| |date_period(`orario_inizio`,`data_richiesta`)| +GROUP BY + `in_interventi`.`id` +HAVING + 2=2 +ORDER BY + IFNULL(`orario_fine`, `data_richiesta`) DESC" WHERE `name` = 'Interventi'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`in_statiintervento_lang`.`name`' WHERE `zz_modules`.`name` = 'Interventi' AND `zz_views`.`name` = 'Stato'; + +UPDATE `zz_plugins` SET `options` = '{\"main_query\": [{\"type\": \"table\", \"fields\": \"Numero, Data inizio, Data fine, Tipo\", \"query\": \"SELECT in_interventi.id, in_interventi.codice AS Numero, DATE_FORMAT(MAX(orario_inizio),\'%d/%m/%Y\') AS \'Data inizio\', DATE_FORMAT(MAX(orario_fine),\'%d/%m/%Y\') AS \'Data fine\', (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=in_interventi.idtipointervento) AS \'Tipo\', (SELECT `id` FROM `zz_modules` WHERE `name` = \'Interventi\') AS _link_module_, in_interventi.id AS _link_record_ FROM in_interventi LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` WHERE 1=1 AND in_interventi.deleted_at IS NULL AND idanagrafica = |id_parent| GROUP BY `in_interventi`.`id` HAVING 2=2 ORDER BY in_interventi.id DESC\"}]}' WHERE `zz_plugins`.`name` = 'Storico attività'; \ No newline at end of file diff --git a/update/tables.php b/update/tables.php index b00d8e320..4576972e9 100755 --- a/update/tables.php +++ b/update/tables.php @@ -109,6 +109,7 @@ return [ 'in_righe_interventi', 'in_righe_tipiinterventi', 'in_statiintervento', + 'in_statiintervento_lang', 'in_tariffe', 'in_tipiintervento', 'in_vociservizio',