Aggiunta tabella in_statiintervento_lang

This commit is contained in:
Pek5892 2024-02-28 15:28:39 +01:00
parent 088f520374
commit e113edaacb
36 changed files with 393 additions and 234 deletions

View File

@ -119,13 +119,13 @@ if (!empty($options['create_document'])) {
elseif ($final_module['name'] == 'Interventi') {
echo '
<div class="col-md-6">
{[ "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`" ]}
</div>
<div class="col-md-6">
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "id_tipo_intervento", "required": 1, "ajax-source": "tipiintervento" ]}
</div>';
}
}
// Opzioni aggiuntive per i Contratti
elseif ($final_module['name'] == 'Contratti') {

View File

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

View File

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

View File

@ -1,4 +1,3 @@
<?php
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
@ -24,7 +23,7 @@ include_once __DIR__.'/../../core.php';
// Individuazione dati selezionabili
// Stati interventi
$stati_intervento = $dbo->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) {

View File

@ -65,17 +65,19 @@ echo '
<input type="hidden" name="dir" value="'.$dir.'">';
$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']);

View File

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

View File

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

View File

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

View File

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

View File

@ -206,7 +206,7 @@ echo '
</div>
<div class="col-md-4">
{[ "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à')).'" ]}
</div>
</div>
@ -394,7 +394,7 @@ echo '
<div class="row ricorrenza">
<div class="col-md-4">
{[ "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`" ]}
</div>
<div class="col-md-4">

View File

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

View File

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

View File

@ -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').'.<br>
<br>{[ "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" ]}',
<br>{[ "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' => '<br>{[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "required": 0, "value": "-now-", "required":1 ]}
<br>{[ "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": "" ]}
<br>{[ "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": "" ]}
<br>{[ "type":"checkbox", "label":"'.tr('Duplica righe').'", "name":"righe", "value":"" ]}
<br>{[ "type":"checkbox", "label":"'.tr('Duplica sessioni').'", "name":"sessioni", "value":"" ]}
<br>{[ "type":"checkbox", "label":"'.tr('Duplica impianti').'", "name":"impianti", "value":"" ]}

View File

@ -342,7 +342,7 @@ echo '
</div>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo 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": "$idstatointervento$", "class": "unblockable" ]}
{[ "type": "select", "label": "<?php echo 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` = <?php echo prepare(setting('Lingua')); ?>) WHERE `deleted_at` IS NULL ORDER BY `name`", "value": "$id$", "class": "unblockable" ]}
</div>
<?php

View File

@ -29,22 +29,20 @@ if (isset($id_record)) {
`in_interventi`.`codice` AS codice,
`an_anagrafiche`.`tipo` AS tipo_anagrafica,
`in_statiintervento`.`is_completato` AS flag_completato,
IF((`in_interventi`.`idsede_destinazione` = 0), `an_anagrafiche`.`idzona`, `an_sedi`.`idzona`) AS idzona,
`in_statiintervento`.`colore` AS colore,
IF((`in_interventi`.`idsede_destinazione` = 0), `an_anagrafiche`.`idzona`, `an_sedi`.`idzona`) AS idzona,
`in_interventi`.`idanagrafica` as idanagrafica,
`in_interventi`.`id_preventivo` as idpreventivo,
`in_interventi`.`id_contratto` as idcontratto,
`in_interventi`.`id_ordine` as idordine
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`
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`
WHERE
`in_interventi`.`id`='.prepare($id_record));
//Pulsante Precedente e Successivo all'interno della scheda attività
$module_query = Util\Query::getQuery(Models\Module::getCurrent());

View File

@ -48,7 +48,7 @@ echo '
</div>
<div class="col-md-6">
{[ "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": "" ]}
</div>
</div>

View File

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

View File

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

View File

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

View File

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

View File

@ -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 "<br>") 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 "<br>") 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 [

View File

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

View File

@ -97,8 +97,8 @@ foreach ($raggruppamenti as $mese => $raggruppamento) {
'.$rs_tecnici[0]['tecnici'].'
</td>
<td>'.$dbo->fetchOne("SELECT CONCAT_WS(' - ', codice,descrizione) AS descrizione FROM in_tipiintervento WHERE idtipointervento=".prepare($r['idtipointervento']))['descrizione'].'</td>
<td>'.$dbo->fetchOne("SELECT CONCAT_WS(' - ', codice,descrizione) AS descrizione FROM in_statiintervento WHERE idstatointervento=".prepare($r['idstatointervento']))['descrizione'].'</td>
<td>'.$dbo->fetchOne("SELECT CONCAT_WS(' - ', `codice`,`descrizione`) AS descrizione FROM `in_tipiintervento` WHERE `idtipointervento`=".prepare($r['idtipointervento']))['descrizione'].'</td>
<td>'.$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'].'</td>
<td>'.nl2br($r['richiesta']).'</td>
';

View File

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

View File

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

View File

@ -57,15 +57,15 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<?php
$rs_stati = $dbo->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) {
?>
<div class="col-md-4">
<label><?php echo $stato['descrizione']; ?></label>
<label><?php echo $stato['name']; ?></label>
<div class="material-switch">
<input id="<?php echo $stato['descrizione']; ?>" name="<?php echo $stato['descrizione']; ?>" type="checkbox" checked/>
<label for="<?php echo $stato['descrizione']; ?>" class="label-success"></label>
<input id="<?php echo $stato['name']; ?>" name="<?php echo $stato['name']; ?>" type="checkbox" checked/>
<label for="<?php echo $stato['name']; ?>" class="label-success"></label>
</div>
</div>
<?php

View File

@ -23,7 +23,6 @@ switch (post('op')) {
case 'update':
$dbo->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);

View File

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

View File

@ -32,7 +32,6 @@ class StatiInterventi extends Resource implements RetrieveInterface
if (empty($select)) {
$select = [
'*',
'id' => 'idstatointervento',
];
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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`, '<br />',IF(`an_sedi`.`telefono`!='',CONCAT(`an_sedi`.`telefono`,'<br />'),''),IF(`an_sedi`.`cellulare`!='',CONCAT(`an_sedi`.`cellulare`,'<br />'),''),`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 '<br />') 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à';

View File

@ -109,6 +109,7 @@ return [
'in_righe_interventi',
'in_righe_tipiinterventi',
'in_statiintervento',
'in_statiintervento_lang',
'in_tariffe',
'in_tipiintervento',
'in_vociservizio',