. */ use Modules\Interventi\Intervento; include_once __DIR__.'/../../core.php'; $tecnici = []; if (!empty($id_record)) { $documento = Intervento::find($id_record); $sessioni = $documento->sessioni; foreach ($sessioni as $sessione) { $id_tecnico = $sessione->idtecnico; $inizio = $sessione->orario_inizio; $fine = $sessione->orario_fine; if (!isset($tecnici[$id_tecnico])) { $tecnici[$id_tecnico] = []; } $tecnici[$id_tecnico][] = [ 'inizio' => $inizio, 'fine' => $fine, ]; } } // Lettura dei dati da URL $tecnici_selezionati = filter('tecnici'); if (!empty($tecnici_selezionati)) { $inizio = filter('inizio'); $fine = filter('fine'); foreach ($tecnici_selezionati as $id_tecnico) { if (empty($id_tecnico)) { continue; } if (!isset($tecnici[$id_tecnico])) { $tecnici[$id_tecnico] = []; } $tecnici[$id_tecnico][] = [ 'inizio' => $inizio, 'fine' => $fine, ]; } } // Blocco dei controlli se non sono presenti tecnici if (empty($tecnici) || setting('Alert occupazione tecnici') != 1) { return; } // Individuazione dei conflitti con altri interventi $elenco_conflitti = []; foreach ($tecnici as $id_tecnico => $ore) { $query = 'SELECT idintervento, orario_inizio, orario_fine FROM in_interventi_tecnici WHERE idtecnico = '.prepare($id_tecnico).($id_record ? ' AND idintervento != '.prepare($id_record) : ''); // Conflitti ristretti per orario foreach ($ore as $orario) { $query_conflitto = $query.' AND ((orario_inizio >= '.prepare($orario['inizio']).' AND orario_inizio <= '.prepare($orario['fine']).') OR (orario_fine >= '.prepare($orario['inizio']).' AND orario_fine <= '.prepare($orario['fine']).') OR (orario_inizio <= '.prepare($orario['inizio']).' AND orario_fine >= '.prepare($orario['inizio']).') OR (orario_inizio <= '.prepare($orario['fine']).' AND orario_fine >= '.prepare($orario['fine']).'))'; $conflitto = $database->fetchArray($query_conflitto); if (!empty($conflitto)) { $elenco_conflitti[$id_tecnico][] = [ 'inizio' => $orario['inizio'], 'fine' => $orario['fine'], 'conflitti' => $conflitto, ]; } } } if (empty($elenco_conflitti)) { return; } echo '

'.tr('⚠️ Sono presenti dei conflitti con le sessioni di lavoro di alcuni tecnici').'

'; foreach ($elenco_conflitti as $id_tecnico => $elenco_conflitti_tecnico) { $anagrafica_tecnico = $database->fetchOne('SELECT ragione_sociale, deleted_at FROM an_anagrafiche WHERE idanagrafica = '.prepare($id_tecnico)); foreach ($elenco_conflitti_tecnico as $conflitto) { echo ' '; foreach ($conflitto['conflitti'] as $conflitto_intervento) { $intervento = Intervento::find($conflitto_intervento['idintervento']); echo ' '; } } } echo '
'.tr('Tecnico').' '.tr('Attività').' '.tr('Orario di conflitto').'
'.$anagrafica_tecnico['ragione_sociale'].' '.(!empty($anagrafica_tecnico['deleted_at']) ? '('.tr('Eliminato').')' : '').' Attività corrente '.timestampFormat($conflitto['inizio']).' - '.timestampFormat($conflitto['fine']).'
'.$anagrafica_tecnico['ragione_sociale'].' '.(!empty($anagrafica_tecnico['deleted_at']) ? '('.tr('Eliminato').')' : '').' '.Modules::link('Interventi', $intervento->id, $intervento->getReference()).' '.timestampFormat($conflitto_intervento['orario_inizio']).' - '.timestampFormat($conflitto_intervento['orario_fine']).'
';