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.
 
 
 
 
 

423 righe
22 KiB

<?
$configPath = substr(__DIR__,0,strpos(__DIR__,"/public_html"))."/config.php";
include_once($configPath);
if (isset($_SESSION["ente"])) {
function validateRequest($params) {
if (!empty($params->token) && $params->token == $_SESSION["ente"]->getInfo()["token"]) {
return true;
}
}
function getGare($params) {
if (validateRequest($params)) {
$json = [];
$filters = [];
if (!empty($params->tipologia)) {
$tipologie = getTipologieAffidamento(true, null);
$tipologie = array_combine(array_column($tipologie, "codice_api"), array_keys($tipologie));
if(! empty($tipologie[$params->tipologia])) {
$filters["b_gare.tipologia"] = $tipologie[$params->tipologia];
}
}
if (!empty($params->procedura)) {
$procedure = getProcedure(true, null, null, $_SESSION["ente"]->codice);
$procedure = array_combine(array_column($procedure, "codice_api"), array_keys($procedure));
if(! empty($procedure[$params->procedura])) {
$filters["b_gare.procedura"] = $procedure[$params->procedura];
}
}
if (!empty($params->stato)) {
switch($params->stato) {
case "3": $filters["b_gare.stato"] = "20"; break; // titolo": "Pubblicato"
case "4": $filters["b_gare.stato"] = "30"; break; // titolo": "Proposta di aggiudicazione"
case "5": $filters["b_gare.stato"] = "31"; break; // titolo": "Verifica anomalie"
case "7": $filters["b_gare.stato"] = "35"; break; // titolo": "Aggiudicazione definitiva"
case "8": $filters["b_gare.stato"] = "50"; break; // titolo": "Inviato esito"
case "99": $filters["b_gare.stato"] = "90"; break; // titolo": "Annullato"
case "98": $filters["b_gare.stato"] = "95"; break; // titolo": "Deserto"
case "100": $filters["b_gare.stato"] = "99"; break; // titolo": "Non aggiudicato"
case "101": $filters["b_gare.stato"] = "100"; break; // titolo": "Completo"
}
}
if (!empty($params->codice)) {
$filters["b_gare.codice"] = $params->codice;
}
if (!empty($params->codice)) {
$filters["b_gare.codice_ente"] = $params->codice_ente;
}
if (!empty($params->cig)) {
$filters["b_gare_lotti.cig"] = $params->cig;
}
if (!empty($params->cup)) {
$filters["b_gare_lotti.cup"] = $params->cup;
}
if (!empty($params->data->typeDate)) {
$dataInizio = $params->data->startDate ?? null;
$dataFine = $params->data->endDate ?? null;
if (!empty($dataInizio) || !empty($dataFine)) {
$filtriData = ["data_pubblicazione","data_accesso","data_scadenza","data_apertura"];
if (in_array($params->data->typeDate,$filtriData) !== false) {
$indexFiltroData = $params->data->typeDate;
}
}
}
$tmp = publicGara::getList($_SESSION["ente"]->codice,$filters,[],0,-1);
$regexData = '/([0-9]{2}\/[0-9]{2}\/[0-9]{4})/m';
if (!empty($tmp)) {
foreach($tmp AS $rec) {
$continua = true;
$obj = publicGara::init($rec["codice"]);
$extraInfo = $obj->getExtraInfo();
$insert = [];
$gara = [];
$allegati = [];
$rounds = $obj->getRounds();
$gara["data_pubblicazione"] = "";
if (!empty($rounds)) {
foreach($rounds AS $round) {
$tmp = filesManager::listFiles($round["codice"],"gare-public");
$allegati = array_merge($allegati,$tmp);
if (empty($gara["data_pubblicazione"]) && !empty($round["pubblicazione"])) {
$gara["data_pubblicazione"] = $round["pubblicazione"];
}
if (!empty($round["chiarimenti"])) {
$gara["data_accesso"] = $round["chiarimenti"];
}
if (!empty($round["scadenza"])) {
$gara["data_scadenza"] = $round["scadenza"];
}
if (!empty($round["apertura"])) {
$gara["data_apertura"] = $round["apertura"];
}
}
}
if (!empty($indexFiltroData)) {
$riferimento = strtotime($gara[$indexFiltroData]);
if (!empty($dataInizio)) {
$time = strtotime($dataInizio);
if ($time > $riferimento) {
$continua = false;
}
}
if (!empty($dataFine)) {
$time = strtotime($dataFine);
if ($time < $riferimento) {
$continua = false;
}
}
}
if ($continua) {
$gara["codice"] = $rec["codice"];
$gara["codice_ente"] = $rec["codice_ente"];
$gara["codice_gestore"] = $_SESSION["ente"]->codice;
$gara["id"] = $rec["id"];
switch($rec["stato"]) {
case "20": $gara["stato"] = "3"; break; // titolo": "Pubblicato"
case "21": $gara["stato"] = "3"; break; // titolo": "Scaduto"
case "25": $gara["stato"] = "3"; break; // titolo": "In valutazione"
case "30": $gara["stato"] = "4"; break; // titolo": "Proposta di aggiudicazione"
case "31": $gara["stato"] = "5"; break; // titolo": "Verifica anomalie"
case "35": $gara["stato"] = "7"; break; // titolo": "Aggiudicazione definitiva"
case "50": $gara["stato"] = "8"; break; // titolo": "Inviato esito"
case "80": $gara["stato"] = "3"; break; // titolo": "Sospesa"
case "90": $gara["stato"] = "99"; break; // titolo": "Annullato"
case "95": $gara["stato"] = "98"; break; // titolo": "Deserto"
case "99": $gara["stato"] = "100"; break; // titolo": "Non aggiudicato"
case "100": $gara["stato"] = "101"; break; // titolo": "Completo"
}
$gara["numero_atto_indizione"] = $extraInfo["gara"]["provvedimentoIndizione"];
$gara["data_atto_indizione"] = (!empty($extraInfo["gara"]["dataProvvedimentoIndizione"])) ? date2mysql($extraInfo["gara"]["dataProvvedimentoIndizione"]) : null;
$gara["estremi_progetto"] = $extraInfo["gara"]["estremiProgetto"];
$gara["data_validazione"] = date2mysql($extraInfo["gara"]["dataApprovazioneProgetto"]);
$gara["validatore"] = $extraInfo["gara"]["soggettoApprovatore"];
$gara["rup"] = "";
$incaricati = $obj->getManagerIncarichi()->getIncaricati();
if (!empty($incaricati)) {
foreach($incaricati AS $incaricato) {
if ($incaricato["ruolo"] == 14) {
$gara["rup"] = $incaricato["extraInfo"]["cognome"]. " " . $incaricato["extraInfo"]["nome"];
break;
}
}
}
$gara["struttura_proponente"] = $extraInfo["gara"]["strutturaProponente"];
$gara["responsabile_struttura"] = $extraInfo["gara"]["responsabileStruttura"];
$gara["oggetto"] = $rec["oggetto"];
$gara["descrizione"] = "";
$gara["somme_disponibili"] = $extraInfo["gara"]["sommeAmministrazione"];
$gara["prezzoBase"] = $rec["prezzoRiferimento"];
$gara["nuts"] = $extraInfo["gara"]["nuts"];
$gara["flag_gestione_autonoma"] = "";
$gara["url"] = $_SESSION["config"]["link_sito"] . "/gare/dettaglio.php?codice={$gara["codice"]}";
switch($rec["tipologia"]) {
case "L": $gara["tipologia"] = "Lavori"; break;
case "S": $gara["tipologia"] = "Servizi"; break;
case "F": $gara["tipologia"] = "Forniture"; break;
case "ST": $gara["tipologia"] = "Servzi Tecnici"; break;
case "LE": $gara["tipologia"] = "Lavori e progettazione esecutiva"; break;
case "LDE": $gara["tipologia"] = "Lavori e progettazione definitiva ed esecutiva"; break;
}
switch($rec["procedura"]) {
case "aperta": $gara["procedura"] = "Aperta"; break; // Aperta art. 60 del D.Lgs n. 50/2016
case "negoziata": $gara["procedura"] = "Negoziata"; break; // Negoziata art. 36 del D.Lgs n. 50/2016
case "ristretta": $gara["procedura"] = "Ristretta"; break; // Ristretta art. 61 del D.Lgs n. 50/2016
case "sda": $gara["procedura"] = "Sistema dinamico di acquisizione"; break; // Sistema dinamico di acquisizione Nuovo Codice degli Appalti
case "dialogo": $gara["procedura"] = "Dialogo competitivo"; break; // Dialogo competitivo art. 64 del D.Lgs n. 50/2016
case "aq": $gara["procedura"] = "Accordo Quadro"; break; // Accordo Quadro Nuovo Codice degli Appalti
case "affidamento": $gara["procedura"] = "Affidamento Diretto"; break; // Affidamento Diretto art.
}
$gara["modalita"] = ($rec["modalita"] == "telematica") ? "Telematica" : "Gare extra-piattaforma";
$managerCommissione = $obj->getManagerCommissione("seggio");
$seggio = $managerCommissione->getInfo();
$gara["numero_atto_seggio"] = $seggio["numero_atto"];
$gara["data_atto_seggio"] = $seggio["data_atto"];
$managerCommissione = $obj->getManagerCommissione("commissione");
$commissione = $managerCommissione->getInfo();
$gara["numero_atto_commissione"] = $commissione["numero_atto"];
$gara["data_atto_commissione"] = $commissione["data_atto"];
$gara["data_annullamento"] = null;
preg_match_all($regexData, $extraInfo["gara"]["estremi_annullamento"] ?? "", $matchesAnnullamento, PREG_SET_ORDER, 0);
if (!empty($matchesAnnullamento[0][0])) {
$data = date2mysql($matchesAnnullamento[0][0]);
if (!empty($data)) {
$gara["data_annullamento"] = $data;
}
}
$insert["gara"] = $gara;
$lotti = $obj->getLotti();
if (!empty($lotti)) {
$insert["lotti"] = [];
foreach($lotti AS $tmpLotto) {
$obj->setLotto($tmpLotto["codice"]);
$extraInfoLotto = json_decode($tmpLotto["extraInfo"],true);
$lotto = [];
$lotto["codice"] = $tmpLotto["codice"];
$lotto["cig"] = $tmpLotto["cig"];
$lotto["oggetto"] = $tmpLotto["oggetto"];
$lotto["descrizione"] = $tmpLotto["descrizione"];
$lotto["cpv"] = $tmpLotto["cpv"];
$lotto["cup"] = $tmpLotto["cup"];
$lotto["importo_base"] = $tmpLotto["importoBase"];
$lotto["importo_oneri_ribasso"] = 0;
$lotto["importo_oneri_no_ribasso"] = $tmpLotto["oneriNoRibasso"];
$lotto["importo_personale"] = $tmpLotto["importoManodopera"];
$lotto["importoAggiudicazione"] = $tmpLotto["importoAggiudicazione"];
$lotto["numero_atto_esito"] = (!empty($extraInfoLotto["estremi_definitiva"])) ? $extraInfoLotto["estremi_definitiva"] : null;
$lotto["data_atto_esito"] = null;
preg_match_all($regexData, $lotto["numero_atto_esito"], $matches, PREG_SET_ORDER, 0);
if (!empty($matches[0][0])) {
$data = date2mysql($matches[0][0]);
if (!empty($data)) {
$lotto["data_atto_esito"] = $data;
}
}
if ($obj->pubblicaPartecipanti()) {
$partecipanti = $obj->getPartecipanti();
if (!empty($partecipanti)) {
$lotto["partecipanti"] = [];
foreach($partecipanti AS $tmpPartecipante) {
$partecipante = [];
$infoOe = null;
$legale = null;
$operativa = null;
if (!empty($tmpPartecipante["codice_operatore"])) {
$infoOe = oeManager::getOE($tmpPartecipante["codice_operatore"]);
$idForm = FormManager::getInfoFromID("info-oe",$tmpPartecipante["codice_operatore"]);
$form = new FormManager;
$form->init($idForm["codice"],"oe",$infoOe["codice"]);
$values = $form->getValues();
if (!empty($values)) {
foreach($values AS $group => $inputs) {
foreach($inputs AS $key => $value) {
if ($key == "3") {
$legale = json_decode($value["value"],true);
} else if ($key == "6" && empty($operativa)) {
$operativa = json_decode($value["value"],true);
}
}
}
}
}
$partecipante["codice"] = $tmpPartecipante["codice"];
if (!empty($infoOe)) {
$partecipante["codice_fiscale"] = $infoOe["codice_fiscale_impresa"];
$partecipante["partita_iva"] = $infoOe["partita_iva"];
} else {
$partecipante["partita_iva"] = $tmpPartecipante["codice_fiscale"];
}
$partecipante["codice_operatore"] = $tmpPartecipante["codice_operatore"];
$partecipante["ragione_sociale"] = $tmpPartecipante["ragione_sociale"];
$partecipante["pec"] = $infoOe["pec"] ?? "";
$partecipante["email"] = $infoOe["pec"] ?? "";
$partecipante["primo"] = $tmpPartecipante["aggiudicatario"];
$partecipante["anomalia"] = $tmpPartecipante["anomalia"];
$partecipante["anomalia_facoltativa"] = $tmpPartecipante["a_facoltativa"];
$partecipante["verifica"] = $tmpPartecipante["a_verificata"];
$partecipante["escluso"] = $tmpPartecipante["escluso"];
$partecipante["ammesso"] = ($tmpPartecipante["escluso"] == "N") ? "S" : "N";
$partecipante["motivazione"] = $tmpPartecipante["motivazione"];
$partecipante["motivazione_anomalia"] = $tmpPartecipante["motivazione_anomalia"];
$raggruppamento = $obj->getRaggruppamento($tmpPartecipante["codice"]);
if (!empty($raggruppamento)) {
$partecipante["tipo"] = "04-CAPOGRUPPO";
$partecipante["raggruppamento"] = [];
foreach($raggruppamento AS $membro) {
$partecipante["raggruppamento"][] = [
"codice" => $membro["codice"],
"partita_iva" => ($membro["stato"] == "IT") ? $membro["codice_fiscale_impresa"] : "",
"ragione_sociale" => ($membro["stato"] == "IT") ? $membro["ragione_sociale"] : "",
"identificativoEstero" => ($membro["stato"] != "IT") ? $membro["codice_fiscale_impresa"] : "",
"pec" => "",
"tipo" => $membro["ruolo"]
];
}
} else {
$partecipante["tipo"] = "";
}
$partecipante["indirizzo_legale"] = $legale["indirizzo"] ?? "";
$partecipante["citta_legale"] = $legale["citta"] ?? "";
$partecipante["provincia_legale"] = $legale["provincia"] ?? "";
$partecipante["regione_legale"] = $legale["regione"] ?? "";
$partecipante["stato_legale"] = $legale["stato"] ?? "";
$partecipante["indirizzo_operativa"] = $operativa["indirizzo"] ?? "";
$partecipante["citta_operativa"] = $operativa["citta"] ?? "";
$partecipante["provincia_operativa"] = $operativa["provincia"] ?? "";
$partecipante["regione_operativa"] = $operativa["regione"] ?? "";
$partecipante["stato_operativa"] = $operativa["stato"] ?? "";
$lotto["partecipanti"][] = $partecipante;
}
}
$invitati = $obj->getInvitati();
if (!empty($invitati)) {
$lotto["invitati"] = [];
foreach($invitati AS $invitato) {
$infoInvitato = oeManager::getOE($invitato["codice_operatore"]);
$lotto["invitati"][] = [
"codice_fiscale" => $infoInvitato["codice_fiscale_impresa"],
"partita_iva" => $infoInvitato["partita_iva"],
"ragione_sociale" => $infoInvitato["ragione_sociale"],
"pec" => $infoInvitato["pec"],
"codice_operatore" => $infoInvitato["codice"]
];
}
}
$invitati = $obj->getInvitatiManuali();
if (!empty($invitati)) {
if (!isset($lotto["invitati"])) {
$lotto["invitati"] = [];
}
foreach($invitati AS $invitato) {
$lotto["invitati"][] = [
"partita_iva" => $invitato["codice_fiscale_operatore"],
"ragione_sociale" => $invitato["denominazione"],
"pec" => $invitato["pec"],
"codice_operatore" => ""
];
}
}
}
$insert["lotti"][] = $lotto;
}
unset($obj->lotto);
}
$cpv = $obj->getCategorieMerceologiche();
if (!empty($cpv)) {
$insert["cpv"] = cpvManager::getInfo($cpv);
}
if (!empty($allegati)) {
$insert["allegati"] = [];
foreach($allegati AS $allegato) {
$insert["allegati"][] = [
"codice" => $allegato["codice"],
"sezione" => "gare-public",
"nome_file" => $allegato["name"],
"titolo" => $allegato["titolo"],
"url" => $_SESSION["config"]["link_sito"] . filesManager::getAttachURL($allegato,$allegato["sourceID"],"gare-public",0),
"timestamp" => $allegato["timestamp"]
];
}
}
$json[] = $insert;
}
}
}
return json_encode($json,JSON_HEX_TAG | JSON_UNESCAPED_SLASHES);
}
return json_encode(["error"=>"Errore richiesta"]);
}
function getAlbi($params) {
if (validateRequest($params)) {
$json = [];
$filters = [];
if (!empty($params->codice)) {
$filters["b_bandi_albo.codice"] = $params->codice;
}
$albi = publicAlboFornitori::getList($filters,[],0,-1);
if (!empty($albi)) {
foreach($albi AS $tmpAlbo) {
$obj = publicAlboFornitori::init($tmpAlbo["codice"]);
if($obj) {
$insert = [];
$bando = [];
$bando["codice"] = $tmpAlbo["codice"];
$bando["codice_ente"] = $tmpAlbo["codice_ente"];
$bando["codice_gestore"] = $_SESSION["ente"]->codice;
$bando["id"] = $tmpAlbo["id"];
$bando["stato"] = 3;
$bando["tipologia"] = $tmpAlbo["tipologia"];
$bando["rup"] = "";
$bando["oggetto"] = $tmpAlbo["oggetto"];
$bando["data_pubblicazione"] = $tmpAlbo["pubblicazione"];
$bando["data_scadenza"] = $tmpAlbo["scadenza"];
$bando["data_chiarimenti"] = $tmpAlbo["chiarimenti"];
$incaricati = $obj->getManagerIncarichi()->getIncaricati();
if (!empty($incaricati)) {
foreach($incaricati AS $incaricato) {
if ($incaricato["ruolo"] == 14) {
$bando["rup"] = $incaricato["extraInfo"]["cognome"]. " " . $incaricato["extraInfo"]["nome"];
break;
}
}
}
$insert["bando"] = $bando;
$cpv = $obj->getCategorieMerceologiche();
if (!empty($cpv)) {
$insert["cpv"] = cpvManager::getInfo($cpv);
}
$allegati = filesManager::listFiles($tmpAlbo["codice"],"albo_fornitori-public");
if (!empty($allegati)) {
$insert["allegati"] = [];
foreach($allegati AS $allegato) {
$insert["allegati"][] = [
"codice" => $allegato["codice"],
"sezione" => "albo_fornitori-public",
"nome_file" => $allegato["name"],
"titolo" => $allegato["titolo"],
"url" => $_SESSION["config"]["link_sito"] . filesManager::getAttachURL($allegato,$tmpAlbo["codice"],"albo_fornitori-public",0),
"timestamp" => $allegato["timestamp"]
];
}
}
$json[] = $insert;
}
}
}
return json_encode($json,JSON_HEX_TAG | JSON_UNESCAPED_SLASHES);
}
return json_encode(["error"=>"Errore richiesta"]);
}
$base = file_get_contents("base.wsdl");
$base = str_replace("https://www.stazioneappalti.it",$_SESSION["config"]["link_sito"],$base);
$base = 'data://text/plain;base64,'.base64_encode($base);
$server = new SoapServer($base,array('cache_wsdl'=>WSDL_CACHE_NONE));
$server->addFunction("getGare");
$server->addFunction("getAlbi");
$server->handle();
}
?>