|
29 | 29 | $id_intervento = $superselect['id_intervento'] ?? null; |
30 | 30 |
|
31 | 31 | 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'); |
39 | 34 |
|
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 | + } |
42 | 52 | } else { |
43 | 53 | // Altrimenti mostra tutti i tipi di intervento |
44 | 54 | $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 | 62 | $filter[] = '`in_tipiintervento`.`id`='.prepare($element); |
53 | 63 | } |
54 | 64 |
|
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'; |
60 | 68 | } |
61 | 69 |
|
62 | 70 | if (!empty($search)) { |
|
0 commit comments