= __("Condividi il link per consentire la compilazione del DGUE agli altri componenti del raggruppamento") ?>
= $_SESSION["config"]["link_sito"] . $editURL; ?>
= __("Per compilare il DGUE è necessario preventivamente effettuare il login alla piattaforma.") ?> = __("Sarà sempre onere del Capogruppo la trasmissione dei documenti di partecipazione di tutti i componenti") ?>
}
}
public function getObject() {
if (empty($this->object)) {
global $beRoot;
$returnObject = true;
$path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"];
if (file_exists($path)) {
include $path;
if (!empty($return)) {
$this->object = $return;
}
}
}
if (!empty($this->object)) {
return $this->object;
}
return false;
}
public function checkAdminPermission() {
global $beRoot;
$returnObject = false;
$path = $beRoot . self::moduliAbilitati()[$this->modulo]["script"];
if (file_exists($path)) {
include $path;
return $return;
}
return false;
}
public static function getTemplatePath(String $template) {
return DGUE_TEMPLATE_PATH . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR;
}
public static function getCriteriaTemplateDefinition(String $template) {
$definitions = self::getTemplatePath($template) . "definition.json";
if (file_exists($definitions)) {
return jsonToArray($definitions);
}
}
public function generateUUID() {
$criterias = $this->getRequestedCriteria();
$matches = [];
if (!empty($criterias)) {
foreach($criterias AS $criteria) {
$definitions = self::getCriteriaTemplateDefinition($criteria["template"]);
if (!empty($definitions)) {
foreach($definitions AS $group_id => $inputs) {
foreach($inputs AS $input) {
if (isset($input["id"])) {
$matches[$criteria["codice"]][$group_id][$input["id"]] = self::gen_uuid();
}
}
}
}
}
}
if (!empty($matches)) {
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_dgue_uuid";
$salva->operazione = "INSERT";
$salva->oggetto = [
"codice_elemento" => $this->elemento,
"modulo" => $this->modulo,
"uuids" => json_encode($matches)
];
$salva->save();
}
}
public function setMatchesUUID() {
$uuids = $this->db->go("SELECT uuids FROM b_dgue_uuid WHERE modulo = :modulo AND codice_elemento = :elemento ",
[
":modulo" => $this->modulo,
":elemento" => $this->elemento,
])->fetch(PDO::FETCH_COLUMN);
if (!empty($uuids)) {
$this->matches = json_decode($uuids,true);
}
}
public function getUUIDMatches(Int $criteria) {
return $this->matches[$criteria] ?? null;
}
public function saveRequest(array $codici) {
$object = $this->getObject();
$error = false;
if (!empty($codici)) {
$sql = "INSERT INTO r_dgue_request (modelVersion,codice_elemento,modulo,codice_form,utente_modifica) VALUES (:model,:codice_elemento,:modulo,:codice_form,:utente_modifica)";
$insert = $this->db->prepare($sql);
$bind[":model"] = $this->model;
$bind[":codice_elemento"] = $this->elemento;
$bind[":modulo"] = $this->modulo;
$bind[":utente_modifica"] = $_SESSION["utente"]->codice;
$insert->bindValue(":model",$this->model);
$insert->bindValue(":codice_elemento",$this->elemento);
$insert->bindValue(":codice_elemento",$this->elemento);
$insert->bindValue(":modulo",$this->modulo);
$insert->bindValue(":utente_modifica",$_SESSION["utente"]->codice);
foreach($codici AS $codice) {
$insert->bindValue(":codice_form",$codice);
$bind[":codice_form"] = $codice;
if ($insert->execute()) {
scriviLog("r_dgue_request","INSERT",strtr($sql,$bind));
} else {
$error = true;
}
}
if ($this->modelInstance->generateUUID()) {
$this->generateUUID();
}
if (!empty($object) && method_exists($object,"addDGUERequest")) {
$object->addDGUERequest();
}
} else {
if (!empty($object) && method_exists($object,"deleteDGUERequest")) {
$object->deleteDGUERequest();
}
}
if (!empty($object) && method_exists($object,"addToLog")) {
$object->addToLog("UPDATE",ucfirst("DGUE"));
}
return $error;
}
public function availableCriteria() {
$criteria = self::getCriteria($this->version);
if (!empty($this->tipologia)) {
$tmp = $criteria;
$criteria = [];
foreach($tmp AS $criterio) {
if ($criterio["attivo"] == "S") {
$insert = true;
if (!empty($criterio["tipologie"])) {
$insert = false;
$tipologie = explode(",",$criterio["tipologie"]);
if (is_array($tipologie)) {
if (in_array($this->tipologia,$tipologie) !== false) { $insert = true; }
} else if ($tipologie == $this->tipologia) {
$insert = true;
}
}
if ($insert) {
$criteria[] = $criterio;
}
}
}
}
return $criteria;
}
public function removeDGUE() {
if (isset($this->db)) {
if ($this->checkAdminPermission()) {
$this->db->go("DELETE FROM r_dgue_request WHERE codice_elemento = :codice_elemento AND modulo = :modulo ",[":codice_elemento"=>$this->elemento,":modulo"=>$this->modulo]);
$this->db->go("DELETE FROM b_dgue_uuid WHERE codice_elemento = :codice_elemento AND modulo = :modulo ",[":codice_elemento"=>$this->elemento,":modulo"=>$this->modulo]);
scriviLog("r_dgue_request","DELETE",$this->db->getSQL());
}
}
}
public function selectedCriteria() {
if (isset($this->db)) {
$ris = $this->db->go("SELECT codice_form FROM r_dgue_request WHERE codice_elemento = :codice_elemento AND modulo = :modulo ",[":codice_elemento"=>$this->elemento,":modulo"=>$this->modulo]);
if ($ris->rowCount() > 0) {
return $ris->fetchAll(PDO::FETCH_COLUMN);
}
}
return [];
}
public function setVersionFromSelected() {
$this->version = self::findVersion();
$selected = $this->selectedCriteria();
if (!empty($selected)) {
$this->version = $this->db->go("SELECT version FROM b_dgue_settings WHERE codice = :codice",[":codice"=>$selected[0]])->fetch(PDO::FETCH_COLUMN);
}
}
public function setModelFromSelected() {
$this->model = "2.1.1";
$selected = $this->db->go("SELECT modelVersion FROM r_dgue_request WHERE codice_elemento = :codice_elemento AND modulo = :modulo LIMIT 0,1",[":codice_elemento"=>$this->elemento,":modulo"=>$this->modulo]);
if (!empty($selected->rowCount())) {
$this->model = $selected->fetch(PDO::FETCH_COLUMN);
}
}
public function switchVersion(string $to) {
$error = false;
if (!empty(self::versions()[$to])) {
$selected = $this->selectedCriteria();
if (!empty($selected)) {
$selected = self::getCriteria($this->version,$selected);
$new = [];
if(!empty($selected)) {
$checkCode = $this->db->prepare("SELECT codice FROM b_dgue_settings WHERE codifica_criterio = :code AND version = :to");
$checkCode->bindValue(":to",$to);
foreach($selected AS $criteria) {
$checkCode->bindValue(":code",$criteria["codifica_criterio"]);
$checkCode->execute();
if ($checkCode->rowCount() > 0) {
$new[] = $checkCode->fetch(PDO::FETCH_COLUMN);
}
}
if (empty($new)) {
$checkCode->bindValue(":code","0.3.1");
$checkCode->execute();
if ($checkCode->rowCount() > 0) {
$new[] = $checkCode->fetch(PDO::FETCH_COLUMN);
}
}
$this->removeDGUE();
$error = $this->saveRequest($new);
}
} else {
$error = true;
}
} else {
$error = true;
}
return $error;
}
public function getRequestedCriteria() {
$criteria = [];
if (!empty($this->version)) {
$all = $this->availableCriteria();
$selected = $this->selectedCriteria();
if (!empty($selected)) {
$allSatisfied = false;
foreach($all AS $criterio) {
$insert = false;
if ($criterio["obbligatorio"] == "S") {
$insert = true;
} else {
if (in_array($criterio["codice"],$selected) !== false) { $insert = true; }
if ($insert && $criterio["livello1"] == "SELECTION") {
if ($criterio["uuid"] == "7e7db838-eeac-46d9-ab39-42927486f22d") {
$allSatisfied = true;
} else if ($allSatisfied) {
$insert = false;
}
}
}
if ($insert) { $criteria[] = $criterio; }
}
}
}
return $criteria;
}
public function getBreadcrumb($breadcrumb = [], $pannello = false, $salva = false) {
if (empty($this->inputsBreadcrumb)) {
$qs = "codice=".$this->elemento;
} else {
$qs = http_build_query($this->inputsBreadcrumb);
}
$breadcrumb["/{$this->modulo}/dettaglio.php?{$qs}"] = __("Dettagli");
if (!empty($pannello)) {
$breadcrumb["/{$this->modulo}/partecipa/partecipa.php?{$qs}"] = __("Pannello di partecipazione");
}
return $breadcrumb;
}
public function printEditor() {
if ($this->checkAdminPermission()) {
$this->admin = true;
include (__DIR__."/backend-manage.php");
}
return false;
}
public function getRequestXML() {
$criteria = $this->getRequestedCriteria();
if (!empty($criteria)) {
$dgue = $this->modelInstance->getRequestArray($criteria);
if (!empty($dgue)) {
array_walk_recursive($dgue, function(&$value) {
if (!is_array($value)) {
$value = html_entity_decode($value,ENT_COMPAT | ENT_HTML401,"UTF-8");
$value = preg_replace('#&(?=[a-z_0-9]+=)#', '&', $value);
$value = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value);
$value = utf8_encode($value);
}
});
return self::getXML($dgue);
}
}
return false;
}
public static function showDGUE($dgue=[],$criteria = [],$version = null) {
$version = $version ?? self::findVersion();
if (empty($criteria)) {
$criteria = self::getCriteria($version);
}
if (!empty($dgue)) {
$dgue = self::fixArray($dgue,true);
}
ob_start();
include __DIR__."/views/versions/{$version}/main.php";
return ob_get_clean();
}
public function showForm($dgue=[],$pannello=false) {
if (!empty($dgue)) {
$dgue = self::fixArray($dgue);
}
include __DIR__."/views/versions/{$this->version}/form.php";
}
public function fillContent($dgue) {
$preview = false;
if (!is_array($dgue) && $dgue === "preview") {
$preview = true;
$dgue = ["preview"];
}
$dgue["cac:ContractingParty"]["cac:Party"]["cac:PartyName"]["cbc:Name"] = $this->ente ?? $_SESSION["ente"]->getInfo()["denominazione"];
$dgue["cac:AdditionalDocumentReference"][1]["cac:Attachment"]["cac:ExternalReference"]["cbc:FileName"] = htmlentities($this->oggetto, ENT_QUOTES, 'UTF-8');
$dgue["cac:AdditionalDocumentReference"][1]["cac:Attachment"]["cac:ExternalReference"]["cbc:Description"] = trim(strip_tags($this->descrizione));
if (!empty($this->id_appalto)) { $dgue["cbc:ContractFolderID"]["$"] = $this->id_appalto; }
$dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyIdentification"][0]["cbc:ID"] = $_SESSION["utente"]->oe["codice_fiscale_impresa"] ?? "";
$dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyName"]["cbc:Name"] = $_SESSION["utente"]->oe["ragione_sociale"] ?? "";
if (!$preview) {
$dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:Contact"]["cbc:Name"] = $_SESSION["utente"]->getInfo()["nome"] . " " . $_SESSION["utente"]->getInfo()["cognome"];
}
$dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:Contact"]["cbc:Telephone"] = $_SESSION["utente"]->getInfo()["telefono"];
$dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:Contact"]["cbc:ElectronicMail"] = $_SESSION["utente"]->oe["pec"] ?? "";
if (empty($dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"])) {
$formInfo = FormManager::getInfoFromID("organizzazione-oe",$this->gestore);
if (!empty($formInfo)) {
$formManager = new FormManager;
$formManager->init($formInfo["codice"],"oe",$_SESSION["utente"]->oe["codice"] ?? -1);
$rappresentanti = $formManager->getValues();
if (!empty($rappresentanti)) {
$i_r = 0;
foreach($rappresentanti AS $rappresentante) {
foreach($rappresentante AS $data) {
$info = $formManager->getInputInfo($data["codice"]);
switch($info["input"]["id"]) {
case "soggetto-nome":
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cbc:FirstName"] = $data["value"];
break;
case "soggetto-cognome":
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cbc:FamilyName"] = $data["value"];
break;
case "soggetto-ruolo":
$info["input"]["opzioni"] = json_decode($info["input"]["opzioni"],true);
if (in_array("tipologieRappresentantiLegali.json",$info["input"]["opzioni"]) !== false) {
global $root;
$opzioni = jsonToArray($root."/backend/form/json/tipologieRappresentantiLegali.json");
$data["value"] = $opzioni[$data["value"]]["IT"] ?? $data["value"];
}
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["espd-cbc:NaturalPersonRoleDescription"] = $data["value"];
break;
case "soggetto-nascita":
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cbc:BirthDate"] = date2mysql($data["value"]);
break;
case "soggetto-indirizzo":
$indirizzo = json_decode($data["value"],true);
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cac:ResidenceAddress"]["cbc:StreetName"] = $indirizzo["indirizzo"];
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cac:ResidenceAddress"]["cbc:CityName"] = $indirizzo["citta"];
$dgue["espd-cac:EconomicOperatorParty"]["espd-cac:RepresentativeNaturalPerson"][$i_r]["cac:PowerOfAttorney"]["cac:AgentParty"]["cac:Person"]["cac:ResidenceAddress"]["cbc:Postbox"] = $indirizzo["cap"];
break;
}
}
$i_r++;
}
}
}
}
if (count($dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyIdentification"]) > 1) {
$i = 0;
foreach($dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyIdentification"] AS $PartyIdentification) {
if (!empty($dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyIdentification"][$i]["cbc:ID"])) { $dgue["espd-cac:EconomicOperatorParty"]["cac:Party"]["cac:PartyIdentification"][$i]["cbc:ID"] = $PartyIdentification["cbc:ID"] ?? ""; }
$i++;
}
}
return $dgue;
}
public static function retrieveResponse($array,$search) {
$requirements = DGUE::filterRequirement($array);
$return = false;
if (is_array($requirements) && count($requirements) > 0) {
foreach($requirements AS $requirement) {
if (!empty($requirement["cbc:ID"])) {
$id = $requirement["cbc:ID"];
if (!empty($id["$"])) { $id = $id["$"]; }
if ($id == $search) { $return = $requirement; }
}
}
}
return $return;
}
public static function filterRequirement($array) {
$requirements = array();
if (is_array($array)) {
foreach($array AS $chiave => $valore) {
if (is_array($valore)) {
if ($chiave == "ccv:Requirement") {
if (empty($valore["cbc:ID"])) {
$requirements = array_merge($requirements,$valore);
} else {
$requirements[] = $valore;
}
}
$requirements = array_merge($requirements,DGUE::filterRequirement($valore));
}
}
return $requirements;
}
}
public static function findValues($array,$definition) {
$values = [];
foreach($definition AS $key => $object) {
$values[$key] = array();
foreach($object AS $sub_key => $settings) {
$valore = "";
if (!empty($settings["id"]) && !empty($settings["index"])) {
$element = self::retrieveResponse($array,$settings["id"]);
if (!empty($element["ccv:Response"]) && is_array($element["ccv:Response"])) {
$response = $element["ccv:Response"];
foreach($settings["index"] AS $indice) {
if (!empty($response[$indice])) { $response = $response[$indice]; }
}
if (!empty($response) && !is_array($response)) { $valore = $response; }
}
}
$values[$key][$sub_key] = $valore;
}
}
return $values;
}
public static function printGroup($criteria,$dgue,$id,$all_satisfied = false) {
global $root;
$styles = self::getStyles();
$sub_group = "";
foreach ($criteria AS $criterio) {
if ($criterio["livello1"] == $id) {
unset($values);
$print_row = true;
$show_empty = false;
if ($criterio["livello1"] == "SELECTION" && $criterio["livello2"] != "ALL_SATISFIED" && $all_satisfied) { $print_row = false; }
$first = reset($dgue);
if ($first !== "preview") {
if (empty($dgue["ccv:Criterion"][$criterio["uuid"]])) {
$print_row = false;
} else {
if ($dgue["ccv:Criterion"][$criterio["uuid"]] === "show_empty") {
$show_empty = true;
}
}
} else {
$show_empty = true;
}
if ($print_row && !empty($criterio["template"])) {
if ($criterio["livello2"] != $sub_group) {
$sub_group = $criterio["livello2"];
if (!empty(self::translateGroup($criterio["version"])[$criterio["livello1"]][$criterio["livello2"]]["it"])) {
$sub_titolo = self::translateGroup($criterio["version"])[$criterio["livello1"]][$criterio["livello2"]]["it"];
?>
= $sub_titolo ?>
}
}
if (!empty($criterio["template"]) && file_exists($root."/dgue/templates/".$criterio["template"]."/show.php")) {
?>
">
= $criterio["nome"] ?>
= $criterio["descrizione"] ?>
$json = false;
if (file_exists($root."/dgue/templates/".$criterio["template"]."/definition.json")) {
$json = file_get_contents($root."/dgue/templates/".$criterio["template"]."/definition.json");
$json = json_decode($json,true);
if (is_array($json)) {
$values = DGUE::findValues(@$dgue["ccv:Criterion"][$criterio["uuid"]],$json);
}
}
include $root."/dgue/templates/".$criterio["template"]."/show.php";
?>
}
}
}
}
}
public function writeForm($criteria,$dgue,$id) {
global $root;
$sub_group = "";
foreach ($criteria AS $criterio) {
if ($criterio["livello1"] == $id && $criterio["attivo"] == "S") {
unset($values);
if ($criterio["livello2"] != $sub_group) {
$sub_group = $criterio["livello2"];
if (!empty(self::translateGroup($criterio["version"])[$criterio["livello1"]][$criterio["livello2"]]["it"])) {
$sub_titolo = self::translateGroup($criterio["version"])[$criterio["livello1"]][$criterio["livello2"]]["it"];
?>
= $criterio["livello2"] ?>">= $sub_titolo ?>
}
}
if (!empty($criterio["template"]) && file_exists($root."/dgue/templates/".$criterio["template"]."/form.php")) {
?>