|
24 | 24 |
|
25 | 25 | switch ($resource) { |
26 | 26 | case 'tipiintervento': |
27 | | - $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` |
28 | | - FROM `in_tipiintervento` |
29 | | - 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).') |
30 | | - |where| |
31 | | - ORDER BY `title`'; |
| 27 | + // Verifica se è presente un contratto collegato |
| 28 | + $id_contratto = $superselect['idcontratto'] ?? null; |
| 29 | + $id_intervento = $superselect['id_intervento'] ?? null; |
| 30 | + |
| 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`'; |
| 39 | + |
| 40 | + // Filtro: mostra SOLO tipi presenti nelle righe del contratto |
| 41 | + $where[] = '`co_righe_contratti`.`idcontratto` = '.prepare($id_contratto); |
| 42 | + } else { |
| 43 | + // Altrimenti mostra tutti i tipi di intervento |
| 44 | + $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` |
| 45 | + FROM `in_tipiintervento` |
| 46 | + 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).') |
| 47 | + |where| |
| 48 | + ORDER BY `title`'; |
| 49 | + } |
32 | 50 |
|
33 | 51 | foreach ($elements as $element) { |
34 | 52 | $filter[] = '`in_tipiintervento`.`id`='.prepare($element); |
35 | 53 | } |
36 | 54 |
|
37 | | - if (empty($filter)) { |
38 | | - $where[] = '`in_tipiintervento`.`deleted_at` IS NULL'; |
| 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 | + } |
39 | 60 | } |
40 | 61 |
|
41 | 62 | if (!empty($search)) { |
|
99 | 120 | case 'tipiintervento-tecnico': |
100 | 121 | $idtecnico = $superselect['idtecnico']; |
101 | 122 | $id_intervento = $superselect['id_intervento']; |
102 | | - |
| 123 | + |
103 | 124 | if (empty($idtecnico)) { |
104 | 125 | $results = [ |
105 | 126 | 'results' => [], |
106 | 127 | 'recordsFiltered' => 0, |
107 | 128 | ]; |
108 | 129 | break; |
109 | 130 | } |
110 | | - |
| 131 | + |
111 | 132 | $intervento = Intervento::find($id_intervento); |
112 | | - |
| 133 | + |
113 | 134 | // Query per i tipi di intervento in base alla sede al contratto o al tecnico |
114 | 135 | // Priorità: tariffe contratto > tariffe sede > tariffe tecnico |
115 | 136 | if (!empty($intervento->idsede_destinazione)) { |
116 | 137 | // Se c'è una sede configurata: prova prima tariffe contratto, poi sede, poi tecnico |
117 | | - $query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
118 | | - COALESCE(`co_contratti_tipiintervento`.`costo_ore`, `in_tariffe_sedi`.`costo_ore`, `in_tariffe`.`costo_ore`) AS prezzo_ore_unitario, |
119 | | - COALESCE(`co_contratti_tipiintervento`.`costo_km`, `in_tariffe_sedi`.`costo_km`, `in_tariffe`.`costo_km`) AS prezzo_km_unitario, |
120 | | - COALESCE(`co_contratti_tipiintervento`.`costo_dirittochiamata`, `in_tariffe_sedi`.`costo_dirittochiamata`, `in_tariffe`.`costo_dirittochiamata`) AS prezzo_dirittochiamata |
121 | | - FROM `in_tipiintervento` |
122 | | - 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).') |
123 | | - LEFT JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
124 | | - LEFT JOIN `in_tariffe_sedi` ON `in_tipiintervento`.`id` = `in_tariffe_sedi`.`idtipointervento` AND `in_tariffe_sedi`.`idsede` = '.prepare($intervento->idsede_destinazione).' |
125 | | - LEFT JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
126 | | - |where| |
127 | | - ORDER BY `title`'; |
128 | | - |
129 | | - // Filtro: mostra tipi con tariffe contratto, o sede, o tecnico |
130 | | - $where[] = '( |
131 | | - `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
132 | | - OR `in_tariffe_sedi`.`idsede` = '.prepare($intervento->idsede_destinazione).' |
133 | | - OR `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
134 | | - )'; |
| 138 | + // Se c'è un contratto: mostra SOLO tipi presenti nelle righe del contratto |
| 139 | + if (!empty($intervento->id_contratto)) { |
| 140 | + $query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
| 141 | + COALESCE(`co_contratti_tipiintervento`.`costo_ore`, `in_tariffe_sedi`.`costo_ore`, `in_tariffe`.`costo_ore`) AS prezzo_ore_unitario, |
| 142 | + COALESCE(`co_contratti_tipiintervento`.`costo_km`, `in_tariffe_sedi`.`costo_km`, `in_tariffe`.`costo_km`) AS prezzo_km_unitario, |
| 143 | + COALESCE(`co_contratti_tipiintervento`.`costo_dirittochiamata`, `in_tariffe_sedi`.`costo_dirittochiamata`, `in_tariffe`.`costo_dirittochiamata`) AS prezzo_dirittochiamata |
| 144 | + FROM `in_tipiintervento` |
| 145 | + 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).') |
| 146 | + INNER JOIN `co_righe_contratti` ON `in_tipiintervento`.`id` = `co_righe_contratti`.`id_tipointervento` AND `co_righe_contratti`.`idcontratto` = '.prepare($intervento->id_contratto).' |
| 147 | + LEFT JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
| 148 | + LEFT JOIN `in_tariffe_sedi` ON `in_tipiintervento`.`id` = `in_tariffe_sedi`.`idtipointervento` AND `in_tariffe_sedi`.`idsede` = '.prepare($intervento->idsede_destinazione).' |
| 149 | + LEFT JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
| 150 | + |where| |
| 151 | + ORDER BY `title`'; |
| 152 | + |
| 153 | + // Filtro: mostra SOLO tipi presenti nelle righe del contratto |
| 154 | + $where[] = '`co_righe_contratti`.`idcontratto` = '.prepare($intervento->id_contratto); |
| 155 | + } else { |
| 156 | + $query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
| 157 | + COALESCE(`in_tariffe_sedi`.`costo_ore`, `in_tariffe`.`costo_ore`) AS prezzo_ore_unitario, |
| 158 | + COALESCE(`in_tariffe_sedi`.`costo_km`, `in_tariffe`.`costo_km`) AS prezzo_km_unitario, |
| 159 | + COALESCE(`in_tariffe_sedi`.`costo_dirittochiamata`, `in_tariffe`.`costo_dirittochiamata`) AS prezzo_dirittochiamata |
| 160 | + FROM `in_tipiintervento` |
| 161 | + 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).') |
| 162 | + LEFT JOIN `in_tariffe_sedi` ON `in_tipiintervento`.`id` = `in_tariffe_sedi`.`idtipointervento` AND `in_tariffe_sedi`.`idsede` = '.prepare($intervento->idsede_destinazione).' |
| 163 | + LEFT JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
| 164 | + |where| |
| 165 | + ORDER BY `title`'; |
| 166 | + |
| 167 | + // Filtro: mostra tipi con tariffe sede o tecnico |
| 168 | + $where[] = '( |
| 169 | + `in_tariffe_sedi`.`idsede` = '.prepare($intervento->idsede_destinazione).' |
| 170 | + OR `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
| 171 | + )'; |
| 172 | + } |
135 | 173 | } elseif (!empty($intervento->id_contratto)) { |
136 | | - // Se c'è un contratto: prova tariffe contratto, poi tecnico |
137 | | - $query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
| 174 | + // Se c'è un contratto: mostra SOLO tipi presenti nelle righe del contratto |
| 175 | + $query = 'SELECT DISTINCT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
138 | 176 | COALESCE(`co_contratti_tipiintervento`.`costo_ore`, `in_tariffe`.`costo_ore`) AS prezzo_ore_unitario, |
139 | 177 | COALESCE(`co_contratti_tipiintervento`.`costo_km`, `in_tariffe`.`costo_km`) AS prezzo_km_unitario, |
140 | 178 | COALESCE(`co_contratti_tipiintervento`.`costo_dirittochiamata`, `in_tariffe`.`costo_dirittochiamata`) AS prezzo_dirittochiamata |
141 | 179 | FROM `in_tipiintervento` |
142 | 180 | 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).') |
| 181 | + INNER JOIN `co_righe_contratti` ON `in_tipiintervento`.`id` = `co_righe_contratti`.`id_tipointervento` AND `co_righe_contratti`.`idcontratto` = '.prepare($intervento->id_contratto).' |
143 | 182 | LEFT JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
144 | 183 | LEFT JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
145 | 184 | |where| |
146 | 185 | ORDER BY `title`'; |
147 | | - |
148 | | - // Filtro: mostra tipi con tariffe contratto o tecnico |
149 | | - $where[] = '( |
150 | | - `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
151 | | - OR `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
152 | | - )'; |
| 186 | + |
| 187 | + // Filtro: mostra SOLO tipi presenti nelle righe del contratto |
| 188 | + $where[] = '`co_righe_contratti`.`idcontratto` = '.prepare($intervento->id_contratto); |
153 | 189 | } else { |
154 | 190 | // Altrimenti usa solo tariffe tecnico |
155 | 191 | $query = 'SELECT `in_tipiintervento`.`id`, CASE WHEN ISNULL(`tempo_standard`) OR `tempo_standard` <= 0 THEN CONCAT(`codice`, \' - \', `title`) WHEN `tempo_standard` > 0 THEN CONCAT(`codice`, \' - \', `title`, \' (\', REPLACE(FORMAT(`tempo_standard`, 2), \'.\', \',\'), \' ore)\') END AS descrizione, `tempo_standard`, |
|
161 | 197 | INNER JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
162 | 198 | |where| |
163 | 199 | ORDER BY `title`'; |
164 | | - |
| 200 | + |
165 | 201 | $where[] = '`in_tariffe`.`idtecnico` = '.prepare($idtecnico); |
166 | 202 | } |
167 | 203 |
|
|
0 commit comments