Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
318 righe
18 KiB
318 righe
18 KiB
|
|
<? |
|
|
|
if (!empty($elabora_coda) && (!empty($_SESSION["ente"]))) { |
|
// esegui il cron solo se il tenant ha i moduli contratto e monitoraggio documentale attivo |
|
if(!empty($_SESSION['ente']->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.= "<br>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.= "<a href='".$href."' title='Sito esterno'>" . $href . "</a><br><br>"; |
|
$corpo.= "Distinti Saluti<br><br>"; |
|
$mailer->oggetto = $oggetto; |
|
$mailer->corpo = "<h2>" . $oggetto . "</h2>" . $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.= "<br>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.= "<a href='".$href."' title='Sito esterno'>" . $href . "</a><br><br>"; |
|
$corpo.= "Distinti Saluti<br><br>"; |
|
$mailer->oggetto = $oggetto; |
|
$mailer->corpo = "<h2>" . $oggetto . "</h2>" . $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"); |
|
} |
|
} |
|
|
|
} |
|
|
|
?>
|