moduli['contratti']) && !empty($_SESSION['ente']->moduli['contratti.documentale'])){ alertManager::printCliInfo("Preavvisi Monitoraggio Documentale"); if (empty(getQueueLog($_SESSION["ente"]->codice,"monitoraggioDocumentale"))) { $current_time = (int) date('H'); if($current_time >= 8){ // analizza solo quei contratti che hanno delle richieste che non sono in modalità bozza $r_contratti_richieste = $pdo->go("SELECT r_contratto_richiesta.codice_contratto, r_contratto_richiesta.codice_richiesta, r_contratto_richiesta.bloccante, b_contratti_richiesta_documentale.codice_classe_documentale, b_contratti_richiesta_documentale.codice_oe, b_contratti_richiesta_documentale.bozza FROM r_contratto_richiesta JOIN b_contratti_richiesta_documentale ON r_contratto_richiesta.codice_richiesta = b_contratti_richiesta_documentale.codice WHERE b_contratti_richiesta_documentale.soft_delete = 'N' AND b_contratti_richiesta_documentale.bozza = 'N' ") ->fetchAll(PDO::FETCH_ASSOC); if (!empty($r_contratti_richieste)) { $codiciClassiDocumentali = array_unique(pluck('codice_classe_documentale', $r_contratti_richieste)); $codiciClassiDocumentali = implode(",", $codiciClassiDocumentali); $classiDocumentali = $pdo->go("SELECT codice, ambito_validita, soggetto, titolo, scadenza FROM b_classe_documentale WHERE codice IN ($codiciClassiDocumentali) AND soft_delete = 'N' ") ->fetchAll(PDO::FETCH_ASSOC); $preavvisi = $pdo->go("SELECT codice_classe_documentale, preavviso FROM b_preavvisi WHERE codice_classe_documentale IN ($codiciClassiDocumentali) ORDER BY preavviso DESC")->fetchAll(PDO::FETCH_ASSOC); $codiciContratti = array_values(array_unique(pluck('codice_contratto', $r_contratti_richieste))); global $pdo; // sistema contratti e relative richieste $contratti = []; foreach($codiciContratti as $key => $codiceContratto){ $bind = [ ":codice"=>$codiceContratto, ":codice_gestore"=>$_SESSION["ente"]->codice ]; $sql = "SELECT * FROM b_contratti WHERE codice = :codice AND codice_gestore = :codice_gestore"; $contratti[$key] = $pdo->go($sql,$bind)->fetch(PDO::FETCH_ASSOC); foreach ($r_contratti_richieste as $key2 => $value) { if ($value['codice_contratto'] == $codiceContratto) { $contratti[$key]['richieste'][] = [ 'codice_richiesta' => $value['codice_richiesta'], 'codice_classe_documentale' => $value['codice_classe_documentale'], 'codice_oe' => $value['codice_oe'], 'bloccante' => $value['bloccante'] ]; } } } // sistema classi documentali e relativi preavvisi foreach ($classiDocumentali as $key => $classeDocumentale) { foreach ($preavvisi as $key2 => $preavviso) { if($classeDocumentale['codice'] == $preavviso['codice_classe_documentale']){ $classiDocumentali[$key]['preavvisi'][] = $preavviso['preavviso']; } } } foreach ($contratti as $key => $contratto) { foreach ($contratto['richieste'] as $key2 => $richiesta) { foreach ($classiDocumentali as $key3 => $classeDocumentale) { if ($richiesta['codice_classe_documentale'] == $classeDocumentale['codice']) { $updateBadge = false; // aggiungi data odierna che sarebbe 0 in tutti i preavvisi $codice_richiesta = $richiesta['codice_richiesta']; $risposte = $pdo->go("SELECT * FROM b_contratti_risposta_documentale WHERE codice_richiesta = {$codice_richiesta} AND stato != '20' AND stato != '30' AND data_scadenza IS NOT NULL AND b_contratti_risposta_documentale.codice IN ( SELECT MAX(codice) as codice FROM b_contratti_risposta_documentale GROUP BY codice_richiesta, codice_soggetto_oe )") ->fetchAll(PDO::FETCH_ASSOC); if(!empty($risposte)){ foreach ($risposte as $key => $risposta) { $date1 = new DateTime($risposta['data_scadenza']); $date2 = new DateTime(date('Y-m-d')); $update = $pdo->prepare("UPDATE b_contratti_risposta_documentale SET stato = :stato WHERE codice = :codice_risposta "); $mailDestinatari = [ "sa" => $contratto['codice_pec'], "oe" => $richiesta["codice_oe"], ]; // se data di scadenza risposta è <= oggi if ($date1->diff($date2)->invert == 0) { //SCADUTA // imposta risposta su scaduta $update->bindValue(":stato", '30'); $update->bindValue(":codice_risposta", $risposta['codice']); $update->execute(); $updateBadge = true; foreach ($mailDestinatari as $key => $mailDestinatario) { if($richiesta['bloccante'] == 'S'){ $oggetto = __('Attenzione!, documento Scaduto'); }else{ $oggetto = __('Documento Scaduto'); } $corpo = "Si informa la S.V. che il ".date('d-m-Y').", una risposta di una richiesta documentale '".$classeDocumentale['titolo']."' è scaduta "; $corpo.= "
Link sito:"; $mailer = new Communicator(); if ($key == 'sa') { $href = "https://".$_SESSION["ente"]->getInfo()["dominio"]."/backend/contratti/documentale/panel.php?codice=".$contratto["codice"]; $destinatari = [Communicator::getPecAddress($contratto["codice_pec"])]; $tmp = Ente::getUtentiFromModulo("contratti",$_SESSION["ente"]->codice,"",$contratto["codice"]); $utenti = Utente::getInfoFromID($tmp); if (!empty($utenti)) { foreach($utenti AS $utente) { $destinatari[] = $utente["email"]; } } // se il contratto è stato generato da una gara, // aggiungi nei destinatari della comunicazione, tutti gli incaricati della gara che hanno il seguento ruolo // - responsabile unico del procedimento // - direttore dell'esecuzione del contratto // - direttori dei lavori if( !empty($contratto['modulo_origine']) && !empty($contratto['codice_elemento']) && $contratto['modulo_origine'] == 'gare' ){ $sql = "SELECT b_gare.codice FROM b_contratti LEFT JOIN b_gare_lotti ON b_contratti.codice_elemento = b_gare_lotti.codice LEFT JOIN b_gare ON b_gare_lotti.codice_gara = b_gare.codice WHERE b_contratti.modulo_origine = :modulo_origine AND b_contratti.codice = :codice_contratto"; $codice_gara = $pdo->go($sql, [ ':modulo_origine' => 'gare', 'codice_contratto' => $contratto['codice'] ] )->fetch(PDO::FETCH_COLUMN); if(!empty($codice_gara)){ $gara = gara::init($codice_gara); if(!empty($gara->info['codice'])){ $tmpIncaricati = $gara->getManagerIncarichi(); $tmpIncaricati = $tmpIncaricati->getIncaricati() ?? []; if(!empty($tmpIncaricati)){ $incaricati = []; foreach ($tmpIncaricati as $tmpIncaricato) { if(in_array($tmpIncaricato['ruolo'], ['14', '5', '8'])){ $incaricati[] = $tmpIncaricato; } } // finire gestione degli incaricati a cui inviare la comunicazione // se l'incaricato ha il campo email valorizzato, inseriscilo nei destinatari // altrimenti vai a cercare l'email nella b_utenti tramite CF // altrimenti passa avanti if(!empty($incaricati)){ foreach ($incaricati as $incaricato) { if(!empty($incaricato['email'])){ $destinatari[] = $incaricato['email']; }elseif(!empty($incaricato['codice_fiscale'])){ $getEmail = $pdo->prepare("SELECT email FROM b_utenti WHERE cf = :cf AND attivo = 'S'"); $getEmail->bindValue(':cf', $incaricato['codice_fiscale']); $getEmail->execute(); if($getEmail->rowCount() > 0){ $destinatari[] = $getEmail->fetch(PDO::FETCH_COLUMN); } } } } } } } } $mailer->destinatari = $destinatari; }else{ $href = "https://".$_SESSION["ente"]->getInfo()["dominio"]."/contratti/documentale/index.php?modulo=contratti&codice_elemento=".$contratto["codice"]; $mailer->destinatari = $richiesta['codice_oe']; } $corpo.= "" . $href . "

"; $corpo.= "Distinti Saluti

"; $mailer->oggetto = $oggetto; $mailer->corpo = "

" . $oggetto . "

" . $corpo; $mailer->codice_pec = $contratto['codice_pec']; $mailer->comunicazione = true; $mailer->coda = false; $mailer->sezione = 'contratti'; $mailer->codice_gara = $contratto["codice"]; $mailer->send(); unset($mailer); } }else{ //IN SCADENZA foreach ($classeDocumentale['preavvisi'] as $key2 => $preavviso) { // se data scadenza - data odierna == preavviso // invia comunicazione e imposta lo stato della risposta su 25 // se la richiesta ha come stato bloccante // invia un msg di alert a tutti e 2. Il soggetto dell'email deve essere attenzione una risposta è scaduta $tmp = new DateTime(date('Y-m-d',strtotime("- $preavviso days"))); if ($date1->diff($date2)->format("%d") == $preavviso) { // coincide con un preavviso // imposta lo stato in scadenza $update->bindValue(":stato", '25'); $update->bindValue(":codice_risposta", $risposta['codice']); $update->execute(); if($richiesta['bloccante'] == 'S'){ foreach ($mailDestinatari as $key => $mailDestinatario) { $oggetto = __('Attenzione!, il documento è in scadenza '); $corpo = "Si informa la S.V. che il ".date('d-m-Y').", lo stato di una risposta in una richiesta documentale '".$classeDocumentale['titolo']."' è stata modificata in Scadenza "; $corpo.= "
Link sito:"; $mailer = new Communicator(); if ($key == 'sa') { $href = "https://".$_SESSION["ente"]->getInfo()["dominio"]."/backend/contratti/documentale/panel.php?codice=".$contratto["codice"]; $destinatari = [Communicator::getPecAddress($contratto["codice_pec"])]; $tmp = Ente::getUtentiFromModulo("contratti",$_SESSION["ente"]->codice,"",$contratto["codice"]); $utenti = Utente::getInfoFromID($tmp); if (!empty($utenti)) { foreach($utenti AS $utente) { $destinatari[] = $utente["email"]; } } $mailer->destinatari = $destinatari; }else{ $href = "https://".$_SESSION["ente"]->getInfo()["dominio"]."/contratti/documentale/index.php?modulo=contratti&codice_elemento=".$contratto["codice"]; $mailer->destinatari = $richiesta['codice_oe']; } $corpo.= "" . $href . "

"; $corpo.= "Distinti Saluti

"; $mailer->oggetto = $oggetto; $mailer->corpo = "

" . $oggetto . "

" . $corpo; $mailer->codice_pec = $contratto['codice_pec']; $mailer->comunicazione = true; $mailer->coda = false; $mailer->sezione = 'contratti'; $mailer->codice_gara = $contratto["codice"]; $mailer->send(); unset($mailer); } } } } } } } if ($updateBadge) { $badge = $contratto['badge'] + 1; $upBadge = $pdo->prepare("UPDATE b_contratti set badge = :badge WHERE codice = :codice_contratto"); $upBadge->bindValue(':codice_contratto', $contratto['codice']); $upBadge->bindValue(':badge', $badge); $upBadge->execute(); } } } } } } writeQueueLog($_SESSION["ente"]->codice,"monitoraggioDocumentale"); } }else{ alertManager::printCliWarning("Già eseguito"); } } } ?>