"DESC"],$start=0,$length=1) { global $pdo; $bind = [":codice_gestore"=>$codice_gestore]; $select = "SELECT b_gare.codice, b_gare.tipologia, b_gare.procedura, b_gare.codice_ente, b_gare.id, b_gare_round.id AS idFase, b_gare.stato, b_gare.prezzoRiferimento, b_gare.oggetto, b_gare.fase_attiva, b_gare_round.numero, b_gare_round.codice AS codice_round, b_gare_round.pubblicazione, b_gare_round.chiarimenti, b_gare_round.scadenza, GROUP_CONCAT(DISTINCT b_gare_lotti.cig) AS cig "; $from = " FROM b_gare JOIN b_gare_round ON b_gare.codice = b_gare_round.codice_gara AND b_gare.fase_attiva = b_gare_round.numero JOIN b_gare_lotti ON b_gare.codice = b_gare_lotti.codice_gara "; $where = " WHERE ((b_gare_round.pubblica = 2 AND b_gare_round.pubblicazione <= now()) "; if (isset($_SESSION["utente"])) { $where .= " OR (b_gare_round.pubblica = 1 AND b_gare_round.pubblicazione <= now() "; if (!empty($_SESSION["utente"]->oe)) { $idAperte = static::idFasiAperte(); $idInvito = static::idFasiInvito(); $bind[":operatore"] = $_SESSION["utente"]->oe["codice"]; $where .= " AND ("; $count = 0; $whereAperte = []; foreach($idAperte AS $idProcedura => $idFasi) { foreach($idFasi AS $idFase) { $bind[":procedura{$count}"] = $idProcedura; $bind[":fase{$count}"] = $idFase; $whereAperte[] = "(b_gare.procedura = :procedura{$count} AND b_gare_round.id = :fase{$count})"; $count++; } } $where .= "(" . implode(" OR ",$whereAperte) . ") OR ("; $whereInvito = []; foreach($idInvito AS $idProcedura => $idFasi) { foreach($idFasi AS $idFase) { $bind[":procedura{$count}"] = $idProcedura; $bind[":fase{$count}"] = $idFase; $whereInvito[] = "(b_gare.procedura = :procedura{$count} AND b_gare_round.id = :fase{$count})"; $count++; } } $where .= " (" . implode(" OR ",$whereInvito) . ") AND b_gare_round.codice IN (SELECT r_inviti_gare.codice_round FROM r_inviti_gare WHERE r_inviti_gare.codice_operatore = :operatore) "; $where .= ") )"; } else if (isset($_SESSION["utente"]) && !$_SESSION["utente"]->isSupportoOrRoot()) { $visualizzazioneGlobale = settingsManager::getValue("visualizzazioneProcedureRiservateATutti"); if ($visualizzazioneGlobale != "S") { if ($_SESSION["utente"]->gerarchia > 10) { $ids = Utente::getPermissionsInModulo($_SESSION["ente"]->codice,$_SESSION["utente"]->codice,"gare"); if (empty($ids)) { $ids = [0]; } $ids = implode(",",$ids); $where .= " AND b_gare.codice IN ({$ids}) "; } if (!$_SESSION["utente"]->fromHere()) { $where .= " AND codice_ente = :codice_ente "; $bind[":codice_ente"] = $_SESSION["utente"]->codice_ente; } } } $where .= ") "; } $where .= ") "; if (!empty($filters)) { $keys = ["b_gare.id","b_gare.oggetto","b_gare_lotti.oggetto","b_gare_lotti.cig","b_gare_lotti.cup"]; $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) { $where .= " AND (" . implode(" OR ",$addWhere) . ") "; } if (isset($filters["b_gare.codice_ente"])) { $bind[":codice_ente"] = (int)$filters["b_gare.codice_ente"]; $where .= " AND b_gare.codice_ente = :codice_ente "; } if (isset($filters["b_gare.procedura"])) { $bind[":procedura"] = $filters["b_gare.procedura"]; $where .= " AND b_gare.procedura = :procedura "; } if (isset($filters["b_gare.tipologia"])) { $bind[":tipologia"] = $filters["b_gare.tipologia"]; $where .= " AND b_gare.tipologia = :tipologia "; } if (isset($filters["b_gare.stato"])) { if (is_numeric($filters["b_gare.stato"])) { $bind[":stato"] = (int)$filters["b_gare.stato"]; $where .= " AND b_gare.stato = :stato "; } else if (!empty($_SESSION["utente"]->oe)) { $stato = $filters["b_gare.stato"]; if ($stato == "bozza") { $bind[":operatore"] = $_SESSION["utente"]->oe["codice"]; $from .= " JOIN r_partecipanti_gare ON b_gare_round.codice = r_partecipanti_gare.codice_round "; $where .= " AND r_partecipanti_gare.codice_operatore = :operatore AND b_gare_round.scadenza > now() AND r_partecipanti_gare.conferma = 'N' "; } else if ($stato == "inviti") { $bind[":operatore"] = $_SESSION["utente"]->oe["codice"]; $from .= " JOIN r_inviti_gare ON b_gare_round.codice = r_inviti_gare.codice_round "; $where .= " AND r_inviti_gare.codice_operatore = :operatore AND b_gare_round.pubblicazione <= now() AND b_gare_round.scadenza > now() AND b_gare_round.pubblica > 0 "; } else if ($stato == "aggiudicati") { $bind[":operatore"] = $_SESSION["utente"]->oe["codice"]; $from .= " JOIN r_partecipanti_gare ON b_gare_round.codice = r_partecipanti_gare.codice_round "; $from = str_replace("AND b_gare.fase_attiva = b_gare_round.numero","",$from); $where .= " AND r_partecipanti_gare.codice_operatore = :operatore AND r_partecipanti_gare.aggiudicatario = 'S' AND b_gare.stato >= 35 "; } else if ($stato == "archivio") { $bind[":operatore"] = $_SESSION["utente"]->oe["codice"]; $from .= " JOIN r_partecipanti_gare ON b_gare_round.codice = r_partecipanti_gare.codice_round "; $from = str_replace("AND b_gare.fase_attiva = b_gare_round.numero","",$from); $where .= " AND r_partecipanti_gare.codice_operatore = :operatore AND r_partecipanti_gare.conferma = 'S' "; } } else { return []; } } if (isset($filters["b_gare.codice"])) { $bind[":codice"] = (int)$filters["b_gare.codice"]; $where .= " AND b_gare.codice = :codice "; } } $sort = "ORDER BY b_gare.codice DESC "; if (!empty($order)) { $keys = ["b_gare.codice","b_gare.stato","b_gare.oggetto","b_gare.prezzoRiferimento","b_gare_round.pubblicazione","b_gare_round.chiarimenti","b_gare_round.numero","b_gare_round.scadenza"]; $sortArray = []; foreach($keys AS $key) { if (isset($order[$key])) { if (strcmp($order[$key],"ASC") === 0) { $sortArray[] = "{$key} ASC"; } else { $sortArray[] = "{$key} DESC"; } } } if (!empty($sortArray)) { $sort = " ORDER BY " . implode(",",$sortArray); } } $limit = ""; if (is_numeric($start) && is_numeric($length) && $length > 0) { $start = (int)$start; $length = (int)$length; $limit = " LIMIT {$start}, {$length}"; } $return = $pdo->go($select.$from.$where." GROUP BY b_gare.codice ".$sort.$limit,$bind)->fetchAll(PDO::FETCH_ASSOC); return $return; } private function __construct() { global $pdo; $this->db = $pdo; $this->commissario = false; $this->potentialAction = false; $this->managerPartecipazione = null; } public static function idFasiAperte() { $procedure = getProcedure(); $return = []; if (!empty($procedure)) { foreach($procedure AS $idProcedura => $procedura) { if (!empty($procedura["fasi"])) { foreach($procedura["fasi"] AS $id => $fase) { if ($fase["aperta"]) { if (!isset($return[$idProcedura])) { $return[$idProcedura] = []; } if (!in_array($id,$return[$idProcedura])) { $return[$idProcedura][] = $id; } } } } } } return $return; } public static function idFasiInvito() { $procedure = getProcedure(); $return = []; if (!empty($procedure)) { foreach($procedure AS $idProcedura => $procedura) { if (!empty($procedura["fasi"])) { foreach($procedura["fasi"] AS $id => $fase) { if (!$fase["aperta"]) { if (!isset($return[$idProcedura])) { $return[$idProcedura] = []; } if (!in_array($id,$return[$idProcedura])) { $return[$idProcedura][] = $id; } } } } } } return $return; } public function miaPartecipazione() { if (isset($_SESSION["utente"]) && $_SESSION["utente"]->gerarchia >= 100 && !empty($_SESSION["utente"]->oe) && !empty($this->lotto)) { $bind = [":codice_round"=>$this->round["codice"]]; $bind[":codice_operatore"]=$_SESSION["utente"]->oe["codice"]; $bind[":codice_lotto"]=$this->lotto["codice"]; $sql = "SELECT * FROM r_partecipanti_gare WHERE codice_round = :codice_round AND codice_lotto = :codice_lotto AND codice_operatore = :codice_operatore"; return $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC)[0] ?? false; } } public function partecipato($confirmed = null) { if (isset($_SESSION["utente"]) && $_SESSION["utente"]->gerarchia >= 100 && !empty($_SESSION["utente"]->oe)) { $bind = [":codice_round"=>$this->round["codice"]]; $bind[":codice_operatore"]=$_SESSION["utente"]->oe["codice"]; $sql = "SELECT codice FROM r_partecipanti_gare WHERE codice_round = :codice_round AND codice_operatore = :codice_operatore"; if (isset($confirmed)) { $sql .= " AND conferma = :conferma "; $bind[":conferma"] = ($confirmed) ? "S" : "N"; } return ($this->db->go($sql,$bind)->rowCount() > 0) ? true : false; } } public function listPartecipanti($partecipante=null) { return parent::listPartecipanti($this->miaPartecipazione()["codice"] ?? false); } public function listPartecipantiSeduta($partecipante=null) { if ($this->sedutaAperta()) { return parent::listPartecipanti($partecipante); } return false; } public function revoca($delete = false) { $return = false; if ($this->partecipazioneAttiva()) { $partecipante = $this->miaPartecipazione(); if (!empty($partecipante)) { if (!$delete) { $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_partecipanti_gare"; $salva->operazione = "UPDATE"; $salva->oggetto = ["codice"=>$partecipante["codice"],"conferma"=>"N"]; $return = $salva->save(); } else { $richieste = $this->getRichieste(); foreach($richieste AS $richiesta) { $this->deleteBusta($richiesta["codice"]); } $ris = $this->db->go("DELETE FROM r_partecipanti_gare WHERE codice = :codice",[":codice"=>$partecipante["codice"]]); if ($ris->rowCount() > 0) { $return = true; scriviLog("r_partecipanti_gare","DELETE",$this->db->getSQL()); } } if (!empty($return)) { if ($this->modalitaLotti() == "tutti") { $this->db->go("UPDATE r_partecipanti_gare SET conferma = 'S' WHERE codice_round = :round AND codice_operatore = :operatore",[":round"=>$this->round["codice"],":operatore"=>$_SESSION["utente"]->oe["codice"]]); scriviLog("r_partecipanti_gare","DELETE",$this->db->getSQL()); } if ($partecipante["conferma"] == "S") { $editor = new editorManager("msg-revoca-gara",0); $editor->vocabolario["ragione-sociale"] = $_SESSION["utente"]->oe["ragione_sociale"]; $editor->vocabolario["gara"] = $this->info; $editor->vocabolario["fase"] = $this->round; $editor->vocabolario["lotto"] = $this->lotto; $corpo = $editor->getModello(); $mailer = new Communicator(); $mailer->oggetto = __('Revoca partecipazione') . " Gara #" . $this->info["id"]; if ($this->modalitaLotti() != "tutti") { $mailer->oggetto .= " - Lotto #" . $this->lotto["numero"]; } $mailer->corpo = $corpo; $mailer->codice_pec = $this->info["codice_pec"] ?? 0; $mailer->comunicazione = true; $mailer->sezione = "gare"; $mailer->codice_gara = $this->info["codice"]; $mailer->coda = false; $mailer->destinatari = array($_SESSION["utente"]->oe["codice"]); $mailer->send(); $mailer->codice_pec = -1; $mailer->comunicazione = false; $mailer->destinatari = Communicator::getPecAddress($this->info["codice_pec"]); $mailer->send(); } } } } return $return; } public function getPartecipantiSeduta($codice = "") { if ($this->sedutaAperta()) { if (empty($codice)) { return parent::getPartecipanti(); } else { return parent::getPartecipante($codice); } } return false; } private function getPartecipanteForBusta($partecipante) { $caller = debug_backtrace()[2]['function'] ?? null; if ($caller != "getBustaAccesso") { $tmp = $this->miaPartecipazione(); if (!empty($tmp)) { return $tmp["codice"]; } } else { return $partecipante; } } public function getBusta($partecipante,$richiesta,$aggiuntive = false,bool $contenuto = false) { $partecipante = $this->getPartecipanteForBusta($partecipante); if (!empty($partecipante)) { return parent::getBusta($partecipante,$richiesta,$aggiuntive,$contenuto); } return false; } public function getBustaSecretata($partecipante,$richiesta,$derivazione,bool $contenuto = false) { $partecipante = $this->getPartecipanteForBusta($partecipante); if (!empty($partecipante)) { return parent::getBustaSecretata($partecipante,$richiesta,$derivazione,$contenuto); } return false; } public function deleteBusta($codice_richiesta) { if ($this->partecipazioneAttiva() && !empty($this->miaPartecipazione())) { $busta = $this->getBusta($this->miaPartecipazione()["codice"],$codice_richiesta,false); if (!empty($busta)) { unlink($this->getSpecificBustaPath($busta)); $sql = "DELETE FROM b_gare_buste WHERE codice_partecipante = :codice_partecipante AND codice_richiesta = :codice_richiesta "; $this->db->go($sql,[":codice_partecipante"=>$this->miaPartecipazione()["codice"],":codice_richiesta"=>$codice_richiesta]); scriviLog("b_gare_buste","DELETE",$this->db->getSQL()); $this->deleteSecretate($codice_richiesta); } } } public function deleteSecretate($codice_richiesta) { if ($this->partecipazioneAttiva() && !empty($this->miaPartecipazione())) { $derivazione = "busta"; } else if ($this->emendamentiAttivi()) { $derivazione = "emendamento"; } if (!empty($derivazione)) { $busta = $this->getBustaSecretata($this->miaPartecipazione()["codice"],$codice_richiesta,$derivazione,false); if (!empty($busta)) { unlink($this->getSpecificSecretatePath($busta)); $sql = "DELETE FROM b_gare_buste_secretate WHERE derivazione = :derivazione AND codice_partecipante = :codice_partecipante AND codice_richiesta = :codice_richiesta "; $this->db->go($sql,[":codice_partecipante"=>$this->miaPartecipazione()["codice"],":derivazione"=>$derivazione,":codice_richiesta"=>$codice_richiesta]); scriviLog("b_gare_buste_secretate","DELETE",$this->db->getSQL()); } } } public function getEmendamento($partecipante,$richiesta,bool $contenuto = false) { $partecipante = $this->getPartecipanteForBusta($partecipante); if (!empty($partecipante)) { return parent::getEmendamento($partecipante,$richiesta,$contenuto); } return false; } public function deleteEmendamento($codice_richiesta) { if ($this->emendamentiAttivi()) { $busta = $this->getEmendamento($this->miaPartecipazione(),$codice_richiesta,false); if (!empty($busta)) { unlink($this->getSpecificEmendamentoPath($busta)); $sql = "DELETE FROM b_gare_emendamenti WHERE codice_partecipante = :codice_partecipante AND codice_richiesta = :codice_richiesta "; $this->db->go($sql,[":codice_partecipante"=>$this->miaPartecipazione()["codice"],":codice_richiesta"=>$codice_richiesta]); scriviLog("b_gare_emendamenti","DELETE",$this->db->getSQL()); $this->deleteSecretate($codice_richiesta); } } } public function showPanel() { $return = $this->partecipazioneAttiva(); if (!$return) { $return = $this->miaPartecipazione(); if (!empty($return)) { if ($return["conferma"] != "S") { return false; } } } if (!empty($return)) { return true; } return false; } public function hasInvito() { if ($this->round["infoFase"]["aperta"]) { return true; } else { $invitati = $this->getInvitati(); $invitati = array_column($invitati,"codice_operatore"); if (isset($_SESSION["utente"]) && array_search($_SESSION["utente"]->oe["codice"],$invitati) !== false) { return true; } } return false; } public function partecipazioneAttiva() { if ($this->potentialAction) { if (is_null($this->__proceduraAttiva)) { $this->__proceduraAttiva = false; if ($this->getModalita()["online"]) { if ($this->info["stato"] == "20") { if ($this->info["fase_attiva"] == $this->round["numero"]) { if (strtotime($this->round["scadenza"]) > time()) { $this->__proceduraAttiva = true; } } } } } if ($this->__proceduraAttiva) { if (empty($this->lotto)) { return true; } else { $return = $this->hasInvito(); if ($return) { $modalita = $this->modalitaLotti(); if ($modalita === "singola" && $this->partecipato(true)) { $return = false; $partecipazione = $this->miaPartecipazione(); if (!empty($partecipazione) && $partecipazione["conferma"] == "S") { $return = true; } } } return $return; } } } return false; } public function canAccessAccessoAttiAutomatico($lotto = null) { if (empty($this->lotto)) { $setLotto = true; if (empty($lotto)) { $lotti = array_column($this->getLotti(),"codice"); } else { $lotti = [$lotto]; } } else { $setLotto = false; $lotti = [$this->lotto["codice"]]; } if (!empty($lotti)) { foreach($lotti AS $lotto) { if ($setLotto) { $this->setLotto($lotto); } if ($this->accessoAttiAutomatico($lotto) && $this->pubblicaAtti()) { $partecipante = $this->miaPartecipazione(); if (!empty($partecipante) && $partecipante["escluso"] == "N" && $partecipante["conferma"] == "S") { if ($setLotto) { $this->lotto = null; } return true; } } if ($setLotto) { $this->lotto = null; } } } return false; } public function getBusteSoggetteAccesso() { $io = $this->miaPartecipazione(); $return = []; if ($io["escluso"] == "N") { $richieste = $this->getRichiestePubblicabili(); $partecipanti = $this->getPartecipanti(); if (!empty($richieste) && !empty($partecipanti)) { foreach($partecipanti AS $partecipante) { if ($partecipante["codice"] != $io["codice"] && $partecipante["escluso"] == "N" && !empty($partecipante["posizione"]) && ( ((int) $partecipante["posizione"] === 1) || ($io["posizione"] <= 5 && $partecipante["posizione"] <= 5) )) { $return[$partecipante["codice"]] = []; foreach($richieste AS $richiesta) { $tmp = $this->getBustaAccesso($richiesta["codice"],$partecipante["codice"]); if (!empty($tmp) && $tmp["pubblica"] == "S") { $return[$partecipante["codice"]][$richiesta["codice"]] = $tmp; } } } } } } return $return; } public function emendamentiAttivi() { if ($this->potentialAction && $this->getModalita()["online"] && $this->info["stato"] == "21" && $this->info["fase_attiva"] == $this->round["numero"] && strtotime($this->round["scadenza"]) < time() && strtotime($this->round["apertura"]) > time() && ((!empty($this->getRisposteElaborazione()["emendamentoOfferte"])) && $this->getRisposteElaborazione()["emendamentoOfferte"] == "S")) { $partecipazione = $this->miaPartecipazione(); if (!empty($partecipazione) && $partecipazione["conferma"] == "S") { return true; } } return false; } public function savePartecipante($placeholder = null) { $return = false; if (!empty($this->lotto)) { $partecipante = array(); $partecipante["codice_round"] = $this->round["codice"]; $partecipante["codice_lotto"] = $this->lotto["codice"]; $partecipante["codice_operatore"] = $_SESSION["utente"]->oe["codice"]; $partecipante["stato"] = $_SESSION["utente"]->oe["stato_legale"]; $partecipante["codice_fiscale"] = $_SESSION["utente"]->oe["codice_fiscale_impresa"]; $partecipante["ragione_sociale"] = $_SESSION["utente"]->oe["ragione_sociale"]; if (!$this->round["infoFase"]["autoAmmissione"]) { $partecipante["escluso"] = "P"; } $salva = new salva(); $salva->debug = false; $salva->nome_tabella = "r_partecipanti_gare"; $salva->operazione = "INSERT"; $salva->oggetto = $partecipante; $salva->oggetto["uuid"] = uuidgen_v4(); if ($salva->save()) { $return = $this->miaPartecipazione(); } } return $return; } public function checkFormFill($busta="") { $return = false; $partecipante = $this->miaPartecipazione(); if (!empty($partecipante)) { $bind = []; $bind[":partecipante"] = $partecipante["codice"]; $bind[":busta"] = $busta; $check = "SELECT codice,md5,sha1,sha256,shaContent,salt FROM b_offerte_gare WHERE codice_partecipante = :partecipante AND tipo = :busta ORDER BY codice DESC"; $return = $this->db->go($check,$bind)->fetch(PDO::FETCH_ASSOC); } return $return; } public function chiarimentiAperti() { if ($this->potentialAction) { if ($this->getModalita()["online"]) { if ($this->info["stato"] == "20") { if ($this->info["fase_attiva"] == $this->round["numero"]) { if (strtotime($this->round["chiarimenti"]) > time()) { return true; } } } } } return false; } public function sopralluogoAperti() { if ($this->potentialAction) { if ($this->getModalita()["online"]) { if ($this->info["stato"] == "20") { if ($this->info["fase_attiva"] == $this->round["numero"]) { if (!empty(mysql2datetime($this->round["sopralluogo"])) && strtotime($this->round["sopralluogo"]) > time()) { return true; } } } } } return false; } public static function init($codice,$codice_round=NULL,$valutazione=NULL) { if (!empty($codice) && !empty($_SESSION["ente"])) { $check = self::getList($_SESSION["ente"]->codice,["b_gare.codice"=>$codice]); if (!empty($check) && count($check) == 1) { global $pdo; $bind = [":codice"=>$codice]; $sql = "SELECT * FROM b_gare WHERE codice = :codice "; $gara = $pdo->go($sql,$bind)->fetch(PDO::FETCH_ASSOC); if (!empty($gara)) { $continua = false; $bind = [":codice_gara"=>$codice]; $sql = "SELECT * FROM b_gare_round WHERE codice_gara = :codice_gara "; if (!empty($codice_round)) { $bind[":codice_round"] = $codice_round; $sql .= " AND codice = :codice_round "; } $sql .= " ORDER BY numero DESC"; $rounds = $pdo->go($sql,$bind); if ($rounds->rowCount() > 0) { if (empty($codice_round)) { while($round = $rounds->fetch(PDO::FETCH_ASSOC)) { if ($round["numero"] == $gara["fase_attiva"]) { break; } } } else { $round = $rounds->fetch(PDO::FETCH_ASSOC); } } if (isset($round)) { $instance = new publicGara(); $instance->info = $gara; $instance->round = $round; $instance->round["infoFase"] = $instance->getProcedura()["fasi"][$instance->round["id"]]; $instance->activeRound = false; $instance->privata = false; $allRounds = $instance->getRounds(); $roundRiferimento = reset($allRounds); $timeRiferimentoNormativo = time(); if (!empty($roundRiferimento["pubblicazione"])) { $timeRiferimentoNormativo = strtotime($roundRiferimento["pubblicazione"]); } $enteBeneficiario = Ente::getInfoFromID($gara["codice_ente"])[0] ?? null; if (isset($enteBeneficiario["soggettoPrivato"]) && $enteBeneficiario["soggettoPrivato"] == "S") { $instance->privata = true; } if ($round["numero"] == $gara["fase_attiva"]) { $instance->activeRound = true; } if ($round["numero"] < $gara["fase_attiva"]) { $instance->info["stato"] = 100; } else if ($round["numero"] > $gara["fase_attiva"]) { $instance->info["stato"] = 0; if ($gara["stato"] > 0) { $instance->info["stato"] = 10; } } $extraInfo = $instance->getExtraInfo()["gara"]; if (!empty($extraInfo["normaRiferimento"]) && !empty(self::riferimentiNormativi()[$extraInfo["normaRiferimento"]])) { $instance->normaRiferimento = $extraInfo["normaRiferimento"]; } if (empty($instance->normaRiferimento)) { $instance->normaRiferimento = self::findRiferimentoNormativo($timeRiferimentoNormativo); } if (isset($_SESSION["utente"])) { if ($_SESSION["utente"]->gerarchia >= 100 && !empty($_SESSION["utente"]->oe)) { if ($instance->round["infoFase"]["aperta"]) { $instance->potentialAction = true; } else { if (strtotime($round["pubblicazione"]) <= time()) { $invitati = $instance->getInvitati(); foreach($invitati AS $invito) { if ($invito["codice_operatore"] == $_SESSION["utente"]->oe["codice"]) { $instance->potentialAction = true; break; } } } } } } if ($instance->privata && !$instance->potentialAction) { return false; } if ($gara["stato"] == 20 && strtotime($round["scadenza"]) < time() && $instance->activeRound) { $pdo->go("UPDATE b_gare SET stato = 21 WHERE codice = :codice AND stato = 20",[":codice"=>$gara["codice"]]); $instance->info["stato"] = 21; } return $instance; } } } return false; } } public function getAsta($object = false) { $asta = parent::getAsta(); if (!empty($asta)) { $istance = new publicAsta($this,$asta); if (!empty($istance->info)) { if ($object) { return $istance; } else { return $asta; } } } } public function getChiarimenti($codice = NULL) { $tmp = parent::getChiarimenti($codice); $chiarimenti = []; $codice_oe = $_SESSION["utente"]->oe["codice"] ?? null; foreach($tmp AS $chiarimento) { if ($codice_oe == $chiarimento["codice_richiedente"] || (!empty($chiarimento["risposta"]) && $chiarimento["attivo"] == "S")) { $chiarimenti[] = $chiarimento; } } return $chiarimenti; } public function getSopralluoghi($codice = NULL) { $tmp = parent::getSopralluoghi($codice); $sopralluoghi = []; $codice_oe = $_SESSION["utente"]->oe["codice"] ?? null; foreach($tmp AS $chiarimento) { if ($codice_oe == $chiarimento["codice_richiedente"]) { if ($chiarimento["attivo"] == "P") { $chiarimento["risposta"] = ""; $chiarimento["appuntamento"] = null; } $sopralluoghi[] = $chiarimento; } } return $sopralluoghi; } public function getAvvisi() { return parent::getManagerAvvisi()->getAvvisi(); } public function getManagerRichieste() { $manager = new publicRichiesteOE("gare",$this->info["codice"],$this->lotto["codice"] ?? null); if (!empty($manager)) { return $manager; } } public function getRichiesteIntegrazione() { $manager = $this->getManagerRichieste(); if (!empty($manager)) { return $manager->getRichieste(); } } public function getManagerPartecipazione() { if (empty($this->managerPartecipazione)) { $manager = new busteOE; $manager->submit = ($this->hasInvito() && $this->partecipazioneAttiva()); $manager->amend = $this->emendamentiAttivi(); $manager->obj = $this; $manager->modulo = "gare"; $manager->deletable = $this->partecipazioneAttiva(); $manager->variables = ["codice_gara"=>$this->info["codice"],"codice_lotto"=>$this->lotto["codice"],"codice_round"=>$this->round["codice"]]; $this->managerPartecipazione = $manager; } return $this->managerPartecipazione; } } ?>