Skip to content

Commit f58c583

Browse files
committed
fix: selezione tipi intervento in fase di creazione attività collegata a contratto
1 parent e6dc0ad commit f58c583

1 file changed

Lines changed: 22 additions & 14 deletions

File tree

modules/interventi/ajax/select.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,26 @@
2929
$id_intervento = $superselect['id_intervento'] ?? null;
3030

3131
if (!empty($id_contratto)) {
32-
// Se c'è un contratto: mostra SOLO tipi presenti nelle righe del contratto
33-
$query = 'SELECT DISTINCT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`, IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\', IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) END AS descrizione, `tempo_standard`
34-
FROM `in_tipiintervento`
35-
LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento`.`id` = `in_tipiintervento_lang`.`id_record` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
36-
INNER JOIN `co_righe_contratti` ON `in_tipiintervento`.`id` = `co_righe_contratti`.`id_tipointervento` AND `co_righe_contratti`.`idcontratto` = '.prepare($id_contratto).'
37-
|where|
38-
ORDER BY `title`';
32+
// Verifica se il contratto ha righe con tipi di intervento specificati
33+
$righe_contratto = $dbo->fetchOne('SELECT COUNT(*) AS count FROM `co_righe_contratti` WHERE `idcontratto` = '.prepare($id_contratto).' AND `id_tipointervento` IS NOT NULL');
3934

40-
// Filtro: mostra SOLO tipi presenti nelle righe del contratto
41-
$where[] = '`co_righe_contratti`.`idcontratto` = '.prepare($id_contratto);
35+
if ($righe_contratto['count'] > 0) {
36+
// Se il contratto ha righe con tipi di intervento: mostra SOLO tipi presenti nelle righe del contratto
37+
$query = 'SELECT DISTINCT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`, IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\', IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) END AS descrizione, `tempo_standard`
38+
FROM `in_tipiintervento`
39+
LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento`.`id` = `in_tipiintervento_lang`.`id_record` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
40+
INNER JOIN `co_righe_contratti` ON `in_tipiintervento`.`id` = `co_righe_contratti`.`id_tipointervento` AND `co_righe_contratti`.`idcontratto` = '.prepare($id_contratto).'
41+
|where|
42+
ORDER BY `title`';
43+
} else {
44+
// Se il contratto non ha righe con tipi di intervento: mostra i tipi abilitati per il contratto
45+
$query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`, IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\', IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) END AS descrizione, `tempo_standard`
46+
FROM `in_tipiintervento`
47+
LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento`.`id` = `in_tipiintervento_lang`.`id_record` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
48+
INNER JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($id_contratto).' AND `co_contratti_tipiintervento`.`is_abilitato` = 1
49+
|where|
50+
ORDER BY `title`';
51+
}
4252
} else {
4353
// Altrimenti mostra tutti i tipi di intervento
4454
$query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`, IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\', IF(`in_tipiintervento`.`deleted_at` IS NULL, "", " ('.tr('eliminato').')")) END AS descrizione, `tempo_standard`
@@ -52,11 +62,9 @@
5262
$filter[] = '`in_tipiintervento`.`id`='.prepare($element);
5363
}
5464

55-
// Applica il filtro deleted_at solo se non c'è un contratto
56-
if (empty($id_contratto)) {
57-
if (empty($filter)) {
58-
$where[] = '`in_tipiintervento`.`deleted_at` IS NULL';
59-
}
65+
// Applica il filtro deleted_at sempre, tranne quando si filtrano elementi specifici
66+
if (empty($filter)) {
67+
$where[] = '`in_tipiintervento`.`deleted_at` IS NULL';
6068
}
6169

6270
if (!empty($search)) {

0 commit comments

Comments
 (0)