gestione gare pubbliche
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.
 
 
 
 
 

369 righe
15 KiB

<?
class richiesteOE {
public $modulo;
public $modulo_riferimento;
protected $gestore;
public $elemento;
public $elemento_comunicazione;
public $sub;
public $lock;
public $oggetto;
public $codice_pec;
protected $admin;
public $partecipanti;
protected $db;
public static function moduliAbilitati() {
$return = [];
$return["pcp"] = ["modulo_riferimento"=> "pcp","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/pcp/panel.php","script"=>"/pcp/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]];
$return["pcp-deliverables"] = ["modulo_riferimento"=> "pcp","titolo"=>"Deliverables","returnURL"=>"/backend/pcp/panel.php","script"=>"/pcp/esecuzione/init.php","tipologie"=>["deliverable"=>"Deliverable"]];
$return["contratti"] = ["modulo_riferimento"=> "contratti","titolo"=>"Stipula contratti","returnURL"=>"/backend/contratti/panel.php","script"=>"/contratti/richieste/init.php","tipologie"=>["integrazione"=>"Documenti stipula"]];
$return["omc"] = ["modulo_riferimento"=> "omc","titolo"=>"Consultazioni","returnURL"=>"/backend/omc/panel.php","script"=>"/omc/richieste/init.php","tipologie"=>["materiale"=>"Materiale"]];
$return["gare"] = ["modulo_riferimento"=> "gare","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/gare/panel.php","script"=>"/gare/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","anomalie"=>"Verifica anomalie","integrazione"=>"Integrazione"]];
$return["concorsi"] = ["modulo_riferimento"=> "concorsi","titolo"=>"Appalti pre-commerciali","returnURL"=>"/backend/concorsi/panel.php","script"=>"/concorsi/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]];
$return["albo_fornitori"] = ["modulo_riferimento"=> "albo_fornitori","titolo"=>"Elenchi fornitori","returnURL"=>"/backend/albo_fornitori/partecipanti/dettaglio.php","script"=>"/albo_fornitori/partecipanti/richieste/init.php","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]];
$return["albi_commissione"] = ["modulo_riferimento"=> "albi_commissione","titolo"=>"Albi Commissione","returnURL"=>"/backend/albi_commissione/partecipanti/dettaglio.php","script"=>"/albi_commissione/partecipanti/richieste/init.php","riferimento_partecipante"=>"utente","tipologie"=>["soccorso"=>"Soccorso istruttorio","integrazione"=>"Integrazione"]];
return $return;
}
public function tipologie() {
return self::moduliAbilitati()[$this->modulo]["tipologie"] ?? [];
}
public function __construct($modulo=null,$elemento=null,$sub = 0)
{
if (!empty($modulo) && !empty($elemento)) {
if (!empty(self::moduliAbilitati()[$modulo])) {
global $pdo;
$this->modulo = $modulo;
$this->elemento = $elemento;
$this->gestore = $_SESSION["ente"]->codice;
$this->sub = $sub;
$this->db = $pdo;
$this->elemento_comunicazione = null;
$this->modulo_riferimento = $this->getModuloRiferimento();
return $this;
}
}
return false;
}
public function getDerivate($codice_richiesta) {
$return = [];
$tmp = $this->getRichieste("S",["codice_derivazione"=>$codice_richiesta]);
if (!empty($tmp)) {
foreach($tmp AS $richiesta) {
$return[$richiesta["codice"]] = $richiesta;
$derivate = $this->getDerivate($richiesta["codice"]);
if (!empty($derivate)) {
$return += $derivate;
}
}
}
return $return;
}
public function getFilePath($relazione) {
$dir = $this->getDir($relazione["codice_richiesta"],$relazione["codice"]);
if (!empty($dir) && !empty($relazione["sha1"])) {
return "{$dir}/{$relazione["sha1"]}";
}
}
public function getDir($codice_richiesta,$codice_relazione) {
global $config;
$path = "{$config["mediaFolder"]}/{$_SESSION["ente"]->codice}/risposte-oe/{$codice_richiesta}/{$codice_relazione}";
if (!is_dir($path)) {
mkdir($path,0777,true);
}
if (is_dir($path)) {
return $path;
}
}
public function getRichieste($attivi="S",$filters=[],$order=[],$start=0,$limit=-1) {
$sql = "SELECT * FROM b_richieste_oe WHERE codice_ente = :codice_ente AND soft_delete = 'N' ";
$bind = [":codice_ente"=>$this->gestore];
if (!empty($this->modulo)) {
$bind[":modulo"] = $this->modulo;
$sql .= " AND modulo = :modulo " ;
}
if (!empty($this->elemento)) {
$bind[":elemento"] = $this->elemento;
$sql .= " AND codice_elemento = :elemento " ;
}
if (!empty($this->sub)) {
$bind[":sub"] = $this->sub;
$sql .= " AND sub = :sub " ;
}
if ($attivi == "S") {
$sql .= " AND attivo = 'S' ";
}
if (!empty($filters["non_scadute"])) {
$sql .= " AND b_richieste_oe.scadenza > now() ";
}
if (!empty($filters)) {
$keys = ["titolo","testo","tipologia"];
$addWhere = [];
foreach($keys AS $key) {
if (isset($filters[$key]) || isset($filters["*"])) {
$value = $filters[$key] ?? $filters["*"];
$sudd = suddivisione_pdo($value,$key);
if (!empty($sudd)) {
$bind = $bind + $sudd["bind"];
$addWhere[] = $sudd["sql"];
}
}
}
if (count($addWhere) > 0) { $sql .= " AND (" . implode(" OR ",$addWhere) . ") "; }
if (isset($filters["codice"])) {
if (is_numeric($filters["codice"])) {
$bind[":codice"] = (int)$filters["codice"];
$sql .= " AND codice = :codice ";
} else if (is_array($filters["codice"]) && !empty($filters["codice"])) {
$cont = 0;
$codici = [];
foreach($filters["codice"] AS $codice) {
if (is_numeric($codice)) {
$cont++;
$bind[":codice_{$cont}"] = (int)$codice;
$codici[] = "codice = :codice_{$cont}";
}
}
if (!empty($codici)) {
$sql .= " AND (" . implode(" OR ",$codici) . ") ";
} else {
return false;
}
} else {
return false;
}
}
if (isset($filters["codice_derivazione"])) {
if (is_numeric($filters["codice_derivazione"])) {
$bind[":codice_derivazione"] = (int)$filters["codice_derivazione"];
$sql .= " AND codice_derivazione = :codice_derivazione ";
} else {
return false;
}
}
}
if (!empty($order)) {
$keys = ["timestamp","data","codice","titolo","scadenza","apertura"];
$sortArray = [];
foreach($keys AS $key) {
if (isset($order[$key])) {
if (strcmp($order[$key],"ASC") === 0) {
$sortArray[] = "{$key} ASC";
} else {
$sortArray[] = "{$key} DESC";
}
}
}
if (count($sortArray) > 0) {
$sql .= " ORDER BY " . implode(",",$sortArray);
}
} else {
$sql .= " ORDER BY data DESC";
}
if (is_numeric($limit) && is_numeric($start) && $limit != -1) {
$start = (int)$start;
$limit = (int)$limit;
$sql .= " LIMIT {$start}, {$limit}";
}
$return = $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC);
return $return;
}
public function getContent($codice_richiesta,$codice_relazione, $decrypt = false) {
$info = $this->getRichieste("S",["codice"=>$codice_richiesta]);
if (!empty($info)) {
$info = $info[0];
$bind = [":codice_richiesta"=>$info["codice"]];
$bind[":codice_relazione"] = $codice_relazione;
$sql = "SELECT *
FROM r_richieste_oe
WHERE codice_richiesta = :codice_richiesta
AND r_richieste_oe.codice = :codice_relazione ";
$return = $this->db->go($sql,$bind)->fetch(PDO::FETCH_ASSOC);
if(! empty($return)) {
$return["dir"] = $this->getDir($return["codice_richiesta"],$return["codice"]);
$return["file"] = $this->getFilePath($return);
if($decrypt && ! empty($return["file"])) {
$content = simple_decrypt(file_get_contents($return["file"]),base64_decode($return["content"]));
$return["content"] = $content;
}
return $return;
}
}
return false;
}
public function getOE($codice_richiesta,$codice_operatore = NULL) {
$info = $this->getRichieste("N",["codice"=>$codice_richiesta])[0] ?? null;
if (!empty($info["codice"])) {
$bind = [":codice_richiesta"=>$info["codice"]];
$sql = "SELECT r_richieste_oe.codice, r_richieste_oe.codice_operatore, r_richieste_oe.timestamp_trasmissione,
r_richieste_oe.nomeFile, r_richieste_oe.sha256
FROM r_richieste_oe
WHERE codice_richiesta = :codice_richiesta";
if ($codice_operatore !== NULL) {
$bind[":codice_operatore"] = $codice_operatore;
$sql .= " AND r_richieste_oe.codice_operatore = :codice_operatore ";
}
return $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC);
}
return false;
}
public function getObject() {
return $this->checkAdminPermission("OBJECT");
}
public function getInfoProcedura() {
global $beRoot;
$checkAdmin = false;
$path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"];
if (file_exists($path)) { include($path); }
}
public function getModuloRiferimento() {
return self::moduliAbilitati()[$this->modulo]["modulo_riferimento"];
}
public function checkAdminPermission($operazione = "CHECK") {
global $beRoot;
$checkAdmin = true;
if (!empty(self::moduliAbilitati()[$this->modulo])) {
$path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"];
if (file_exists($path)) {
include($path);
return $return;
}
}
return false;
}
public function printEditor() {
if ($this->checkAdminPermission()) {
$this->admin = true;
if (!empty($this->partecipanti) || !empty($this->getRichieste())) {
include (__DIR__."/backend-table.php");
} else {
alertManager::printAlertBox(__("Nessun destinatario disponibile"));
}
}
return false;
}
/**
* Salva la richiesta nei confronti degli Operatori Economici selezionati
*
* @param Array $data
* @return Array
*/
public function saveRichiesta(Array $data) : Array {
$continua = false;
$return = ["error"=>true,"codice"=>400,"descrizione"=>"Richiesta errata"];
if (!empty($data["codice"])) {
$tmp = $this->getRichieste("N",["codice"=>$data["codice"]]);
if (!empty($tmp)) {
$continua = true;
if ($tmp[0]["attivo"] == "S" && $data["attivo"] == "N") {
$continua = false;
}
}
} else {
$continua = true;
}
if ($continua) {
$errori = [];
$data["codice_ente"] = $_SESSION["ente"]->codice;
$data["data"] = date("d-m-Y H:i:s");
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_richieste_oe";
$mainOperation = $salva->operazione = (is_numeric($data["codice"])) ? "UPDATE" : "INSERT";
$salva->oggetto = $data;
$codice = $salva->save();
$callback = "reload";
if ($codice > 0) {
if (isset($data["allegato-richiesta"])) {
foreach($data["allegato-richiesta"] as $allegato) {
filesManager::saveFile($allegato["filename"],$codice,"richieste",$allegato["nome"] ?? "","A",$allegato["classificazione"] ?? "");
}
}
if (!empty($data["destinatari"])) {
foreach($data["destinatari"] AS $codice_operatore) {
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "r_richieste_oe";
$salva->operazione = "INSERT";
$salva->oggetto = array("codice_operatore"=>$codice_operatore,"codice_richiesta"=>$codice);
if (empty($salva->save())) {
$oe = oeManager::getOE($codice_operatore);
$callback = ($mainOperation == "UPDATE") ? "refresh" : "reset";
$errori[] = $oe["ragione_sociale"];
}
}
}
$return = ["error"=>false,"codice"=>$codice,"mancanti"=>$errori,"callback"=>$callback];
$data["codice"] = $codice;
$this->postSave($data);
if ($data["attivo"] == "S") {
$destinatari = $this->getOE($codice);
if (!empty($destinatari)) {
if ($this->modulo != "concorsi") {
$tmp = $this->getRichieste("S",["codice"=>$codice])[0];
$codici = array_column($destinatari,"codice_operatore");
$mailer = new Communicator();
$mailer->oggetto = $tmp["titolo"];
$mailer->corpo = $this->oggetto . " - " . $tmp["testo"] . "<br><br>" . __("Scadenza") .": " . mysql2completedate($tmp["scadenza"]);
$mailer->corpo .= "<br><br>". __("Effettua l'accesso alla piattaforma per rispondere alla richiesta"). ": <a href=\"{$_SESSION["config"]["link_sito"]}\" target=\"_blank\" title=\"".__("Sito esterno")."\">{$_SESSION["config"]["link_sito"]}</a><br><br>";
$check_allegati = filesManager::listFiles($codice, "richieste", "A", 0);
if(! empty($check_allegati)) {
ob_start();
filesManager::printlist($codice, "richieste", "A", 0, false);
$corpo_alleagati = ob_get_clean();
$corpo_alleagati = str_replace("/allegati/open.php", "{$_SESSION["config"]["link_sito"]}/allegati/open.php", $corpo_alleagati);
$mailer->corpo .= $corpo_alleagati;
}
$mailer->codice_pec = $this->codice_pec;
$mailer->comunicazione = true;
$mailer->comunicazione_tecnica = false;
$mailer->sezione = $this->modulo_riferimento;
$mailer->codice_gara = $this->elemento_comunicazione ?? $this->elemento;
$mailer->coda = true;
$mailer->destinatari = $codici;
$mailer->send();
}
} else {
$return["note"] = __("Nessun destinatario specificato");
$return["callback"] = ($mainOperation == "UPDATE") ? "refresh" : "reset";
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_richieste_oe";
$salva->operazione = "UPDATE";
$salva->oggetto = ["codice"=>$codice,"attivo"=>"N"];
$salva->save();
}
}
} else {
$return = ["error"=>true,"codice"=>500,"descrizione"=>"Errore nel salvataggio della richiesta"];
}
}
return $return;
}
public function postSave(Array $data) {
$obj = $this->getObject();
if (method_exists($obj,"postRichiesteOE")) {
$obj->postRichiesteOE($data);
}
}
}
?>