.
*/
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`, `name` 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 `name` ASC');
// Tipi intervento
$tipi_intervento = $dbo->fetchArray('SELECT `in_tipiintervento`.`id`, `in_tipiintervento_lang`.`name` 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 `name` ASC');
// Tecnici disponibili
$id_tipo_tecnico = Tipo::find((new Tipo())->getByField('name', '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 '
';
// Stati intervento
$stati_sessione = session_get('dashboard.idstatiintervento', []);
foreach ($stati_intervento as $stato) {
$attr = '';
if (in_array("'".$stato['id']."'", $stati_sessione)) {
$attr = 'checked="checked"';
}
echo '
';
}
echo '
';
// Tipi intervento
$tipi_sessione = session_get('dashboard.idtipiintervento', []);
foreach ($tipi_intervento as $tipo) {
$attr = '';
if (in_array("'".$tipo['id']."'", $tipi_sessione)) {
$attr = 'checked="checked"';
}
echo '
';
// Zone
$zone_sessione = session_get('dashboard.idzone', []);
foreach ($zone as $zona) {
$attr = '';
if (in_array("'".$zona['id']."'", $zone_sessione)) {
$attr = 'checked="checked"';
}
echo '
';
}
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 '
'.tr('Ci sono _NUM_ promemoria scaduti', [
'_NUM_' => $numero_mesi_precenti,
]).'.
';
}
// 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 '