|
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` |
| 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 | 28 | FROM `in_tipiintervento` |
29 | 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 | 30 | |where| |
|
110 | 110 |
|
111 | 111 | $intervento = Intervento::find($id_intervento); |
112 | 112 |
|
113 | | - // Query per i tipi di intervento in base al contratto o al tecnico |
114 | | - if (!empty($intervento->id_contratto)) { |
115 | | - $query = 'SELECT `in_tipiintervento`.`id`, CONCAT(`codice`, \' - \', `title`) AS descrizione, `co_contratti_tipiintervento`.`costo_ore` AS prezzo_ore_unitario, `co_contratti_tipiintervento`.`costo_km` AS prezzo_km_unitario, `co_contratti_tipiintervento`.`costo_dirittochiamata` AS prezzo_dirittochiamata |
116 | | - FROM `in_tipiintervento` |
117 | | - 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).') |
118 | | - INNER JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` |
119 | | - |where| |
120 | | - ORDER BY `title`'; |
121 | | - |
122 | | - $where[] = '`co_contratti_tipiintervento`.`idtecnico` = '.prepare($idtecnico); |
| 113 | + // Query per i tipi di intervento in base alla sede al contratto o al tecnico |
| 114 | + // Priorità: tariffe contratto > tariffe sede > tariffe tecnico |
| 115 | + if (!empty($intervento->idsede_destinazione)) { |
| 116 | + // Se c'è una sede configurata: prova prima tariffe contratto, poi sede, poi tecnico |
| 117 | + $query = 'SELECT `in_tipiintervento`.`id`, CONCAT(`codice`, \' - \', `title`) AS descrizione, |
| 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 | + )'; |
| 135 | + } elseif (!empty($intervento->id_contratto)) { |
| 136 | + // Se c'è un contratto: prova tariffe contratto, poi tecnico |
| 137 | + $query = 'SELECT `in_tipiintervento`.`id`, CONCAT(`codice`, \' - \', `title`) AS descrizione, |
| 138 | + COALESCE(`co_contratti_tipiintervento`.`costo_ore`, `in_tariffe`.`costo_ore`) AS prezzo_ore_unitario, |
| 139 | + COALESCE(`co_contratti_tipiintervento`.`costo_km`, `in_tariffe`.`costo_km`) AS prezzo_km_unitario, |
| 140 | + COALESCE(`co_contratti_tipiintervento`.`costo_dirittochiamata`, `in_tariffe`.`costo_dirittochiamata`) AS prezzo_dirittochiamata |
| 141 | + FROM `in_tipiintervento` |
| 142 | + 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).') |
| 143 | + LEFT JOIN `co_contratti_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` AND `co_contratti_tipiintervento`.`idcontratto` = '.prepare($intervento->id_contratto).' |
| 144 | + LEFT JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
| 145 | + |where| |
| 146 | + 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 | + )'; |
123 | 153 | } else { |
124 | | - $query = 'SELECT `in_tipiintervento`.`id`, CONCAT(`codice`, \' - \', `title`) AS descrizione, `in_tariffe`.`costo_ore` AS prezzo_ore_unitario, `in_tariffe`.`costo_km` AS prezzo_km_unitario, `in_tariffe`.`costo_dirittochiamata` AS prezzo_dirittochiamata |
125 | | - FROM `in_tipiintervento` |
126 | | - 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).') |
127 | | - INNER JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` |
128 | | - |where| |
129 | | - ORDER BY `title`'; |
| 154 | + // Altrimenti usa solo tariffe tecnico |
| 155 | + $query = 'SELECT `in_tipiintervento`.`id`, CONCAT(`codice`, \' - \', `title`) AS descrizione, |
| 156 | + `in_tariffe`.`costo_ore` AS prezzo_ore_unitario, |
| 157 | + `in_tariffe`.`costo_km` AS prezzo_km_unitario, |
| 158 | + `in_tariffe`.`costo_dirittochiamata` AS prezzo_dirittochiamata |
| 159 | + FROM `in_tipiintervento` |
| 160 | + 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).') |
| 161 | + INNER JOIN `in_tariffe` ON `in_tipiintervento`.`id` = `in_tariffe`.`idtipointervento` AND `in_tariffe`.`idtecnico` = '.prepare($idtecnico).' |
| 162 | + |where| |
| 163 | + ORDER BY `title`'; |
130 | 164 |
|
131 | 165 | $where[] = '`in_tariffe`.`idtecnico` = '.prepare($idtecnico); |
132 | 166 | } |
|
0 commit comments