|
132 | 132 |
|
133 | 133 | </form> |
134 | 134 |
|
135 | | -<?php |
136 | | -// Permetto eliminazione tipo intervento solo se questo non è utilizzado da nessun'altra parte nel gestionale |
137 | | -// UNION SELECT `in_tariffe`.`idtipointervento` FROM `in_tariffe` WHERE `in_tariffe`.`idtipointervento` = '.prepare($id_record).' |
138 | | -// UNION SELECT `co_contratti_tipiintervento`.`idtipointervento` FROM `co_contratti_tipiintervento` WHERE `co_contratti_tipiintervento`.`idtipointervento` = '.prepare($id_record).' |
139 | | -$elementi = $dbo->fetchArray('SELECT `in_interventi`.`idtipointervento`, id, codice AS numero, data_richiesta AS data, "Attività" AS tipo_documento FROM `in_interventi` WHERE `in_interventi`.`idtipointervento` = '.prepare($id_record).' |
140 | | -UNION |
141 | | -SELECT `in_interventi_tecnici`.`idtipointervento`, idintervento AS id, codice AS numero, orario_inizio AS data, "Sessione intervento" AS tipo_documento FROM `in_interventi_tecnici` LEFT JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE `in_interventi_tecnici`.`idtipointervento` = '.prepare($id_record).' |
142 | | -UNION |
143 | | -SELECT `an_anagrafiche`.`idtipointervento_default` AS `idtipointervento`, idanagrafica AS id, codice, "0000-00-00" AS data, "Anagrafica" AS tipo_documento FROM `an_anagrafiche` WHERE `an_anagrafiche`.`idtipointervento_default` = '.prepare($id_record).' |
144 | | -UNION |
145 | | -SELECT `co_preventivi`.`idtipointervento`, id, numero, data_bozza AS data, "Preventivo" AS tipo_documento FROM `co_preventivi` WHERE `co_preventivi`.`idtipointervento` = '.prepare($id_record).' |
146 | | -UNION |
147 | | -SELECT `co_promemoria`.`idtipointervento`, idcontratto AS id, numero, data_richiesta AS data, "Promemoria contratto" AS tipo_documento FROM `co_promemoria` LEFT JOIN co_contratti ON co_promemoria.idcontratto=co_contratti.id WHERE `co_promemoria`.`idtipointervento` = '.prepare($id_record).' |
148 | | -ORDER BY `idtipointervento`'); |
149 | | - |
150 | | -if (!empty($elementi)) { |
151 | | - echo ' |
152 | | -<div class="card card-warning collapsable collapsed-card"> |
| 135 | +<div class="card card-warning collapsable collapsed-card" id="documenti-collegati-card"> |
153 | 136 | <div class="card-header with-border"> |
154 | | - <h3 class="card-title"><i class="fa fa-warning"></i> '.tr('Documenti collegati: _NUM_', [ |
155 | | - '_NUM_' => count($elementi), |
156 | | - ]).'</h3> |
| 137 | + <h3 class="card-title"><i class="fa fa-warning"></i> <span id="documenti-collegati-title"><?php echo tr('Documenti collegati'); ?></span></h3> |
157 | 138 | <div class="card-tools pull-right"> |
158 | | - <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fa fa-plus"></i></button> |
| 139 | + <button type="button" class="btn btn-tool" data-card-widget="collapse" id="documenti-collegati-toggle"><i class="fa fa-plus"></i></button> |
159 | 140 | </div> |
160 | 141 | </div> |
161 | | - <div class="card-body"> |
162 | | - <ul>'; |
163 | | - |
164 | | - foreach ($elementi as $elemento) { |
165 | | - $descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [ |
166 | | - '_DOC_' => $elemento['tipo_documento'], |
167 | | - '_NUM_' => $elemento['numero'], |
168 | | - '_DATE_' => Translator::dateToLocale($elemento['data']), |
169 | | - ]); |
170 | | - |
171 | | - if (in_array($elemento['tipo_documento'], ['Attività'])) { |
172 | | - $modulo = 'Interventi'; |
173 | | - } |
174 | | - if (in_array($elemento['tipo_documento'], ['Sessione intervento'])) { |
175 | | - $modulo = 'Interventi'; |
176 | | - } |
177 | | - if (in_array($elemento['tipo_documento'], ['Anagrafica'])) { |
178 | | - $modulo = 'Anagrafiche'; |
179 | | - } |
180 | | - if (in_array($elemento['tipo_documento'], ['Preventivo'])) { |
181 | | - $modulo = 'Preventivi'; |
| 142 | + <div class="card-body" id="documenti-collegati-body"> |
| 143 | + <div class="text-center" id="documenti-collegati-loading"> |
| 144 | + <i class="fa fa-spinner fa-spin"></i> <?php echo tr('Caricamento documenti collegati in corso'); ?>... |
| 145 | + </div> |
| 146 | + <div id="documenti-collegati-content" style="display: none;"></div> |
| 147 | + </div> |
| 148 | +</div> |
| 149 | + |
| 150 | +<script type="text/javascript"> |
| 151 | +$(document).ready(function() { |
| 152 | + var documentiCaricati = false; |
| 153 | + |
| 154 | + // Mostra la card inizialmente e carica il conteggio |
| 155 | + $('#documenti-collegati-card').show(); |
| 156 | + caricaConteggio(); |
| 157 | + |
| 158 | + // Carica i documenti quando il card viene espanso |
| 159 | + // Utilizziamo l'evento specifico di AdminLTE per il collapse/expand |
| 160 | + $('#documenti-collegati-card').on('expanded.lte.cardwidget', function() { |
| 161 | + console.log('Card espansa (evento AdminLTE), documentiCaricati:', documentiCaricati); |
| 162 | + if (!documentiCaricati) { |
| 163 | + console.log('Carico documenti collegati...'); |
| 164 | + caricaDocumentiCollegati(); |
182 | 165 | } |
183 | | - if (in_array($elemento['tipo_documento'], ['Promemoria contratto'])) { |
184 | | - $modulo = 'Contratti'; |
| 166 | + }); |
| 167 | + |
| 168 | + // Fallback: se l'evento AdminLTE non funziona, usa il click diretto |
| 169 | + $('#documenti-collegati-toggle').on('click', function() { |
| 170 | + console.log('Click sul toggle (fallback), documentiCaricati:', documentiCaricati); |
| 171 | + console.log('Card ha classe collapsed-card:', $('#documenti-collegati-card').hasClass('collapsed-card')); |
| 172 | + |
| 173 | + if (!documentiCaricati && $('#documenti-collegati-card').hasClass('collapsed-card')) { |
| 174 | + console.log('Fallback: carico documenti tra 500ms'); |
| 175 | + setTimeout(function() { |
| 176 | + console.log('Fallback timeout: verifico stato card'); |
| 177 | + console.log('Card collapsed dopo timeout:', $('#documenti-collegati-card').hasClass('collapsed-card')); |
| 178 | + if (!$('#documenti-collegati-card').hasClass('collapsed-card')) { |
| 179 | + console.log('Card espansa, carico documenti'); |
| 180 | + caricaDocumentiCollegati(); |
| 181 | + } else { |
| 182 | + console.log('Card ancora collassata, forzo il caricamento comunque'); |
| 183 | + // Se la card non si espande correttamente, carica comunque i documenti |
| 184 | + caricaDocumentiCollegati(); |
| 185 | + } |
| 186 | + }, 500); |
185 | 187 | } |
186 | | - $id = $elemento['id']; |
| 188 | + }); |
| 189 | + |
| 190 | + function caricaConteggio() { |
| 191 | + $.get('<?php echo $module->fileurl('ajax_documenti_collegati.php'); ?>?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&count_only=1') |
| 192 | + .done(function(data) { |
| 193 | + var response; |
| 194 | + |
| 195 | + // Se la risposta è già un oggetto (jQuery ha fatto il parsing automatico) |
| 196 | + if (typeof data === 'object') { |
| 197 | + response = data; |
| 198 | + } else { |
| 199 | + // Prova a fare il parsing manuale |
| 200 | + try { |
| 201 | + var cleanData = data.trim(); |
| 202 | + response = JSON.parse(cleanData); |
| 203 | + } catch (e) { |
187 | 204 |
|
188 | | - echo ' |
189 | | - <li>'.Modules::link($modulo, $id, $descrizione).'</li>'; |
| 205 | + // In caso di errore, mantieni la card visibile |
| 206 | + $('#documenti-collegati-title').text('<?php echo tr('Documenti collegati'); ?>'); |
| 207 | + $('#documenti-collegati-card').show(); |
| 208 | + return; |
| 209 | + } |
| 210 | + } |
| 211 | + |
| 212 | + if (response.count > 0) { |
| 213 | + $('#documenti-collegati-title').text('<?php echo tr('Documenti collegati'); ?>: ' + response.count); |
| 214 | + $('#documenti-collegati-card').show(); |
| 215 | + } else { |
| 216 | + $('#documenti-collegati-card').hide(); |
| 217 | + } |
| 218 | + }) |
| 219 | + .fail(function(xhr, status, error) { |
| 220 | + // In caso di errore di rete, mantieni la card visibile |
| 221 | + $('#documenti-collegati-title').text('<?php echo tr('Documenti collegati'); ?>'); |
| 222 | + $('#documenti-collegati-card').show(); |
| 223 | + }); |
190 | 224 | } |
191 | 225 |
|
192 | | - echo ' |
193 | | - </ul> |
194 | | - </div> |
195 | | -</div>'; |
196 | | -} |
| 226 | + function caricaDocumentiCollegati() { |
| 227 | + if (documentiCaricati) return; |
197 | 228 |
|
| 229 | + $('#documenti-collegati-loading').show(); |
| 230 | + $('#documenti-collegati-content').hide(); |
| 231 | + |
| 232 | + var url = '<?php echo $module->fileurl('ajax_documenti_collegati.php'); ?>?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>'; |
| 233 | + $.get(url) |
| 234 | + .done(function(data) { |
| 235 | + $('#documenti-collegati-loading').hide(); |
| 236 | + $('#documenti-collegati-content').html(data).show(); |
| 237 | + documentiCaricati = true; |
| 238 | + }) |
| 239 | + .fail(function(xhr, status, error) { |
| 240 | + $('#documenti-collegati-loading').hide(); |
| 241 | + var errorMsg = '<?php echo tr('Errore nel caricamento dei documenti collegati'); ?>'; |
| 242 | + if (xhr.responseText) { |
| 243 | + errorMsg += ': ' + xhr.responseText; |
| 244 | + } |
| 245 | + $('#documenti-collegati-content').html('<div class="alert alert-danger">' + errorMsg + '</div>').show(); |
| 246 | + }); |
| 247 | + } |
| 248 | +}); |
| 249 | +</script> |
| 250 | + |
| 251 | +<?php |
198 | 252 | echo ' |
199 | 253 | <a class="btn btn-danger ask" data-backto="record-list"> |
200 | 254 | <i class="fa fa-trash"></i> '.tr('Elimina').' |
201 | 255 | </a>'; |
| 256 | +?> |
0 commit comments