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.
493 righe
19 KiB
493 righe
19 KiB
<? |
|
class RichiestaDocumentale { |
|
|
|
public $info; |
|
protected $contratto; |
|
public $codice_ente; |
|
protected $db; |
|
|
|
private function __construct() { |
|
global $pdo; |
|
$this->db = $pdo; |
|
$this->codice_ente = $_SESSION["ente"]->codice ?? 0; |
|
} |
|
|
|
public static function init(stipula $contratto) |
|
{ |
|
$instance = new RichiestaDocumentale(); |
|
$instance->contratto = $contratto; |
|
return $instance; |
|
} |
|
|
|
/** |
|
* $operation |
|
* l'array opertation deve essere inizializzato in questo modo |
|
* ['tipo operazione','colonna']; |
|
* es: ['GROUP BY','classe_documentale'] |
|
*/ |
|
public static function getRichieste(array $filters = null, array $operation = null) |
|
{ |
|
|
|
global $pdo; |
|
$bind = []; |
|
$sql = "SELECT b_contratti_richiesta_documentale.codice, |
|
b_contratti_richiesta_documentale.codice_classe_documentale, |
|
b_contratti_richiesta_documentale.codice_oe, |
|
b_contratti_richiesta_documentale.descrizione, |
|
b_contratti_richiesta_documentale.invia_comunicazione, |
|
b_contratti_richiesta_documentale.bozza, |
|
b_contratti_richiesta_documentale.soft_delete, |
|
r_contratto_richiesta.codice_contratto, |
|
r_contratto_richiesta.bloccante "; |
|
$from = " FROM b_contratti_richiesta_documentale "; |
|
$join = " JOIN r_contratto_richiesta ON b_contratti_richiesta_documentale.codice = r_contratto_richiesta.codice_richiesta "; |
|
$where = " WHERE soft_delete = 'N' "; |
|
|
|
if (!empty($filters)) { |
|
if (!empty($filters["codice"])) { |
|
$bind[":codice"] = $filters["codice"]; |
|
$where .= " AND b_contratti_richiesta_documentale.codice = :codice "; |
|
} |
|
|
|
if (!empty($filters["codice_richiesta"])) { |
|
$bind[":codice_richiesta"] = $filters["codice_richiesta"]; |
|
$where .= " AND r_contratto_richiesta.codice_richiesta = :codice_richiesta "; |
|
} |
|
|
|
if (!empty($filters["codici_richiesta"])) { |
|
$codici = arrayIsNumeric($filters["codici_richiesta"]); |
|
$codici = implode(",",$codici); |
|
$where .= " AND r_contratto_richiesta.codice_richiesta IN ($codici) "; |
|
} |
|
|
|
if (!empty($filters["codice_contratto"])) { |
|
$bind[":codice_contratto"] = $filters["codice_contratto"]; |
|
$where .= " AND r_contratto_richiesta.codice_contratto = :codice_contratto "; |
|
} |
|
|
|
if (!empty($filters["codici_contratti"])) { |
|
$ids = arrayIsNumeric($filters["codici_contratti"]); |
|
$ids = implode(",",$ids); |
|
$where .= " AND r_contratto_richiesta.codice_contratto IN ($ids) "; |
|
} |
|
|
|
if (!empty($filters['codice_oe'])) { |
|
$bind[":codice_oe"] = $filters["codice_oe"]; |
|
$where .= " AND b_contratti_richiesta_documentale.codice_oe = :codice_oe "; |
|
} |
|
|
|
if (!empty($filters['codice_classe_documentale'])) { |
|
$bind[":codice_classe_documentale"] = $filters["codice_classe_documentale"]; |
|
$where .= " AND b_contratti_richiesta_documentale.codice_classe_documentale = :codice_classe_documentale"; |
|
} |
|
|
|
if (isset($filters["codici_classi_documentali"])) { |
|
$ids = arrayIsNumeric($filters["codici_classi_documentali"]); |
|
$ids = implode(",",$ids); |
|
$where .= " AND b_contratti_richiesta_documentale.codice_classe_documentale IN ($ids) "; |
|
} |
|
|
|
if(!empty($filters['invia_comunicazioni'])){ |
|
$bind[':invia_comunicazioni'] = $filters['invia_comunicazioni']; |
|
$where .= " AND b_contratti_richiesta_documentale.invia_comunicazione = :invia_comunicazioni"; |
|
} |
|
|
|
if(!empty($filters['bozza'])){ |
|
$bind[':bozza'] = $filters['bozza']; |
|
$where .= " AND b_contratti_richiesta_documentale.bozza = :bozza"; |
|
} |
|
|
|
if(!empty($filters['codici_destinatari'])){ |
|
|
|
$codiciDestinatari = arrayIsNumeric($filters['codici']); |
|
$codiciDestinatari = implode(",", $codiciDestinatari); |
|
$where .= " AND b_contratti_richiesta_documentale.codice_oe IN ($codiciDestinatari) "; |
|
} |
|
} |
|
|
|
if (!empty($operation['max_timestamp_creazione'])) { |
|
if ($operation['max_timestamp_creazione'] == 'MAX') { |
|
$sql.= ", MAX(b_contratti_richiesta_documentale.timestamp_creazione) as timestamp_creazione "; |
|
} |
|
}else{ |
|
$sql .= ", b_contratti_richiesta_documentale.timestamp_creazione "; |
|
} |
|
|
|
if (!empty($operation['codice_classe_documentale'])) { |
|
if ($operation['codice_classe_documentale'] == 'GROUP BY') { |
|
$where .= " GROUP BY b_contratti_richiesta_documentale.codice_classe_documentale "; |
|
} |
|
} |
|
|
|
if (!empty($operation['timestamp_creazione'])) { |
|
if ($operation['timestamp_creazione'] == 'ASC') { |
|
$where .= " ORDER BY b_contratti_richiesta_documentale.timestamp_creazione ASC"; |
|
}elseif($operation['timestamp_creazione'] == 'DESC'){ |
|
$where .= " ORDER BY b_contratti_richiesta_documentale.timestamp_creazione DESC"; |
|
} |
|
} |
|
if (!empty($operation['bloccante'])) { |
|
if ( $operation['bloccante'] == 'ASC') { |
|
$where .= " ORDER BY r_contratto_richiesta.bloccante ASC "; |
|
}else{ |
|
$where .= " ORDER BY r_contratto_richiesta.bloccante DESC "; |
|
} |
|
} |
|
if(!empty($operation['descrizione'])){ |
|
if($operation['descrizione'] == 'GROUP BY'){ |
|
$where .= " GROUP BY b_contratti_richiesta_documentale.descrizione "; |
|
} |
|
} |
|
|
|
$query = $sql.=$from.=$join.=$where; |
|
|
|
return $pdo->go($query, $bind)->fetchAll(PDO::FETCH_ASSOC) ?? []; |
|
} |
|
|
|
|
|
public static function salvaRichieste($data) |
|
{ |
|
|
|
$returns = []; |
|
|
|
if(!empty($data['codice_contratto']) && !empty($data['codice_oe']) && !empty($data['richieste'])){ |
|
|
|
$contratto = stipula::init($data["codice_contratto"]); |
|
$oe = oeManager::getOE($data['codice_oe']); |
|
|
|
if(!empty($contratto->info['codice']) && !empty($oe['codice'])){ |
|
$managerRichieste = self::init($contratto); |
|
|
|
$codiciClassiDocumentali = pluck('codice_classe_documentale', $data['richieste']); |
|
$classiDocumentali = ContrattoDocumentale::getAllDocumentali(['codici' => $codiciClassiDocumentali]); |
|
|
|
foreach ($data['richieste'] as $i => $richiesta) { |
|
$key = array_search($richiesta['codice_classe_documentale'], array_column($classiDocumentali, 'codice')); |
|
|
|
$classeDocumentale = $classiDocumentali[$key]; |
|
|
|
if(!empty($classeDocumentale['codice']) && $richiesta['codice_classe_documentale'] == $classeDocumentale['codice']){ |
|
|
|
$post = [ |
|
'codice_contratto' => $contratto->info['codice'], |
|
'codice_classe_documentale' => $classeDocumentale['codice'], |
|
'codice_oe' => $oe['codice'], |
|
'descrizione' => $data['descrizione'], |
|
'invia_comunicazione' => (!empty($richiesta['invia_comunicazione'])) ? 'S' : 'N', |
|
'bozza' => $data['bozza'], |
|
'bloccante' => !empty($richiesta['bloccante']) ? 'S' : 'N', |
|
'allegati' => !empty($data["allegato-{$classeDocumentale['codice']}"]) ? $data["allegato-{$classeDocumentale['codice']}"] : [], |
|
]; |
|
|
|
if($classeDocumentale['ambito_validita'] == 'contratto'){ |
|
|
|
// verifica se non esistono altre richieste della stessa classe documentale e per lo stesso OE |
|
$exist = $managerRichieste->getRichieste(['codice_classe_documentale' => $classeDocumentale['codice'], 'codice_oe' => $oe['codice'], 'codice_contratto' => $contratto->info['codice']]); |
|
|
|
if(empty($exist)){ |
|
|
|
$codice = $managerRichieste->salvaRichiestaRelazione($post); |
|
|
|
if (!empty($codice)) { |
|
$returns[$i]['save'] = true; |
|
$returns[$i]['codice_richiesta'] = $codice; |
|
}else{ |
|
$returns[$i]['save'] = false; |
|
} |
|
} |
|
}elseif($classeDocumentale['ambito_validita'] == 'oe'){ |
|
|
|
// esistono altre richieste della stessa classe documentale e per lo stesso OE |
|
$exist = $managerRichieste->getRichieste(['codice_classe_documentale' => $classeDocumentale['codice'], 'codice_oe' => $oe['codice'] ]); |
|
|
|
// se non esistono altre richieste della stessa classe documentae e per lo stesso OE |
|
if (empty($exist)) { |
|
|
|
$codice = $managerRichieste->salvaRichiestaRelazione($post); |
|
|
|
if (!empty($codice)) { |
|
$returns[$i]['save'] = true; |
|
$returns[$i]['codice_richiesta'] = $codice; |
|
}else{ |
|
$returns[$i]['save'] = false; |
|
} |
|
|
|
}else{ |
|
|
|
// se non esistono richieste per lo stesso contratto |
|
if (empty($managerRichieste->getRichieste(['codice_contratto' => $contratto->info['codice'] ,'codice_classe_documentale' => $classeDocumentale['codice'],'codice_oe' => $oe['codice']]))) { |
|
|
|
$post['codice_richiesta'] = $exist[0]['codice']; |
|
$post['allegati'] = !empty($data["allegato-{$post['codice_richiesta']}"]) ? $data["allegato-{$post['codice_richiesta']}"] : []; |
|
|
|
|
|
$codice = $managerRichieste->salvaRelazione($post); |
|
|
|
if (!empty($codice)) { |
|
$returns[$i]['save'] = true; |
|
$returns[$i]['codice_richiesta'] = $post['codice_richiesta']; |
|
}else{ |
|
$returns[$i]['save'] = false; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if ($contratto->info['stato'] <= '15' && $data['bozza'] == 'N') { |
|
$contratto->updateStato('15'); |
|
} |
|
} |
|
} |
|
|
|
$esitoComunicazione = 'notvalue'; |
|
|
|
if(!empty($returns)){ |
|
$richieste = pluck('codice_richiesta', $returns); |
|
$richieste = self::getRichieste(['codici_richiesta' => $richieste, 'invia_comunicazioni' => 'S', 'bozza' => 'N']); |
|
// script per inviare le comunicazioni |
|
// le comunicazioni, saranno inviate solo se invia_comunicazioni = S e bozza = N |
|
|
|
if(!empty($richieste)){ |
|
// ragruppa le richieste in base alla descrizione |
|
$corpo = $data['descrizione']; |
|
$corpo .= "<br><br>" . __("Effettuate la connessione alla piattaforma per effettuare il caricamento del documentale richiesto"); |
|
$esitoComunicazione = $managerRichieste->inviaComunicazione($oe['codice'], ['corpo' => $corpo]); |
|
} |
|
} |
|
|
|
return [ |
|
'save' => $returns, |
|
'comunicazione' => $esitoComunicazione |
|
]; |
|
} |
|
} |
|
|
|
return $returns; |
|
} |
|
|
|
public static function gestisciBozze($data) |
|
{ |
|
global $pdo; |
|
$returns = []; |
|
|
|
if(!empty($data['codice_contratto']) && !empty($data['richieste'])){ |
|
|
|
$contratto = stipula::init($data["codice_contratto"]); |
|
$oe = oeManager::getOE($data['codice_oe']); |
|
if(!empty($contratto->info['codice']) && !empty($oe['codice'])){ |
|
|
|
foreach ($data['richieste'] as $richiesta) { |
|
if(!empty($richiesta['codice_richiesta'])){ |
|
$bind = [ |
|
':codice_richiesta' => $richiesta['codice_richiesta'], |
|
':descrizione' => $data['descrizione'], |
|
':bloccante' => !empty($richiesta['bloccante']) ? 'S' : 'N', |
|
':invia_comunicazione' => !empty($richiesta['invia_comunicazione']) ? 'S' : 'N', |
|
':bozza' => 'N', |
|
':utente' => $_SESSION['utente']->codice, |
|
'allegati' => !empty($data["allegato-{$richiesta['codice_richiesta']}"]) ? $data["allegato-{$richiesta['codice_richiesta']}"] : [], |
|
]; |
|
|
|
// Aggiorna Richieste |
|
$sql = "UPDATE b_contratti_richiesta_documentale |
|
SET descrizione = :descrizione, |
|
invia_comunicazione = :invia_comunicazione, |
|
bozza = :bozza, |
|
utente_modifica = :utente |
|
WHERE codice = :codice_richiesta "; |
|
$ris = $pdo->go($sql,$bind); |
|
|
|
// Aggiorna Contratto |
|
if ($contratto->info['stato'] <= '15') { |
|
$contratto->updateStato('15'); |
|
} |
|
|
|
if($ris->rowCount() === 1){ |
|
// aggiorna relazione se esiste |
|
$sql = "UPDATE r_contratto_richiesta |
|
SET bloccante = :bloccante |
|
WHERE codice_richiesta = :codice_richiesta"; |
|
$ris = $pdo->go($sql,$bind); |
|
|
|
|
|
// salva file |
|
if(!empty($bind['allegati'])){ |
|
foreach ($bind['allegati'] as $allegato) { |
|
filesManager::saveFile($allegato["filename"], $richiesta['codice_richiesta'], "richiesta-documentale", $allegato["nome"] ?? "", "A", $allegato["classificazione"] ?? ""); |
|
} |
|
} |
|
}else{ |
|
return false; |
|
} |
|
} |
|
} |
|
|
|
$richieste = pluck('codice_richiesta', $data['richieste']); |
|
$richieste = self::getRichieste(['codici_richiesta' => $richieste, 'invia_comunicazioni' => 'S', 'bozza' => 'N']); |
|
// script per inviare le comunicazioni |
|
// le comunicazioni, saranno inviate solo se invia_comunicazioni = S e bozza = N |
|
|
|
if(!empty($richieste)){ |
|
$managerRichieste = self::init($contratto); |
|
// ragruppa le richieste in base alla descrizione |
|
$corpo = $data['descrizione']; |
|
$corpo .= "<br><br>" . __("Effettuate la connessione alla piattaforma per effettuare il caricamento del documentale richiesto"); |
|
$managerRichieste->inviaComunicazione($oe['codice'], ['corpo' => $corpo]); |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
} |
|
|
|
private function salvaRichiestaRelazione($data) |
|
{ |
|
|
|
$salva = null; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "b_contratti_richiesta_documentale"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = array( |
|
"codice_classe_documentale" => $data['codice_classe_documentale'], |
|
'codice_oe' => $data['codice_oe'], |
|
'descrizione' => $data['descrizione'], |
|
'invia_comunicazione' => $data['invia_comunicazione'], |
|
'bozza' => $data['bozza'], |
|
'utente_modifica' => $_SESSION["utente"]->codice, |
|
'timestamp_creazione' => date("d-m-Y H:i:s") |
|
); |
|
|
|
$codice = $salva->save(); |
|
|
|
if(!empty($codice)){ |
|
|
|
$data['codice_richiesta'] = $codice; |
|
if($this->salvaRelazione($data)){ |
|
return $codice; |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
private function salvaRelazione($data) |
|
{ |
|
|
|
$salva = null; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "r_contratto_richiesta"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = array( |
|
'codice_contratto' => $data['codice_contratto'], |
|
'codice_richiesta' => $data['codice_richiesta'], |
|
'bloccante' => $data['bloccante'], |
|
); |
|
|
|
$codice = $salva->save(); |
|
|
|
if (!empty($codice)) { |
|
if (isset($data['allegati'])) { |
|
foreach($data["allegati"] as $allegato) { |
|
filesManager::saveFile($allegato["filename"], $data['codice_richiesta'], "richiesta-documentale" ,$allegato["nome"] ?? "","A",$allegato["classificazione"] ?? ""); |
|
} |
|
} |
|
return $codice; |
|
} |
|
return false; |
|
} |
|
|
|
public function getInfo($codice) |
|
{ |
|
return $this->getRichieste(["codice"=>$codice])[0] ?? []; |
|
} |
|
|
|
/** |
|
* Specificare se sa o oe |
|
* sa = Stazione Appaltante |
|
* oe = Operatore Economico |
|
*/ |
|
static function getStati($parte) |
|
{ |
|
return rispostaDocumentale::getStati($parte); |
|
} |
|
|
|
/** |
|
* La invia comunicazione invia le richieste per tutte le modifiche fatte lato stazione appaltante |
|
*/ |
|
public function inviaComunicazione($destinatario, array $fields = null) |
|
{ |
|
$oggetto = __("Richiesta documentale contratti"); |
|
$corpo = __("Effettuate la connessione alla piattaforma per effettuare il caricamento del documentale richiesto"); |
|
|
|
if (!empty($fields)) { |
|
if (!empty($fields['oggetto'])) { |
|
$oggetto = $fields['oggetto']; |
|
} |
|
if (!empty($fields['corpo'])) { |
|
$corpo = $fields['corpo']; |
|
} |
|
} |
|
|
|
$mailer = new Communicator(); |
|
$mailer->oggetto = $oggetto; |
|
$mailer->corpo = $corpo; |
|
$mailer->corpo .= "<br><br>" . $_SESSION["config"]["link_sito"]."/contratti/documentale/index.php?modulo=contratti&codice_elemento=".$this->contratto->info['codice']; |
|
$mailer->codice_pec = $this->contratto->info['codice_pec']; |
|
$mailer->comunicazione = true; |
|
$mailer->sezione = "contratti"; |
|
$mailer->codice_gara = $this->contratto->info['codice']; |
|
$mailer->coda = false; |
|
$mailer->destinatari = $destinatario; |
|
return $mailer->send(); |
|
|
|
} |
|
|
|
|
|
public static function getBadgeGruppoColore($rBadges) |
|
{ |
|
|
|
if(!empty($rBadges)){ |
|
|
|
if (!empty($rBadges['statoLabel'])) { |
|
|
|
$stato = $rBadges['statoLabel']['key']; |
|
|
|
if($stato == '20' || $stato == '30'){ |
|
return "text-danger"; |
|
}elseif($stato == '5' || $stato == '10' || $stato == '25'){ |
|
return "text-warning"; |
|
}elseif($stato == '15'){ |
|
return "text-success"; |
|
} |
|
|
|
}else{ |
|
|
|
if (!empty($rBadges['statoBadges'])) { |
|
$badges = $rBadges['statoBadges']; |
|
}else{ |
|
$badges = $rBadges; |
|
} |
|
|
|
$array = []; |
|
foreach ($badges as $key => $badge) { |
|
if ($badge['contatori'] > 0) { |
|
$array[] = $key; |
|
} |
|
} |
|
|
|
if(in_array('20', $array) || in_array('30', $array)){ |
|
return "text-danger"; |
|
}elseif(in_array('5', $array) || in_array('10', $array) || in_array('25', $array)){ |
|
return "text-warning"; |
|
}elseif(in_array('15', $array)){ |
|
return "text-success"; |
|
} |
|
} |
|
} |
|
|
|
return null; |
|
} |
|
|
|
}
|
|
|