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.
 
 
 
 
 

384 righe
21 KiB

<?
if (isset($this) && is_a($this,"anac")) {
$lotto = $this->getLotti($codice_lotto)[0] ?? NULL;
if (!empty($lotto["codice"]) && !empty($lotto["cig"])) {
$lotto["dati"] = json_decode(($lotto["dati"]),true);
$datiSimog = $this->getDati();
$simogMethod = "loaderAppalto";
if ($operation == "get") {
$schede = [];
$appaltoType = anac::getAppaloType($lotto);
if (!empty($appaltoType)) {
$tmp = $this->getSchede($lotto["codice"]);
$tipologie = $this->listSchede($lotto["codice"]);
$idSchedaAppalto = "appalto-" . strtolower($appaltoType);
if (!empty($tmp)) {
foreach($tmp AS $scheda) {
if ($scheda["stato"] === "1") {
if (!isset($schede[$scheda["tipologia"]])) { $schede[$scheda["tipologia"]] = []; }
$schede[$scheda["tipologia"]][] = $scheda;
}
}
}
if (!empty($schede)) {
$datiComuni = $this->getSchede($lotto["codice"],"comuni")[0] ?? "";
if (!empty($datiComuni) && ($datiComuni["stato"] === "1" || $datiComuni["stato"] === "3" || $datiComuni["stato"] === "4")) {
$schedeEstratte = array_keys($schede);
foreach($schedeEstratte AS $idScheda) {
if (isset($tipologie[$idScheda]["derived"])) {
$idPadre = $tipologie[$idScheda]["derived"];
if ($idPadre == "#APPALTOTYPE#") { $idPadre = $idSchedaAppalto; }
if (empty($schede[$idPadre])) {
$schedaPadre = $this->getSchede($lotto["codice"],$idPadre)[0] ?? false;
if (!empty($schedaPadre)) {
if ($schedaPadre >= 1) {
$schede[$idPadre] = [$schedaPadre];
} else {
unset($schede[$idScheda]);
}
}
}
}
}
$return = [];
$return["method"] = $simogMethod;
$return["data"] = [];
$data = ["Schede"=>[]];
$cui = $this->getLastCUI($lotto["codice"],true);
$fields = $this->getFieldsScheda("comuni");
$array = [];
foreach($fields AS $idCampo => $info) {
if ($info["insert"]) {
if(isset($datiComuni["json"][$idCampo])) $array[$idCampo] = $datiComuni["json"][$idCampo];
}
}
$beneficiario = Ente::getInfoFromID($this->info["codice_ente"])[0];
$gestore = Ente::getInfoFromID($this->info["codice_gestore"])[0];
$tipologieBeneficiario = Ente::tipologieEnte("codice",$beneficiario["tipologia_ente"])[0] ?? false;
$tipologieGestore = Ente::tipologieEnte("codice",$gestore["tipologia_ente"])[0] ?? false;
$array["CIG"] = $lotto["cig"];
$array["TIPO_CONTRATTO"] = $lotto["dati"]["tipo_contratto"];
$array["FLAG_ENTE_SPECIALE"] = ($tipologieBeneficiario["speciale"] == "S") ? "S" : "O";
$array["ID_CATEG_SA"] = $tipologieBeneficiario["simog"];
$array["CF_AMM"] = $beneficiario["cf"];
$array["DEN_AMM"] = $beneficiario["denominazione"];
$array["CF_SA"] = $beneficiario["cf"];
$array["DEN_SA"] = $beneficiario["denominazione"];
$array["CODICE_CC"] = $beneficiario["cf"];
$array["DENOM_CC"] = $beneficiario["denominazione"];
$array["FLAG_SA_AGENTE"] = (!empty($datiComuni["cf_amm_agente_gara"])) ? "S" : "N";
$array["FLAG_ACC_QUADRO"] = (!empty($datiComuni["cig_acc_quadro"])) ? "S" : "N";
$array["DURATA_ACCQUADRO_CONVENZIONE"] = (!empty($datiComuni["durata_accquadro_convenzione_gara"])) ? $datiComuni["durata_accquadro_convenzione_gara"] : "";
$array["MODO_REALIZZAZIONE"] = $datiSimog["modo_realizzazione"] ?? "";
$array["FLAG_ESCLUSO"] = $lotto["dati"]["flag_escluso"];
$array["ID_ESCLUSIONE"] = $lotto["dati"]["id_esclusione"];
$array["ID_SCHEDA_LOCALE"] = $datiComuni["id_locale"];
$data["Schede"]["DatiComuni"] = $array;
$pubblicazione = [];
if (!empty($datiSimog["DATA_GUCE"])) { $pubblicazione["DATA_GUCE"] = $datiSimog["DATA_GUCE"]; }
if (!empty($datiSimog["DATA_GURI"])) { $pubblicazione["DATA_GURI"] = $datiSimog["DATA_GURI"]; }
if (!empty($datiSimog["DATA_ALBO"])) { $pubblicazione["DATA_ALBO"] = $datiSimog["DATA_ALBO"]; }
if (!empty($datiSimog["DATA_BORE"])) { $pubblicazione["DATA_BORE"] = $datiSimog["DATA_BORE"]; }
if (!empty($datiSimog["QUOTIDIANI_NAZ"])) { $pubblicazione["QUOTIDIANI_NAZ"] = $datiSimog["QUOTIDIANI_NAZ"]; }
if (!empty($datiSimog["QUOTIDIANI_REG"])) { $pubblicazione["QUOTIDIANI_REG"] = $datiSimog["QUOTIDIANI_REG"]; }
if (!empty($datiSimog["PERIODICI"])) { $pubblicazione["PERIODICI"] = $datiSimog["PERIODICI"]; }
$pubblicazione["PROFILO_COMMITTENTE"] = "N";
if (!empty($datiSimog["LINK_SITO"])) { $pubblicazione["PROFILO_COMMITTENTE"] = "S"; }
$pubblicazione["SITO_MINISTERO_INF_TRASP"] = "N";
if (!empty($datiSimog["SITO_MINISTERO_INF_TRASP"])) { $pubblicazione["SITO_MINISTERO_INF_TRASP"] = $datiSimog["SITO_MINISTERO_INF_TRASP"]; }
$pubblicazione["SITO_OSSERVATORIO_CP"] = "N";
if (!empty($datiSimog["SITO_OSSERVATORIO_CP"])) { $pubblicazione["SITO_OSSERVATORIO_CP"] = $datiSimog["SITO_OSSERVATORIO_CP"]; }
if (!empty($anac->info["codice"])) { $pubblicazione["ID_SCHEDA_LOCALE"] = $anac->info["codice"]; }
if (!empty($datiSimog["NUMERO_GUCE"])) { $pubblicazione["NUMERO_GUCE"] = $datiSimog["NUMERO_GUCE"]; }
if (!empty($datiSimog["NUMERO_GURI"])) { $pubblicazione["NUMERO_GURI"] = $datiSimog["NUMERO_GURI"]; }
if (!empty($datiSimog["NUMERO_BORE"])) { $pubblicazione["NUMERO_BORE"] = $datiSimog["NUMERO_BORE"]; }
if (!empty($datiSimog["LINK_SITO"])) { $pubblicazione["LINK_SITO"] = $datiSimog["LINK_SITO"]; }
if (!empty($datiSimog["FLAG_BENICULT"])) { $pubblicazione["FLAG_BENICULT"] = $datiSimog["FLAG_BENICULT"]; }
if (!empty($datiSimog["FLAG_SOSPESO"])) { $pubblicazione["FLAG_SOSPESO"] = $datiSimog["FLAG_SOSPESO"]; }
$pubblicazione = convertDate_SIMOG($pubblicazione);
$data["Schede"]["Pubblicazione"] = $pubblicazione;
$data["Schede"]["SchedaCompleta"] = ["CUI"=>(!empty($cui)) ? $cui : ""];
$listaSchedeComplete = [];
$listaSchedeComplete["#APPALTOTYPE#"] = $idSchedaAppalto;
$listaSchedeComplete["DatiInizio"] = "inizio";
$listaSchedeComplete["DatiStipula"] = "stipula";
$listaSchedeComplete["DatiAvanzamenti"] = "avanzamenti";
$listaSchedeComplete["DatiConclusione"] = "conclusione";
$listaSchedeComplete["DatiCollaudo"] = "collaudo";
$listaSchedeComplete["DatiRitardi"] = "ritardi";
$listaSchedeComplete["DatiAccordi"] = "accordi";
$listaSchedeComplete["DatiSospensioni"] = "sospensione";
$listaSchedeComplete["DatiVarianti"] = "varianti";
$listaSchedeComplete["DatiSubappalti"] = "subappalti";
$correlate = [];
$correlate["#APPALTOTYPE#"]["requisiti"] = "Requisiti";
$correlate["#APPALTOTYPE#"]["finanziamenti"] = "Finanziamenti";
$correlate["#APPALTOTYPE#"]["ausiliarie"] = "Ausiliarie";
$correlate["#APPALTOTYPE#"]["aggiudicatari"] = "Aggiudicatari";
$correlate["#APPALTOTYPE#"]["responsabili"] = "Incaricati";
$correlate["DatiInizio"]["pubblicita_esito"] = "PubblicazioneEsito";
$correlate["DatiInizio"]["responsabili"] = "Incaricati";
$correlate["DatiStipula"]["pubblicita_esito_adesione"] = "PubblicazioneEsito";
$correlate["DatiCollaudo"]["responsabili"] = "Incaricati";
foreach($listaSchedeComplete AS $idXML => $idSchedaDB) {
$appalto = false;
if ($idXML == "#APPALTOTYPE#") {
$appalto = true;
$idXML = $appaltoType;
}
if (!empty($schede[$idSchedaDB])) {
foreach($schede[$idSchedaDB] AS $scheda) {
$tipologia = $tipologie[$idSchedaDB];
$xml = $this->setScheda($idSchedaDB,$scheda["json"]);
if (!empty($xml)) {
if ($idSchedaDB != "varianti") {
$xml["ID_SCHEDA_LOCALE"] = $scheda["id_locale"];
} else {
$xml["Variante"]["ID_SCHEDA_LOCALE"] = $scheda["id_locale"];
}
if (!empty($tipologia["XMLelement"]) && !$tipologia["multiple"]) {
$xml = [$tipologia["XMLelement"]=>$xml];
if (!empty($scheda["response_id"])) { $xml["ID_SCHEDA_SIMOG"] = $scheda["response_id"]; }
}
if ($appalto) {
if ($lotto["dati"]["tipo_contratto"] == "L") {
$xml["TipiAppaltoLav"]["ID_APPALTO"] = $lotto["dati"]["tipoappalto"];
} else if ($lotto["dati"]["tipo_contratto"] == "F") {
$xml["TipiAppaltoForn"]["ID_APPALTO"] = $lotto["dati"]["tipoappalto"];
}
$xml["Appalto"]["FLAG_CUP"] = (empty($lotto["cup"])) ? "N" : "S";
$xml["Appalto"]["CUP"] = (empty($lotto["cup"])) ? "" : $lotto["cup"];
if (!empty($lotto["dati"]["condizioni"]) && ($appaltoType == 'Aggiudicazione')) {
foreach($lotto["dati"]["condizioni"] AS $condizione) {
$xml["Condizioni"][] = ["ID_CONDIZIONE"=>$condizione];
}
}
if ($appaltoType != 'Adesione') {
$xml["CUPLOTTO"] = array(
"CODICICUP"=>array(array( "CUP"=>(!empty($lotto["cup"])) ? $lotto["cup"] : "", "VALIDO"=>"S", "OK_UTENTE"=>"S" ))
);
}
}
$sub = $correlate[($appalto) ? "#APPALTOTYPE#" : $idXML] ?? false;
if (!empty($sub)) {
foreach($sub AS $idCorrelata => $idSchedaCorrelata) {
$subSchede = $schede[$idCorrelata] ?? $this->getSchede($lotto["codice"],$idCorrelata);
if (!empty($subSchede)) {
foreach($subSchede AS $subScheda) {
if ($subScheda["stato"] >= 1 && $subScheda["stato"] <= 97) {
$subSchedaXML = $this->setScheda($idCorrelata,$subScheda["json"]);
if (!empty($subSchedaXML)) {
$insert = true;
if ($idCorrelata == "responsabili") {
$insert = false;
$subSchedaXML["SEZIONE"] = $this->sezioneFromRuolo($subSchedaXML["ID_RUOLO"]);
if (!empty($subSchedaXML["SEZIONE"])) {
if ($appalto) {
if ($subSchedaXML["SEZIONE"] == "PA" || $subSchedaXML["SEZIONE"] == "RA") {
if ($subSchedaXML["SEZIONE"] == "RA") { $subSchedaXML["SEZIONE"] == "R" . substr($idXML,0,1); }
$subSchedaXML["ID_SCHEDA_LOCALE"] = $subScheda["id_locale"];
$insert = true;
}
}
}
}
if ($insert) {
$subSchedaXML["ID_SCHEDA_LOCALE"] = $subScheda["id_locale"];
if ($tipologie[$idCorrelata]["multiple"]) {
$xml[$idSchedaCorrelata][] = $subSchedaXML;
} else {
$xml[$idSchedaCorrelata] = $subSchedaXML;
}
}
}
}
}
}
}
}
if ($tipologia["multiple"]) {
if (!empty($tipologia["XMLelement"])) {
$data["Schede"]["SchedaCompleta"][$idXML][$tipologia["XMLelement"]][] = $xml;
} else {
$data["Schede"]["SchedaCompleta"][$idXML][] = $xml;
}
} else {
$data["Schede"]["SchedaCompleta"][$idXML] = $xml;
}
}
}
}
}
$data["InfoTrasferimento"] = ["DATA_CREAZIONE_FLUSSO"=>date("Y-m-d H:i:s"),"NUM_SCHEDE"=>1];
$data = convertDate_DbDateSimog($data);
$data["Schede"]["DatiComuni"] = removeEmpty($data["Schede"]["DatiComuni"]);
$data["Schede"]["Pubblicazione"] = removeEmpty($data["Schede"]["Pubblicazione"]);
foreach($data["Schede"]["SchedaCompleta"] AS $key => $array) {
if ($key !== "CUI") {
$data["Schede"]["SchedaCompleta"][$key] = removeEmpty($array,["DATA_IST_RECESSO","CUP"]);
}
}
$return["data"] = ["trasferimentoDati" => $data];
} else {
$errors = __("Dati comuni mancanti");
}
} else {
$errors = __("Nessuna scheda da inviare");
}
} else {
$errors = __("Impossibile riconoscere il tipo di appalto");
}
} else if ($operation == "put" && !empty($response)) {
$errori = 0;
$warning = 0;
$success = 0;
$anomalie = [];
$updateInfo = [];
$checkCollegate = $this->db->prepare("SELECT tipologia FROM b_simog_schede WHERE id_locale = :id_locale AND codice NOT IN (SELECT codice_padre FROM b_simog_schede)");
$updateScheda = $this->db->prepare("UPDATE b_simog_schede SET stato = :stato, response_id = :id_simog, response = :response WHERE id_locale = :id_locale AND codice NOT IN (SELECT codice_padre FROM b_simog_schede)");
foreach($response AS $resp) {
if (!empty($resp->return->feedBack)) {
$feedback = $resp->return->feedBack;
if (!empty($feedback->InfoFlusso)) {
$errori += $feedback->InfoFlusso->NUM_ERRORE;
$warning += $feedback->InfoFlusso->NUM_WARNING;
$success += $feedback->InfoFlusso->NUM_CARICATE;
}
if (!empty($feedback->AnomalieSchede)) {
if (!is_array($feedback->AnomalieSchede)) { $feedback->AnomalieSchede = [$feedback->AnomalieSchede]; }
$idSchedeFeedback = [];
$anomalieFeedback = [];
foreach($feedback->AnomalieSchede AS $AnomalieSchede) {
if (!empty($AnomalieSchede->CUI)) {
$cui = $this->getLastCUI($lotto["codice"]);
if ($cui != $AnomalieSchede->CUI) { $this->saveCUI($lotto["codice"],$AnomalieSchede->CUI); }
}
if (!empty($AnomalieSchede->IdScheda)) {
if (!is_array($AnomalieSchede->IdScheda)) {
$idSchedeFeedback = [$AnomalieSchede->IdScheda];
} else {
$idSchedeFeedback = $AnomalieSchede->IdScheda;
}
}
foreach($idSchedeFeedback as $idScheda) {
if (!empty($idScheda->ID_SCHEDA_LOCALE)) {
if (!isset($updateInfo[$idScheda->ID_SCHEDA_LOCALE])) { $updateInfo[$idScheda->ID_SCHEDA_LOCALE] = ["stato"=>2,"msg"=>[],"id_simog"=>0]; }
$stato = 3;
if (!empty($idScheda->ID_SCHEDA_SIMOG)) { $updateInfo[$idScheda->ID_SCHEDA_LOCALE]["id_simog"] = $idScheda->ID_SCHEDA_SIMOG; }
if ($updateInfo[$idScheda->ID_SCHEDA_LOCALE]["stato"] < $stato) { $updateInfo[$idScheda->ID_SCHEDA_LOCALE]["stato"] = $stato; }
}
}
if (!empty($AnomalieSchede->Anomalia)) {
if (!is_array($AnomalieSchede->Anomalia)) {
$anomalieFeedback = [$AnomalieSchede->Anomalia];
} else {
$anomalieFeedback = $AnomalieSchede->Anomalia;
}
}
}
foreach($anomalieFeedback as $anomalia) {
if (!empty($anomalia->ID_SCHEDA_LOCALE)) {
if (!isset($updateInfo[$anomalia->ID_SCHEDA_LOCALE])) { $updateInfo[$anomalia->ID_SCHEDA_LOCALE] = ["stato"=>2,"msg"=>[],"id_simog"=>0]; }
if ($anomalia->LIVELLO == "ERRORE") {
$stato = 5;
} else {
$stato = 4;
}
if (!empty($anomalia->ID_SCHEDA_SIMOG)) { $updateInfo[$anomalia->ID_SCHEDA_LOCALE]["id_simog"] = $anomalia->ID_SCHEDA_SIMOG; }
if (!empty($anomalia->DESCRIZIONE)) { $updateInfo[$anomalia->ID_SCHEDA_LOCALE]["msg"][] = $anomalia->LIVELLO . " - " . $anomalia->DESCRIZIONE; }
if ($updateInfo[$anomalia->ID_SCHEDA_LOCALE]["stato"] < $stato) { $updateInfo[$anomalia->ID_SCHEDA_LOCALE]["stato"] = $stato; }
}
$anomalie[] = $anomalia;
}
}
}
}
if (!empty($updateInfo)) {
$tipologie = $this->listSchede($lotto["codice"]);
foreach($updateInfo AS $idLocale => $otherInfo) {
$updateScheda->bindValue(":stato",$otherInfo["stato"]);
$updateScheda->bindValue(":id_simog",$otherInfo["id_simog"]);
$updateScheda->bindValue(":response",json_encode($otherInfo["msg"]));
$updateScheda->bindValue(":id_locale",$idLocale);
$updateScheda->execute();
$checkCollegate->bindValue(":id_locale",$idLocale);
$checkCollegate->execute();
if ($checkCollegate->rowCount() > 0) {
$tipologia = $checkCollegate->fetch(PDO::FETCH_ASSOC)["tipologia"];
if (strpos($tipologia,"appalto-")!==false) { $tipologia = "#APPALTOTYPE#"; }
$updateCorrelate = $this->db->prepare("UPDATE b_simog_schede SET stato = :stato WHERE codice_lotto = :lotto AND stato > 0 AND codice NOT IN (SELECT codice_padre FROM b_simog_schede) AND tipologia = :tipo ");
$updateCorrelate->bindValue(":stato",$otherInfo["stato"]);
$updateCorrelate->bindValue(":lotto",$lotto["codice"]);
foreach($tipologie AS $idTipo => $tipo) {
if (!empty($tipo["derived"])) {
if ($tipo["derived"] == $tipologia) {
$updateCorrelate->bindValue(":tipo",$idTipo);
$updateCorrelate->execute();
}
}
}
}
}
}
?>
<div class="row">
<div class="col-12 col-lg-4">
<div class="alert alert-danger text-center p-5">
<span class="h1"><?= $errori ?></span><br>
<small><?= __("Schede con errore") ?></small>
</div>
</div>
<div class="col-12 col-lg-4">
<div class="alert alert-warning text-center p-5">
<span class="h1"><?= $warning ?></span><br>
<small><?= __("Schede con avvisi") ?></small>
</div>
</div>
<div class="col-12 col-lg-4">
<div class="alert alert-success text-center p-5">
<span class="h1"><?= $success ?></span><br>
<small><?= __("Schede caricate con successo") ?></small>
</div>
</div>
</div>
<? if (!empty($anomalie) || $warning > 0 || $success > 0) {
if (!empty($anomalie)) { ?>
<table class="table table-striped">
<? foreach($anomalie AS $anomalia) {
$class = "status-border-warning";
if ($anomalia->LIVELLO == "ERRORE") { $class = "status-border-danger"; }
?>
<tr class="<?= $class ?>">
<td><?= $anomalia->SCHEDA ?></td>
<td><?= $anomalia->LIVELLO ?></td>
<td><?= $anomalia->DESCRIZIONE ?></td>
</tr>
<? } ?>
</table>
<?
}
$return = true;
} else if (!empty($response->return->error)) {
$errors = $response->return->error;
} else {
$errors = __("Errore nella risposta");
}
} else {
$errors = __("Operazione sconosciuta");
}
} else {
$errors = __("Impossibile trovare lotto");
}
if (!empty($errors)) {
$this->updateSimogLog($simogMethod,2,$errors,$lotto["codice"]);
alertManager::printAlertBox($errors);
}
}
?>