info["codice_elemento"]) && !empty($this->info["modulo"]) && $this->info["modulo"] == "concorsi" && isset($_SESSION["utente"]) && $_SESSION["utente"]->permission($this->info["modulo"],$this->info["codice_elemento"])) { // Otteniamo info sulla gara $concorso = concorso::init($this->info["codice_elemento"]); if ($concorso) { $retval = ["MODULO" => $this->info["modulo"]]; // Prepariamo la struttura dati per gara $general = $concorso->info; // Togliamo la versione serializzata in JSON unset($general->info["extraInfo"]); $general["extraInfo"] = $concorso->getExtraInfo(); // Info sui round (Scadenze) $general["round"] = $concorso->round; $retval["ROUNDS"] = []; foreach($concorso->getRounds() as $round) { $tmpConcorso = concorso::init($concorso->info["codice"], $round["codice"]); $retval["ROUNDS"][$round["codice"]] = $tmpConcorso->round; $tmpConcorso = null; } if(isset($general["tipologia"])) { switch($general["tipologia"]) { case "ST": case "S": $general["tipologia"] = "services"; break; case "F": $general["tipologia"] = "supplies"; break; default: $general["tipologia"] = "works"; break; } } $general["codiceAppalto"] = $concorso->getPublicIdentifier(); $general["CPV_CODES"] = $concorso->getCategorieMerceologiche(); $retval["GENERAL"] = $general; // Caricamento dell'ente if (!empty($retval["GENERAL"]["codice_ente"])) { $tmp = Ente::getInfoFromID($retval["GENERAL"]["codice_ente"]) ?? []; if(! empty($tmp)) { $tmp = reset($tmp); if (!empty($tmp["cf"])) { $ente = $tmp; } else if (!empty($tmp["sua"]) && $tmp["ufficio"] == "S") { $tmp = Ente::getInfoFromID($tmp["sua"]) ?? []; if(! empty($tmp)) { $tmp = reset($tmp); if (!empty($tmp["cf"])) { $tmp = reset($tmp); $ente = $tmp; } } } } if (!empty($ente)) { $retval["STAZIONEAPPALTANTE"] = $ente; } } // Prendiamo l'url pubblico $retval["PUBLIC_URL"] = $concorso->getPublicExternalURL(); // Prendiamo le info sulla procedura //$retval["PROCEDURA"] = $concorso->getProcedura(); // Prepariamo le info sui partecipanti che saranno popolate in base ai lotto $retval["PARTECIPANTI"] = []; $retval["VINCITORI"] = []; // Incaricati $incaricati = $concorso->getManagerIncarichi()->getIncaricati(); if (!empty($incaricati)) { foreach($incaricati AS $incaricato) { if ($incaricato["ruolo"] == 14) { // 14: ruolo RUP $incaricato += $incaricato["extraInfo"]; unset($incaricato["extraInfo"]); $retval["CONTRACTING_BODY"]["CONTACT_POINTS"][] = $incaricato; } } } // Lotti $lotti = $concorso->getLotti(); foreach($lotti AS $lotto) { $concorso->setLotto($lotto["codice"]); $lotto = $concorso->lotto; $lotto["importoTotale"] = $lotto["importoBase"]; $lotto["PARTECIPANTI"] = $concorso->getPartecipanti(); $lotto["VINCITORI"] = $concorso->getAggiudicatari(); foreach( $concorso->getCriteri() as $criterio_i => $criterio) { $criterio["codice_gara"] = $concorso->info["codice"]; $criterio["codice_lotto"] = $lotto["codice"]; $criterio["formule"] = $concorso::getFormule(); $lotto["CRITERI"][$criterio_i] = $criterio; $lotto["OFFERTE"][$criterio_i] = $concorso->getOfferte($criterio["codice"]); } // Assicuriamoci che tutti i partecipanti siano nell'array principale dei partecipanti // senza duplicati foreach($lotto["PARTECIPANTI"] as $partecipante_lotto) { $found = false; // Verifichiamo in partecipanti se esiste già foreach($retval["PARTECIPANTI"] as $partecipante) { $reference = "codice_operatore"; if(($partecipante[$reference] ?? 0) == 0) { $reference = "codice_fiscale"; } if($partecipante[$reference] === $partecipante_lotto[$reference] ) { $found = true; break; } } // Se non c'è, lo settiamo if(!$found) { $retval["PARTECIPANTI"][] = $partecipante_lotto; } } $retval["LOT"][] = $lotto; } // Assicuriamoci che i lotti siano ordinati in base al numero usort($retval["LOT"], function ($a, $b) { return ($a["numero"] ?? 0) > ($b["numero"] ?? 0); }); // Ripuliamo i valori vuoti if(empty($retval["PARTECIPANTI"])) {unset($retval["PARTECIPANTI"]);} if(empty($retval["VINCITORI"])) {unset($retval["VINCITORI"]);} if(empty($retval["LOT"])) {unset($retval["LOT"]);} return $retval; } } ?>