. */ use Carbon\Carbon; use Models\Module; use Modules\Anagrafiche\Tipo; include_once __DIR__.'/../../core.php'; // Individuazione dati selezionabili // Stati interventi $stati_intervento = $dbo->fetchArray('SELECT `in_statiintervento`.`id`, `title` as descrizione, `colore` FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record` = `in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `title` ASC'); // Tipi intervento $tipi_intervento = $dbo->fetchArray('SELECT `in_tipiintervento`.`id`, `in_tipiintervento_lang`.`title` AS descrizione FROM `in_tipiintervento` LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL ORDER BY `title` ASC'); // Tecnici disponibili $id_tipo_tecnico = Tipo::find((new Tipo())->getByField('title', 'Tecnico', Models\Locale::getPredefined()->id))->id; $tecnici_disponibili = $dbo->fetchArray('SELECT `an_anagrafiche`.`idanagrafica` AS id, `ragione_sociale`, `colore` FROM `an_anagrafiche` INNER JOIN `an_tipianagrafiche_anagrafiche` ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica` INNER JOIN `an_tipianagrafiche` ON `an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`=`an_tipianagrafiche`.`id` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id`=`an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang`='.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `in_interventi_tecnici` ON `in_interventi_tecnici`.`idtecnico` = `an_anagrafiche`.`idanagrafica` INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id` WHERE `an_anagrafiche`.`deleted_at` IS NULL AND `an_tipianagrafiche`.`id`='.$id_tipo_tecnico.' '.Modules::getAdditionalsQuery('Interventi', null, false).' GROUP BY `an_anagrafiche`.`idanagrafica` ORDER BY `ragione_sociale` ASC'); // Zone $zone = $dbo->fetchArray('(SELECT 0 AS ordine, \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT 1 AS ordine, id, descrizione FROM an_zone) ORDER BY ordine, descrizione ASC'); // Prima selezione globale per tutti i filtri if (!isset($_SESSION['dashboard']['idtecnici'])) { $_SESSION['dashboard']['idtecnici'] = ["'-1'"]; foreach ($tecnici_disponibili as $tecnico) { if (($user['gruppo'] == 'Tecnici' && $user['idanagrafica'] == $tecnico['id']) || $user['gruppo'] != 'Tecnici') { $_SESSION['dashboard']['idtecnici'][] = "'".$tecnico['id']."'"; } } } if (!isset($_SESSION['dashboard']['idstatiintervento'])) { $_SESSION['dashboard']['idstatiintervento'] = ["'-1'"]; foreach ($stati_intervento as $stato) { $_SESSION['dashboard']['idstatiintervento'][] = "'".$stato['id']."'"; } } if (!isset($_SESSION['dashboard']['idtipiintervento'])) { $_SESSION['dashboard']['idtipiintervento'] = ["'-1'"]; foreach ($tipi_intervento as $tipo) { $_SESSION['dashboard']['idtipiintervento'][] = "'".$tipo['id']."'"; } } if (!isset($_SESSION['dashboard']['idzone'])) { $_SESSION['dashboard']['idzone'] = ["'-1'"]; foreach ($zone as $zona) { $_SESSION['dashboard']['idzone'][] = "'".$zona['id']."'"; } } echo '

'; $solo_promemoria_assegnati = setting('Visualizza solo promemoria assegnati'); $id_tecnico = null; if ($user['gruppo'] == 'Tecnici' && !empty($user['idanagrafica'])) { $id_tecnico = $user['idanagrafica']; } $query_da_programmare = 'SELECT `data_richiesta` AS data FROM `co_promemoria` INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto` = `co_contratti`.`id` INNER JOIN `co_staticontratti` ON `co_contratti`.`idstato` = `co_staticontratti`.`id` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') INNER JOIN `an_anagrafiche` ON `co_contratti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` WHERE `co_staticontratti`.`is_pianificabile` = 1 AND `idintervento` IS NULL UNION SELECT IF(`data_scadenza` IS NULL, `data_richiesta`, `data_scadenza`) AS data FROM `in_interventi` INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`'; // Visualizzo solo promemoria del tecnico loggato if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) { $query_da_programmare .= ' INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); } $query_da_programmare .= ' WHERE (SELECT COUNT(*) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) = 0 AND `in_interventi`.`idstatointervento` IN(SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0)'; $risultati_da_programmare = $dbo->fetchArray($query_da_programmare); if (!empty($risultati_da_programmare)) { echo '
'; } echo '
'; if (!empty($risultati_da_programmare)) { echo '

'.tr('Promemoria da pianificare').'

'; // Controllo pianificazioni mesi precedenti // Promemoria contratti + promemoria interventi $query_mesi_precenti = 'SELECT `co_promemoria`.`id` FROM `co_promemoria` INNER JOIN `co_contratti` ON `co_promemoria`.`idcontratto`=`co_contratti`.`id` WHERE `idstato` IN(SELECT `id` FROM `co_staticontratti` WHERE `is_pianificabile` = 1) AND `idintervento` IS NULL AND DATE_ADD(`co_promemoria`.`data_richiesta`, INTERVAL 1 DAY) <= NOW() UNION SELECT `in_interventi`.`id` FROM `in_interventi` INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`'; // Visualizzo solo promemoria del tecnico loggato if (!empty($id_tecnico) && !empty($solo_promemoria_assegnati)) { $query_mesi_precenti .= ' INNER JOIN `in_interventi_tecnici_assegnati` ON `in_interventi`.`id` = `in_interventi_tecnici_assegnati`.`id_intervento` AND `id_tecnico` = '.prepare($id_tecnico); } $query_mesi_precenti .= ' WHERE (SELECT COUNT(*) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) = 0 AND `in_interventi`.`idstatointervento` IN(SELECT `id` FROM `in_statiintervento` WHERE `is_completato` = 0) AND DATE_ADD(IF(`in_interventi`.`data_scadenza` IS NULL, `in_interventi`.`data_richiesta`, `in_interventi`.`data_scadenza`), INTERVAL 1 DAY) <= NOW()'; $numero_mesi_precenti = $dbo->fetchNum($query_mesi_precenti); if ($numero_mesi_precenti > 0) { echo ''; } // Aggiunta della data corrente per visualizzare il mese corrente $risultati_da_programmare[] = [ 'data' => date('Y-m-d H:i:s'), ]; $mesi = collect($risultati_da_programmare) ->unique(function ($item) { $data = Carbon::parse($item['data']); return $data->format('m-Y'); }) ->sortBy('data'); echo '
'; } $vista = setting('Vista dashboard'); if ($vista == 'mese') { $def = 'dayGridMonth'; } elseif ($vista == 'giorno') { $def = 'timeGridDay'; } elseif ($vista == 'settimana') { $def = 'timeGridWeek'; } else { $def = 'listWeek'; } $days = [ 1 => 'Lunedì', 2 => 'Martedì', 3 => 'Mercoledì', 4 => 'Giovedì', 5 => 'Venerdì', 6 => 'Sabato', 0 => 'Domenica', ]; $working_days = explode(',', setting('Giorni lavorativi')); $non_working_days = []; foreach ($days as $key => $day) { if (!in_array($day, $working_days)) { array_push($non_working_days, $key); } } $modulo_interventi = Module::find((new Module())->getByField('title', 'Attività', Models\Locale::getPredefined()->id)); echo ' ';