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.
1739 righe
75 KiB
1739 righe
75 KiB
<? |
|
class oeManager { |
|
|
|
private $db; |
|
public $generalFilter; |
|
public $ratingMinimo; |
|
public $categorie; |
|
public $soa; |
|
public $servizi_tecnici; |
|
public $elenco; |
|
public $advanced; |
|
public $estesa; |
|
public $conteggio_rotazione; |
|
public $ambito_rotazione; |
|
public $includiNonQualificati; |
|
public $countInviti; |
|
public $countAggiudicato; |
|
public $operatoriSorteggio; |
|
private Array $neededChecks = []; |
|
private Array $obtainedChecks = []; |
|
|
|
/** |
|
* Alimenta i check che l'operatore economico deve ottenere tramite i filtri per il controllo dei filtri in AND |
|
* |
|
* @param String $checkID |
|
* @return void |
|
*/ |
|
private function addNeedCheck(String $checkID) { |
|
if (!in_array($checkID,$this->neededChecks)) { |
|
$this->neededChecks[] = $checkID; |
|
} |
|
} |
|
|
|
/** |
|
* Alimenta i check ottenuti dall'operatore economico a seguito del controllo tramite i filtri in AND |
|
* |
|
* @param String $checkID |
|
* @return void |
|
*/ |
|
private function addObtainedCheck(String $checkID,$oe) { |
|
if (!isset($this->obtainedChecks[$oe])) { |
|
$this->obtainedChecks[$oe] = []; |
|
} |
|
if (!in_array($checkID,$this->obtainedChecks[$oe])) { |
|
$this->obtainedChecks[$oe][] = $checkID; |
|
} |
|
} |
|
|
|
public static function getStandardForms($tipo,$codice_ente) { |
|
$forms = []; |
|
if ($tipo == "IMP" || $tipo == "ALL") { |
|
$forms[] = "attivita-imp"; |
|
$forms[] = "registri-imp"; |
|
} |
|
if ($tipo == "PRO" || $tipo == "ALL") { |
|
$forms[] = "attivita-pro"; |
|
$forms[] = "registri-professionali"; |
|
} |
|
$forms[] = "info-oe"; |
|
$forms[] = "organizzazione-oe"; |
|
$forms[] = "certificazioni"; |
|
return $forms; |
|
} |
|
public static function getIdFromPEC(string $pec) { |
|
global $pdo; |
|
$bind = [":valore"=>$pec]; |
|
$sql = "SELECT codice FROM b_operatori_economici WHERE pec = :valore "; |
|
$ris = $pdo->go($sql,$bind); |
|
return ($ris->rowCount() === 1) ? $ris->fetchColumn() : false; |
|
} |
|
public static function checkPEC($pec,$codice = 0) { |
|
global $pdo; |
|
$bind = [":valore"=>$pec]; |
|
$sql = "SELECT codice FROM b_operatori_economici WHERE pec = :valore "; |
|
if (!empty($codice)) { |
|
$bind[":codice"] = $codice; |
|
$sql .= " AND codice <> :codice"; |
|
} |
|
$ris = $pdo->go($sql,$bind); |
|
return ($ris->rowCount() === 0) ? true : false; |
|
} |
|
|
|
public static function getCpvs($requested) { |
|
global $pdo; |
|
$cpvs = $pdo->prepare("SELECT codice FROM r_cpv_operatori WHERE codice_operatore = :request"); |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
foreach($codici AS $request) { |
|
$cpvs->bindValue(":request",$request); |
|
$cpvs->execute(); |
|
if ($cpvs->rowCount() > 0) { |
|
while($cpv = $cpvs->fetch(PDO::FETCH_ASSOC)) { |
|
if (!isset($return[$request])) { $return[$request] = []; } |
|
$return[$request][] = $cpv["codice"]; |
|
} |
|
} |
|
} |
|
if (!empty($return)) { |
|
if (is_array($requested)) { |
|
return $return; |
|
} else { |
|
return $return[$requested]; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public static function tipiElenco() { |
|
return array("b_bandi_albo"=>"Elenco fornitori"); |
|
} |
|
|
|
public static function tabelleElenco() { |
|
return array("b_bandi_albo"=>"r_partecipanti_albo"); |
|
} |
|
|
|
/** |
|
* checkVerificaOE |
|
* |
|
* @param mixed (String|Array) $codici_fiscali |
|
* |
|
* @return Array |
|
*/ |
|
public function checkVerificaOE($codici_fiscali) : ?Array { |
|
|
|
global $pdo; |
|
$check = []; |
|
|
|
if(! empty($_SESSION["ente"]) && $_SESSION["ente"]->hasModulo("verifica-art-80")) { |
|
|
|
if(empty($_SESSION["articolo80"])) { |
|
$ente = $_SESSION["ente"]->getInfo(); |
|
$_SESSION["articolo80"] = Articolo80::init($ente); |
|
|
|
$stati = $_SESSION["articolo80"]->stati ?? null; |
|
} |
|
|
|
if(! empty($_SESSION["articolo80"])) { |
|
|
|
if(! is_array($codici_fiscali)) { $codici_fiscali = [$codici_fiscali]; } |
|
|
|
$params = []; |
|
$bind = []; |
|
|
|
for($i = 0; $i < count($codici_fiscali); $i++) { |
|
$params[] = ":cf_{$i}"; |
|
$bind[":cf_{$i}"] = $codici_fiscali[$i]; |
|
} |
|
|
|
$params = implode(", ", $params); |
|
$result = $pdo->go("SELECT codice_fiscale, stato FROM b_verifiche_articolo_80 WHERE codice_fiscale IN ({$params})", $bind); |
|
if($result->rowCount() > 0) { |
|
|
|
$stati = $_SESSION["articolo80"]->stati; |
|
while($stato = $result->fetch(PDO::FETCH_ASSOC)) { |
|
$check[$stato["codice_fiscale"]] = $stati[$stato["stato"]]; |
|
} |
|
|
|
} |
|
|
|
if(count($codici_fiscali) == 1) { |
|
|
|
return $check[$codici_fiscali[0]] ?? null; |
|
|
|
} |
|
|
|
return $check; |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
public static function getElenchi($codice_ente,$specificSource = null, $filterTipologia = null) { |
|
global $pdo; |
|
$sources = self::tipiElenco(); |
|
$bind = [":codice_ente"=>$codice_ente]; |
|
if (!empty($specificSource)) { |
|
if (!empty($sources[$specificSource])) { |
|
$sources = [$specificSource => $sources[$specificSource]]; |
|
} else { |
|
$sources = []; |
|
} |
|
} else { |
|
$elenchi = ["b_bandi_albo"=>[["codice"=>"0","denominazione"=>__("Qualsiasi elenco dei fornitori")]]]; |
|
} |
|
if (!empty($sources)) { |
|
foreach($sources AS $source => $label) { |
|
$whereTipologia = ""; |
|
if (!empty($filterTipologia)) { |
|
$whereTipologia = " AND {$source}.tipologia = :tipologia "; |
|
$bind[":tipologia"] = $filterTipologia; |
|
} |
|
$sql_bando = "SELECT {$source}.* FROM {$source} WHERE {$source}.stato >= 20 {$whereTipologia} ORDER BY {$source}.id, {$source}.oggetto, {$source}.codice DESC"; |
|
$risultato_bando = $pdo->go($sql_bando,$bind); |
|
if ($risultato_bando->rowCount()>0) { |
|
while($bando = $risultato_bando->fetch(PDO::FETCH_ASSOC)) { |
|
$label = "Elenco"; |
|
if ($source == "b_bandi_albo") { |
|
$label = AlboFornitori::getTipologie()[$bando["tipologia"]]; |
|
} |
|
$denominazione = __($label) . " - "; |
|
$denominazione .= $bando["oggetto"]; |
|
if (isset($bando["data_scadenza"]) && mysql2date($bando["data_scadenza"]) != "") { $denominazione .= " - " . __("data_scadenza") . ":" . mysql2date($bando["data_scadenza"]); } |
|
$elenchi[$source][] = ["codice"=>$bando["codice"],"id"=>$bando["id"],"denominazione"=>$denominazione]; |
|
} |
|
} |
|
} |
|
} |
|
return $elenchi; |
|
} |
|
|
|
public static function getFatturatiSOA($requested) { |
|
global $pdo; |
|
$risultato = $pdo->prepare("SELECT codice,codice_categoria FROM b_certificazioni_soa WHERE codice_operatore = :request AND codice_classifica = 0"); |
|
$fatturato = $pdo->prepare("SELECT * FROM b_fatturato_soa WHERE codice_attestazione = :codice"); |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
foreach($codici AS $request) { |
|
$risultato->bindValue(":request",$request); |
|
$risultato->execute(); |
|
if ($risultato->rowCount() > 0) { |
|
while($attestazione = $risultato->fetch(PDO::FETCH_ASSOC)) { |
|
$fatturato->bindValue(":codice",$attestazione["codice"]); |
|
$fatturato->execute(); |
|
if ($fatturato->rowCount() > 0) { |
|
while($record = $fatturato->fetch(PDO::FETCH_ASSOC)) { |
|
if (!isset($return[$request])) { $return[$request] = []; } |
|
$return[$request][$attestazione["codice_categoria"]][$record["anno"]] = $record["fatturato"]; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (!empty($return)) { |
|
if (is_array($requested)) { |
|
return $return; |
|
} else { |
|
return $return[$requested]; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public static function getServiziTecnici($requested) { |
|
global $pdo; |
|
$risultato = $pdo->prepare("SELECT * FROM b_oe_servizi_tecnici WHERE codice_operatore = :request"); |
|
$servizi = $pdo->prepare("SELECT * FROM r_oe_servizi_tecnici WHERE codice_servizio = :servizio"); |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
foreach($codici AS $request) { |
|
$risultato->bindValue(":request",$request); |
|
$risultato->execute(); |
|
if ($risultato->rowCount() > 0) { |
|
while($record = $risultato->fetch(PDO::FETCH_ASSOC)) { |
|
if (!isset($return[$request])) { $return[$request] = []; } |
|
$servizi->bindValue(":servizio",$record["codice"]); |
|
$servizi->execute(); |
|
$record["servizi"] = $servizi->fetchAll(PDO::FETCH_ASSOC); |
|
$return[$request][$record["codice"]] = $record; |
|
} |
|
} |
|
} |
|
if (!empty($return)) { |
|
if (is_array($requested)) { |
|
return $return; |
|
} else { |
|
return $return[$requested]; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
|
|
public static function getSOA($requested) { |
|
global $pdo; |
|
$risultato = $pdo->prepare("SELECT * FROM b_certificazioni_soa WHERE codice_operatore = :request AND codice_classifica > 0"); |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
foreach($codici AS $request) { |
|
$risultato->bindValue(":request",$request); |
|
$risultato->execute(); |
|
if ($risultato->rowCount() > 0) { |
|
while($record = $risultato->fetch(PDO::FETCH_ASSOC)) { |
|
if (!isset($return[$request])) { $return[$request] = []; } |
|
$return[$request][] = $record; |
|
} |
|
} |
|
} |
|
if (!empty($return)) { |
|
if (is_array($requested)) { |
|
return $return; |
|
} else { |
|
return $return[$requested]; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public static function getUser($requested) { |
|
global $pdo; |
|
$user = $pdo->prepare("SELECT b_utenti.* FROM b_utenti JOIN r_oe_utenti ON b_utenti.codice = r_oe_utenti.codice_utente WHERE r_oe_utenti.codice_operatore = :request "); |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
foreach($codici AS $request) { |
|
$user->bindValue(":request",$request); |
|
$user->execute(); |
|
if ($user->rowCount() > 0) { |
|
if (is_array($requested)) { |
|
$return[$request] = $user->fetch(); |
|
} else { |
|
return $user->fetch(); |
|
} |
|
} |
|
} |
|
if (!empty($return)) { |
|
return $return; |
|
} |
|
return false; |
|
} |
|
|
|
public static function getOE($requested) { |
|
global $pdo; |
|
if (!empty($requested)) { |
|
$codici = $requested; |
|
if (!is_array($requested)) { $codici = [$requested]; } |
|
$return = []; |
|
$count = 0; |
|
$bind_string = []; |
|
$bind = []; |
|
foreach($codici AS $request) { |
|
$bind_string[] = ":id_{$count}"; |
|
$bind[":id_{$count}"] = $request; |
|
$count++; |
|
} |
|
if (!empty($bind_string)) { |
|
$user = $pdo->prepare("SELECT * FROM b_operatori_economici WHERE codice IN (".implode(",",$bind_string).") "); |
|
} else { |
|
$user = $pdo->prepare("SELECT * FROM b_operatori_economici"); |
|
} |
|
$user->execute($bind); |
|
if ($user->rowCount() > 0) { |
|
if (is_array($requested)) { |
|
while ($tmp = $user->fetch(PDO::FETCH_ASSOC)) { |
|
$return[$tmp["codice"]] = $tmp; |
|
} |
|
} else { |
|
return $user->fetch(PDO::FETCH_ASSOC); |
|
} |
|
} |
|
if (!empty($return)) { |
|
return $return; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public static function validateCreate($params,$spidCode = null) { |
|
$msg = []; |
|
$user = ["nome","cognome","email","password"]; |
|
$oe = ["tipo","stato_legale","codice_fiscale_impresa","pec"]; |
|
$required = ["user"=>$user,"oe"=>$oe]; |
|
foreach($required AS $key => $checks) { |
|
if (empty($params[$key])) { |
|
$msg[] = $key; |
|
} else { |
|
if (is_array($checks)) { |
|
foreach($checks AS $check) { |
|
if (empty($params[$key][$check])) { |
|
$msg[] = $check; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (empty($msg)) { |
|
if ($params["oe"]["tipo"] == "IMP" && empty($params["oe"]["ragione_sociale"])) { |
|
$msg[] = "ragione_sociale"; |
|
} |
|
if (!utente::checkEmail($params["user"]["email"])) { |
|
$msg[] = "email"; |
|
} |
|
if (!empty($spidCode) && !utente::checkSpidCode($spidCode)) { |
|
$msg[] = "ID Spid"; |
|
} |
|
if (!self::checkPEC($params["oe"]["pec"])) { |
|
$msg[] = "pec"; |
|
} |
|
} |
|
if (empty($msg)) { |
|
return true; |
|
} else { |
|
return $msg; |
|
} |
|
} |
|
|
|
// Path relativo dell'archivio documenti |
|
private const ARCHIVIO_DOCUMENTI = '/archivio-documenti/'; |
|
/** |
|
* Ottiene la lista di documenti in archivio per un oe. Ritorna false se non ve se sono |
|
* |
|
* @param array $oe |
|
* @return \FilesystemIterator|false |
|
*/ |
|
public static function getArchiveDocumentList($oe) { |
|
global $config; |
|
// Se l'OE non ha un vecchio codice non c'è archivio documenti |
|
if(empty($oe["vecchio_codice"])) return false; |
|
// Prendiamo la cartella di base |
|
$folder = realpath($config["mediaFolder"] . self::ARCHIVIO_DOCUMENTI . $oe["vecchio_codice"]); |
|
|
|
if($folder === false) return false; |
|
$iterator = new \FilesystemIterator($folder); |
|
// Se il filesystemiterator è invalido la cartella è vuota |
|
if(!$iterator->valid()) return false; |
|
return $iterator; |
|
} |
|
/** |
|
* Ritorna il path assoluto di un documento per un oe |
|
* |
|
* @param array $oe |
|
* @param string $baseName |
|
* @return string|false |
|
*/ |
|
public static function getArchiveDocumentPath($oe, $baseName) { |
|
$iterator = self::getArchiveDocumentList($oe); |
|
if($iterator === false) return false; |
|
foreach($iterator as $file) { |
|
if($file->getBasename() === $baseName) |
|
return $file->getRealPath(); |
|
} |
|
} |
|
/** |
|
* Verifica che un oe abbia documenti in archivio |
|
* |
|
* @param array $oe |
|
* @return boolean |
|
*/ |
|
public static function hasAnyArchiveDocument($oe) { |
|
return self::getArchiveDocumentList($oe) !== false; |
|
} |
|
public static function validateUpdate($params) { |
|
$msg = []; |
|
$user = ["codice","nome","cognome","email"]; |
|
$oe = ["codice","stato_legale","codice_fiscale_impresa","pec"]; |
|
$required = ["user"=>$user,"oe"=>$oe,"cpv"=>true]; |
|
foreach($required AS $key => $checks) { |
|
if (empty($params[$key])) { |
|
$msg[] = $key; |
|
} else { |
|
if (is_array($checks)) { |
|
foreach($checks AS $check) { |
|
if (empty($params[$key][$check])) { |
|
$msg[] = $check; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (empty($msg)) { |
|
if (!utente::checkEmail($params["user"]["email"],$params["user"]["codice"])) { |
|
$msg[] = "email"; |
|
} |
|
if (!self::checkPEC($params["oe"]["pec"],$params["oe"]["codice"])) { |
|
$msg[] = "pec"; |
|
} |
|
} |
|
if (empty($msg)) { |
|
return true; |
|
} else { |
|
return $msg; |
|
} |
|
} |
|
|
|
public static function update($params) { |
|
global $pdo; |
|
$error = true; |
|
$msg = ""; |
|
$validation = self::validateUpdate($params); |
|
if ($validation === true) { |
|
$oe = $params["oe"]; |
|
$user = $params["user"]; |
|
if (empty($oe["ragione_sociale"])) { $oe["ragione_sociale"] = $user["cognome"] . " " . $user["nome"]; } |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "b_operatori_economici"; |
|
$salva->operazione = "UPDATE"; |
|
$salva->oggetto = $oe; |
|
$salva->expect = array("codice","tipo","ragione_sociale","stato_legale","codice_fiscale_impresa","partita_iva","pec"); |
|
$codice_oe = $salva->save(); |
|
if (!empty($codice_oe)) { |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "b_utenti"; |
|
$salva->operazione = "UPDATE"; |
|
$salva->expect = ["codice","email","cognome","nome","cf","indirizzo","citta","provincia","cap","telefono","cellulare"]; |
|
if (!empty($user["password"])) { |
|
$user["password"] = password_hash(md5($user["password"]), PASSWORD_BCRYPT); |
|
$salva->expect[] = "password"; |
|
} |
|
$salva->oggetto = $user; |
|
$codice_utente = $salva->save(); |
|
if (!empty($codice_utente)) { |
|
if (!empty($user["password"])) { |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_password_log"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = array("codice_utente"=>$codice_utente); |
|
$salva->save(); |
|
} |
|
|
|
$params["cpv"] = array_unique($params["cpv"]); |
|
$pdo->go("DELETE FROM r_cpv_operatori WHERE codice_operatore = :codice",[":codice"=>$codice_oe]); |
|
foreach($params["cpv"] as $cpv) { |
|
if (!empty($cpv)) { |
|
$insert_cpv = []; |
|
$insert_cpv["codice"] = $cpv; |
|
$insert_cpv["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_cpv_operatori"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $insert_cpv; |
|
$salva->save(); |
|
} |
|
} |
|
$pdo->go("DELETE FROM b_certificazioni_soa WHERE codice_operatore = :codice AND codice_classifica > 0",[":codice"=>$codice_oe]); |
|
if (!empty($params["soa"])) { |
|
foreach($params["soa"] as $soa) { |
|
if (!empty($soa)) { |
|
$soa["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_certificazioni_soa"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $soa; |
|
$salva->save(); |
|
} |
|
} |
|
} |
|
$pdo->go("DELETE FROM b_certificazioni_soa WHERE codice_operatore = :codice AND codice_classifica = 0",[":codice"=>$codice_oe]); |
|
$pdo->go("DELETE FROM b_fatturato_soa WHERE codice_operatore = :codice ",[":codice"=>$codice_oe]); |
|
if (!empty($params["fatturato"])) { |
|
foreach($params["fatturato"] as $fatturato) { |
|
if (!empty($fatturato)) { |
|
$soa = []; |
|
$soa["codice_categoria"] = $fatturato["codice_categoria"]; |
|
$soa["codice_classifica"] = 0; |
|
$soa["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_certificazioni_soa"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $soa; |
|
$codice_attestazione = $salva->save(); |
|
if (!empty($codice_attestazione)) { |
|
foreach($fatturato["anni"] AS $anno => $importo) { |
|
$insert = []; |
|
$insert["codice_operatore"] = $codice_oe; |
|
$insert["codice_attestazione"] = $codice_attestazione; |
|
$insert["anno"] = $anno; |
|
$insert["fatturato"] = $importo; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_fatturato_soa"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $insert; |
|
$salva->save(); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$pdo->go("DELETE FROM b_oe_servizi_tecnici WHERE codice_operatore = :codice",[":codice"=>$codice_oe]); |
|
if (!empty($params["servizioTecnico"])) { |
|
foreach($params["servizioTecnico"] as $servizioTecnico) { |
|
if (!empty($servizioTecnico) && !empty($servizioTecnico["servizi"])) { |
|
$servizioTecnico["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_oe_servizi_tecnici"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $servizioTecnico; |
|
$codice_servizio = $salva->save(); |
|
if (!empty($codice_servizio)) { |
|
foreach($servizioTecnico["servizi"] AS $categoria) { |
|
$categoria["codice_servizio"] = $codice_servizio; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_oe_servizi_tecnici"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $categoria; |
|
$salva->save(); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$error = false; |
|
return true; |
|
} |
|
} else { |
|
$msg = "Errore aggiornamento record OE"; |
|
} |
|
} else { |
|
$msg = $validation; |
|
} |
|
if ($error === true) { |
|
return ["error"=>true,"msg"=>$msg]; |
|
} |
|
} |
|
|
|
|
|
public static function create($params,$codice_ente,$spidCode = null) { |
|
$error = true; |
|
$msg = ""; |
|
if (!empty($codice_ente)) { |
|
$ente = Ente::getInfoFromID($codice_ente); |
|
$ente = reset($ente); |
|
if ($ente["attivo"] == "S") { |
|
$validation = self::validateCreate($params,$spidCode); |
|
if ($validation === true) { |
|
global $pdo; |
|
$oe = $params["oe"]; |
|
$oe["attivo"] = (empty($spidCode)) ? "N" : "S"; |
|
$user = $params["user"]; |
|
if (empty($oe["ragione_sociale"])) { $oe["ragione_sociale"] = $user["cognome"] . " " . $user["nome"]; } |
|
$oe["timestamp_creazione"] = date("Y-m-d H:i:s"); |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_operatori_economici"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $oe; |
|
$salva->expect = array("tipo","attivo","ragione_sociale","stato_legale","codice_fiscale_impresa","partita_iva","pec","vecchio_codice","timestamp_creazione"); |
|
$codice_oe = $salva->save(); |
|
if (!empty($codice_oe)) { |
|
$user["ruolo"] = "OPE"; |
|
$user["attivo"] = (empty($spidCode)) ? "N" : "S"; |
|
$user["password"] = password_hash(md5($user["password"]), PASSWORD_BCRYPT); |
|
$user["spidCode"] = $spidCode; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_utenti"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $user; |
|
$salva->expect = array("ruolo","attivo","password","email","cognome","cf","nome","spidCode"); |
|
$codice_utente = $salva->save(); |
|
if (!empty($codice_utente)) { |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_password_log"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = array("codice_utente"=>$codice_utente); |
|
$salva->save(); |
|
|
|
$r_oe_utenti = []; |
|
$r_oe_utenti["codice_utente"]= $codice_utente; |
|
$r_oe_utenti["codice_operatore"]= $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_oe_utenti"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $r_oe_utenti; |
|
$codice_r = $salva->save(); |
|
if ($codice_r > 0) { |
|
$r_enti_operatori = []; |
|
$r_enti_operatori["cod_ente"]= $ente["codice"]; |
|
$r_enti_operatori["codice_operatore"]= $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_enti_operatori"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $r_enti_operatori; |
|
$salva->save(); |
|
|
|
// Inserimento SOA |
|
foreach($params["soa"] as $soa) { |
|
$insert_soa = []; |
|
$insert_soa["codice_categoria"] = $soa["categoria"]; |
|
$insert_soa["codice_classifica"] = $soa["classifica"]; |
|
$insert_soa["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_certificazioni_soa"; |
|
$salva->operazione = "INSERT"; |
|
$salva->expect = ["codice_classifica", "codice_categoria","codice_operatore"]; |
|
$salva->oggetto = $insert_soa; |
|
$salva->save(); |
|
} |
|
// Inserimento elenchi |
|
$params["elenchi"] = array_unique($params["elenchi"]); |
|
if (!empty($params["elenchi"])) { |
|
foreach($params["elenchi"] as $codice_elenco) { |
|
$elenco = []; |
|
$elenco["codice_elenco"] = $codice_elenco; |
|
$elenco["codice_operatore"] = $codice_oe; |
|
$elenco["conferma"] = |
|
$elenco["ammesso"] = |
|
$elenco["valutato"] = |
|
$elenco["visto"] = "S"; |
|
$elenco["utente_creazione"] = |
|
$elenco["utente_aggiornamento"] = |
|
$elenco["utente_abilitazione"] = |
|
$elenco["utente_modifica"] = -1; |
|
$elenco["timestamp_creazione"] = |
|
$elenco["timestamp_aggiornamento"] = |
|
$elenco["timestamp_abilitazione"] = |
|
$elenco["timestamp_modifica"] = date("Y-m-d H:i:s"); |
|
|
|
|
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_partecipanti_albo"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $elenco; |
|
$salva->save(); |
|
} |
|
} |
|
// |
|
$params["cpv"] = array_unique($params["cpv"]); |
|
foreach($params["cpv"] as $cpv) { |
|
if (!empty($cpv)) { |
|
$insert_cpv = []; |
|
$insert_cpv["codice"] = $cpv; |
|
$insert_cpv["codice_operatore"] = $codice_oe; |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "r_cpv_operatori"; |
|
$salva->operazione = "INSERT"; |
|
$salva->expect = ["codice","codice_operatore"]; |
|
$salva->oggetto = $insert_cpv; |
|
$salva->save(); |
|
} |
|
} |
|
return $codice_oe; |
|
} else { |
|
$msg = "Errore salvataggio relazione OE - Utente"; |
|
$pdo->go("DELETE FROM b_operatori_economici WHERE codice = :codice",[":codice"=>$codice_oe]); |
|
$pdo->go("DELETE FROM b_utenti WHERE codice = :codice",[":codice"=>$codice_utente]); |
|
} |
|
} else { |
|
$msg = "Errore salvataggio utente"; |
|
$pdo->go("DELETE FROM b_operatori_economici WHERE codice = :codice",[":codice"=>$codice_oe]); |
|
} |
|
} else { |
|
$msg = "Errore salvataggio OE"; |
|
} |
|
} else { |
|
$msg = $validation; |
|
} |
|
} else { |
|
$msg = "Ente non attivo"; |
|
} |
|
} else { |
|
$msg = "Ente non definito"; |
|
} |
|
if ($error === true) { |
|
return ["error"=>true,"msg"=>$msg]; |
|
} |
|
} |
|
|
|
public function setFilters($filters) { |
|
if (!empty($filters["cpv"])) { $this->categorie = $filters["cpv"]; } |
|
if (!empty($filters["soa"])) { $this->soa = $filters["soa"]; } |
|
if (!empty($filters["elenco"])) { $this->elenco = $filters["elenco"]; } |
|
$this->includiNonQualificati = (!empty($filters["includiNonQualificati"])); |
|
if (!empty($filters["servizioTecnico"])) { $this->servizi_tecnici = $filters["servizioTecnico"]; } |
|
if (!empty($filters["dyn-form-input"])) { $this->advanced = $filters["dyn-form-input"]; } |
|
if (!empty($filters["vendorRatingMinimo"])) { $this->ratingMinimo = $filters["vendorRatingMinimo"]; } |
|
if (!empty($filters["conteggio_rotazione"])) { $this->conteggio_rotazione = $filters["conteggio_rotazione"]; } |
|
if (!empty($filters["ambito_rotazione"])) { $this->ambito_rotazione = $filters["ambito_rotazione"]; } |
|
if (!empty($filters["estesa"]) && ($_SESSION["ente"]->hasModulo("albo.extended"))) { $this->estesa = $filters["estesa"]; } |
|
} |
|
|
|
public static function getEstrazione($contesto,$codice_elemento,$sub_elemento) { |
|
global $pdo; |
|
$ris = $pdo->go("SELECT * FROM b_estrazioni WHERE contesto = :contesto AND codice_elemento = :elemento AND sub_elemento = :sub_elemento",[":contesto"=>$contesto,":elemento"=>$codice_elemento,":sub_elemento"=>$sub_elemento]); |
|
if ($ris->rowCount() === 1) { |
|
return $ris->fetch(PDO::FETCH_ASSOC); |
|
} |
|
return false; |
|
} |
|
|
|
public static function getRelazioniEstrazione($codice_estrazione) { |
|
global $pdo; |
|
return $pdo->go("SELECT * FROM r_estrazioni WHERE codice_estrazione = :codice ORDER BY escluso ASC, identificativo ",[":codice"=>$codice_estrazione])->fetchAll(PDO::FETCH_ASSOC); |
|
} |
|
|
|
public static function printSetEstrazione($managerToken,$action,$contesto,$codice_elemento=0,$sub_elemento=0) { |
|
global $root; |
|
include($root."/backend/operatori_economici/random/settings.php"); |
|
} |
|
|
|
public static function printReportEstrazione($estrazione,$relazioni,$exportVersion = false,$printButton = true) { |
|
global $root; |
|
include($root."/backend/operatori_economici/random/show.php"); |
|
} |
|
|
|
public static function saveInvito($invito,$cpv,$soa = [],$tecnici = []) { |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "b_inviti"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $invito; |
|
$codice_invito = $salva->save(); |
|
if (!empty($codice_invito)) { |
|
if (!empty($cpv)) { |
|
foreach($cpv AS $cat) { |
|
$salva->nome_tabella = "r_inviti_cpv"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = ["codice_invito"=>$codice_invito,"cpv"=>$cat]; |
|
$salva->save(); |
|
} |
|
} |
|
if (!empty($soa)) { |
|
foreach($soa AS $cat) { |
|
$salva->nome_tabella = "r_inviti_soa"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = ["codice_invito"=>$codice_invito,"soa"=>$cat["categoria"],"classifica"=>$cat["classifica"]]; |
|
$salva->save(); |
|
} |
|
} |
|
if (!empty($tecnici)) { |
|
foreach($tecnici AS $cat) { |
|
$salva->nome_tabella = "r_inviti_servizi_tecnici"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = ["codice_invito"=>$codice_invito,"categoria"=>$cat]; |
|
$salva->save(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
public function eseguiEstrazione($codice_ente,$numero,$esclusioni,$descrizione,$contesto,$rotazione=true,$codice_elemento=0,$sub_elemento=0) { |
|
$this->countInviti = ($this->conteggio_rotazione != "disabled"); |
|
if (!isset($this->operatoriSorteggio)) { |
|
$relazioni = $this->getOERelations($codice_ente); |
|
$operatori = oeManager::getOE(array_keys($relazioni)); |
|
} else { |
|
$operatori = oeManager::getOE($this->operatoriSorteggio); |
|
} |
|
$return = "Non sono presenti operatori"; |
|
if (!empty($operatori)) { |
|
$conteggi = []; |
|
$auto = []; |
|
$potenziali = []; |
|
$esclusi = []; |
|
if (!empty($relazioni)) { |
|
if ($rotazione) { |
|
foreach($relazioni AS $codice_oe => $relazione) { |
|
$insert = true; |
|
if (!empty($esclusioni)) { |
|
foreach($esclusioni AS $esclusione) { |
|
if ($operatori[$codice_oe]["codice_fiscale_impresa"] == $esclusione) { |
|
$insert = false; |
|
$esclusi[$codice_oe] = $relazione; |
|
break; |
|
} |
|
} |
|
} |
|
if ($insert) { |
|
if (!isset($relazione["inviti"])) { |
|
$relazione["inviti"] = 0; |
|
} |
|
if (!isset($conteggi[$relazione["inviti"]])) { $conteggi[$relazione["inviti"]] = []; } |
|
if (!isset($conteggioMinimo)) { |
|
$conteggioMinimo = $conteggioMassimo = $relazione["inviti"]; |
|
} else { |
|
if (isset($conteggioMinimo) && $conteggioMinimo > $relazione["inviti"]) { $conteggioMinimo = $relazione["inviti"]; } |
|
if (isset($conteggioMassimo) && $conteggioMassimo < $relazione["inviti"]) { $conteggioMassimo = $relazione["inviti"]; } |
|
} |
|
$conteggi[$relazione["inviti"]][$codice_oe] = $relazione; |
|
} |
|
} |
|
} else { |
|
$conteggioMinimo = $conteggioMassimo = 0; |
|
$conteggi[0] = $relazioni; |
|
} |
|
if ($conteggioMinimo == $conteggioMassimo) { |
|
if (count($conteggi[$conteggioMinimo]) <= $numero) { |
|
$auto = $conteggi[$conteggioMinimo]; |
|
} else { |
|
$potenziali = $conteggi[$conteggioMinimo]; |
|
} |
|
} else { |
|
$stopPotenziali = false; |
|
for($number = $conteggioMinimo;$number <= $conteggioMassimo;$number++) { |
|
if (!empty($conteggi[$number])) { |
|
$relazioni = $conteggi[$number]; |
|
if ((count($auto) + count($relazioni) <= $numero) && empty($potenziali)) { |
|
foreach($relazioni AS $oe => $relazione) { |
|
$auto[$oe] = $relazione; |
|
} |
|
} else { |
|
if (!$stopPotenziali) { |
|
foreach($relazioni AS $oe => $relazione) { |
|
$potenziali[$oe] = $relazione; |
|
} |
|
if (count($auto) + count($potenziali) >= $numero) { $stopPotenziali = true; } |
|
} else { |
|
foreach($relazioni AS $oe => $relazione) { |
|
$esclusi[$oe] = $relazione; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
$potenziali = $operatori; |
|
} |
|
$note = []; |
|
$note["descrizione"] = $descrizione; |
|
$note["esclusioni"] = $esclusioni; |
|
if (!empty($this->categorie)) { $note["cpv"] = $this->categorie; } |
|
if (!empty($this->soa)) { $note["soa"] = $this->soa; } |
|
if (!empty($this->elenco)) { $note["elenco"] = $this->elenco; } |
|
if (!empty($this->servizi_tecnici)) { $note["servizioTecnico"] = $this->servizi_tecnici; } |
|
if (!empty($this->advanced)) { $filters["dyn-form-input"] = $this->advanced; } |
|
if (!empty($this->ratingMinimo)) { $note["vendorRatingMinimo"] = $this->ratingMinimo; } |
|
if (!empty($this->conteggio_rotazione)) { $note["conteggio_rotazione"] = $this->conteggio_rotazione; } |
|
if (!empty($this->ambito_rotazione)) { $note["ambito_rotazione"] = $this->ambito_rotazione; } |
|
if (!empty($this->estesa)) { $filters["estesa"] = $this->estesa; } |
|
$estrazione = []; |
|
$estrazione["codice_elemento"] = $codice_elemento; |
|
$estrazione["codice_ente"] = $codice_ente; |
|
$estrazione["sub_elemento"] = $sub_elemento; |
|
$estrazione["contesto"] = $contesto; |
|
$estrazione["note"] = json_encode($note); |
|
$estrazione["numero_partecipanti"] = $numero; |
|
$estrazione["sequenza"] = ""; |
|
$estrazione["esclusioni"] = ""; |
|
if (!empty($potenziali)) { |
|
$disponibili = $numero - count($auto); |
|
$sequenza = range(1,count($potenziali)); |
|
shuffle($sequenza); |
|
$sequenza = array_splice($sequenza,0,$disponibili); |
|
$estrazione["sequenza"] = json_encode($sequenza); |
|
} |
|
$salva = new salva(); |
|
$salva->debug = false; |
|
$salva->nome_tabella = "b_estrazioni"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = $estrazione; |
|
$codice_estrazione = $salva->save(); |
|
if (!empty($codice_estrazione)) { |
|
$insert = $this->db->prepare("INSERT INTO r_estrazioni (codice_estrazione,codice_operatore,identificativo,escluso,selezionato,conteggio,utente_modifica,timestamp) VALUES (:codice_estrazione,:codice_operatore,:identificativo,:escluso,:selezionato,:conteggio,:utente_modifica,now())"); |
|
$insert->bindValue(':codice_estrazione',$codice_estrazione); |
|
$insert->bindValue(':utente_modifica',$_SESSION["utente"]->codice); |
|
if (!empty($auto)) { |
|
$ooee = array_keys($auto); |
|
foreach($ooee AS $oe) { |
|
$insert->bindValue(':codice_operatore',$oe); |
|
$insert->bindValue(':identificativo',0); |
|
$insert->bindValue(':escluso',"N"); |
|
$insert->bindValue(':selezionato',"A"); |
|
$insert->bindValue(':conteggio',$auto[$oe]["inviti"]); |
|
$insert->execute(); |
|
} |
|
} |
|
if (!empty($esclusi)) { |
|
$ooee = array_keys($esclusi); |
|
foreach($ooee AS $oe) { |
|
$insert->bindValue(':codice_operatore',$oe); |
|
$insert->bindValue(':identificativo',0); |
|
$insert->bindValue(':escluso',"S"); |
|
$insert->bindValue(':selezionato',"N"); |
|
$insert->bindValue(':conteggio',$esclusi[$oe]["inviti"]); |
|
$insert->execute(); |
|
} |
|
} |
|
if (!empty($potenziali)) { |
|
$ooee = array_keys($potenziali); |
|
shuffle($ooee); |
|
$count = 0; |
|
foreach($ooee AS $oe) { |
|
$count++; |
|
$selezionato = "N"; |
|
if (in_array($count,$sequenza) !== false) { $selezionato = "S"; } |
|
$insert->bindValue(':codice_operatore',$oe); |
|
$insert->bindValue(':identificativo',$count); |
|
$insert->bindValue(':escluso',"N"); |
|
$insert->bindValue(':selezionato',$selezionato); |
|
$insert->bindValue(':conteggio',(isset($potenziali[$oe]["inviti"]) && is_numeric($potenziali[$oe]["inviti"])) ? $potenziali[$oe]["inviti"] : 0); |
|
$insert->execute(); |
|
} |
|
} |
|
$return = $codice_estrazione; |
|
} else { |
|
$return = "Errore nel salvataggio dell'estrazione"; |
|
} |
|
} |
|
return $return; |
|
} |
|
|
|
public static function getFormFromAlbi($codice_albo = null) { |
|
if (isset($codice_albo)) { |
|
global $pdo; |
|
$sql = "SELECT codice_form FROM r_albo_fornitori_form WHERE "; |
|
$bind = []; |
|
if (!empty($codice_albo)) { |
|
$bind = [":elenco"=>$codice_albo]; |
|
$sql .= " codice_elenco = :elenco "; |
|
} else { |
|
$sql .= " codice_elenco > 0 "; |
|
} |
|
return $pdo->go($sql,$bind)->fetchAll(PDO::FETCH_COLUMN); |
|
} |
|
} |
|
|
|
public function getOERelations($codice_ente,String $logicalOperator = "OR") { |
|
$return = false; |
|
$bind = []; |
|
|
|
$andOperator = ($logicalOperator === "AND"); |
|
|
|
if ($this->estesa == "S") { |
|
$sql = "SELECT r_enti_operatori.* FROM r_enti_operatori |
|
JOIN b_operatori_economici ON r_enti_operatori.codice_operatore = b_operatori_economici.codice |
|
WHERE b_operatori_economici.codice > 0 "; |
|
} else { |
|
$bind = array(":codice_ente"=>$codice_ente); |
|
$sql = "SELECT r_enti_operatori.* FROM r_enti_operatori JOIN b_operatori_economici ON r_enti_operatori.codice_operatore = b_operatori_economici.codice |
|
WHERE r_enti_operatori.cod_ente = :codice_ente "; |
|
|
|
} |
|
if (!empty($this->generalFilter)) { |
|
$suddivisione = suddivisione_pdo($this->generalFilter,"b_operatori_economici.codice_fiscale_impresa"); |
|
$sql .= " AND ((" . $suddivisione["sql"] . ") OR "; |
|
$bind = array_merge($bind,$suddivisione["bind"]); |
|
$suddivisione = suddivisione_pdo($this->generalFilter,"b_operatori_economici.partita_iva"); |
|
$sql .= "(" . $suddivisione["sql"] . ") OR "; |
|
$bind = array_merge($bind,$suddivisione["bind"]); |
|
$suddivisione = suddivisione_pdo($this->generalFilter,"b_operatori_economici.ragione_sociale"); |
|
$sql .= "(" . $suddivisione["sql"] . ") OR "; |
|
$bind = array_merge($bind,$suddivisione["bind"]); |
|
$suddivisione = suddivisione_pdo($this->generalFilter,"b_operatori_economici.tipo"); |
|
$sql .= "(" . $suddivisione["sql"] . ")) "; |
|
$bind = array_merge($bind,$suddivisione["bind"]); |
|
} |
|
|
|
|
|
$ris = $this->db->go($sql,$bind); |
|
if ($ris->rowCount() > 0) { |
|
if ($ris->rowCount() > 500) { |
|
ini_set("max_execution_time", "240"); |
|
} |
|
$return = []; |
|
$filtered = false; |
|
if (!empty($this->advanced)) { |
|
$filtri_da_applicare = []; |
|
$forms = self::getStandardForms("ALL",$_SESSION["ente"]->codice); |
|
if (!empty($forms)) { |
|
foreach($forms AS $form) { |
|
$infoForm = FormManager::getInfoFromID($form,$_SESSION["ente"]->codice); |
|
if (!empty($infoForm) && isset($this->advanced[$infoForm["codice"]])) { |
|
$filtri_da_applicare[$infoForm["codice"]] = $this->advanced[$infoForm["codice"]]; |
|
} |
|
} |
|
} |
|
if (!empty($filtri_da_applicare)) { |
|
$filtered = FormManager::returnElementsFromFilters($filtri_da_applicare,"oe",$andOperator); |
|
} |
|
if ($filtered === false || !empty($filtered)) { |
|
$filtri_da_applicare = []; |
|
$forms = oeManager::getFormFromAlbi(0); |
|
if (!empty($forms)) { |
|
foreach($forms AS $form) { |
|
if (isset($this->advanced[$form])) { |
|
$filtri_da_applicare[$form] = $this->advanced[$form]; |
|
} |
|
} |
|
} |
|
$filtered_albi = FormManager::returnElementsFromFilters($filtri_da_applicare,"albo_fornitori-{$codice_ente}",$andOperator); |
|
if ($filtered_albi === false || !empty($filtered_albi)) { |
|
if (!empty($filtered_albi)) { |
|
$albi = []; |
|
$table = AlboFornitori::getOeTable(); |
|
$sqlFilterPartecipazione = "SELECT codice_operatore FROM {$table} WHERE codice = :codice AND "; |
|
if ($this->includiNonQualificati) { |
|
$sqlFilterPartecipazione .= "conferma = 'S'"; |
|
} else { |
|
$sqlFilterPartecipazione .= "ammesso = 'S'"; |
|
} |
|
if (!empty($this->elenco)) { |
|
$filtroElenco = explode("|",$this->elenco); |
|
if ($filtroElenco[1] > 0) { |
|
$sqlFilterPartecipazione .= " AND codice_elenco = :codice_elenco "; |
|
$bindCodiceEleneco = $filtroElenco[1]; |
|
} |
|
} |
|
$selectCodiciOperatori = $this->db->prepare($sqlFilterPartecipazione); |
|
if (isset($bindCodiceEleneco)) { |
|
$selectCodiciOperatori->bindValue(":codice_elenco",$bindCodiceEleneco); |
|
} |
|
foreach($filtered_albi AS $partecipante) { |
|
$selectCodiciOperatori->bindValue(":codice",$partecipante); |
|
$selectCodiciOperatori->execute(); |
|
if ($selectCodiciOperatori->rowCount() === 1) { |
|
$albi[] = $selectCodiciOperatori->fetch(PDO::FETCH_COLUMN); |
|
} |
|
} |
|
if (!empty($filtered)) { |
|
$filtered = array_intersect($filtered,$albi); |
|
} else { |
|
$filtered = $albi; |
|
} |
|
} |
|
} else { |
|
$filtered = []; |
|
} |
|
} |
|
} |
|
while ($tmp = $ris->fetch(PDO::FETCH_ASSOC)) { |
|
if (!empty($tmp)) { |
|
$tmp_codice = $tmp["codice_operatore"]; |
|
$insert = true; |
|
if ($filtered!==false) { |
|
$insert = false; |
|
if (in_array($tmp_codice,$filtered) !== false) { $insert = true; } |
|
} |
|
if ($insert) { $return[$tmp["codice_operatore"]] = $tmp; } |
|
} |
|
} |
|
if (!empty($return) && !empty($this->elenco)) { |
|
$tmp = []; |
|
$filtroElenco = explode("|",$this->elenco); |
|
if (count($filtroElenco) == 2) { |
|
$sources = self::tipiElenco(); |
|
$tabellePartecipanti = self::tabelleElenco(); |
|
if (in_array($filtroElenco[0],array_keys($sources)) !== false && !empty($tabellePartecipanti[$filtroElenco[0]])) { |
|
$tabellaPartecipanti = $tabellePartecipanti[$filtroElenco[0]]; |
|
$sql = "SELECT $tabellaPartecipanti.codice FROM $tabellaPartecipanti JOIN {$filtroElenco[0]} ON $tabellaPartecipanti.codice_elenco = {$filtroElenco[0]}.codice |
|
WHERE codice_operatore = :operatore AND "; |
|
if ($this->includiNonQualificati) { |
|
$sql .= " conferma = 'S'"; |
|
} else { |
|
$sql .= " conferma = 'S' AND ammesso = 'S'"; |
|
} |
|
if ($filtroElenco[0] == "b_bandi_albo" && $filtroElenco[1] == "0") { |
|
$sql .= " AND b_bandi_albo.tipologia <> 'I' "; |
|
} else { |
|
$sql .= " AND $tabellaPartecipanti.codice_elenco = :codice_elenco "; |
|
} |
|
|
|
$check = $this->db->prepare($sql); |
|
if ($filtroElenco[1] != "0") { $check->bindValue(":codice_elenco",$filtroElenco[1]); } |
|
foreach($return AS $relazione) { |
|
$check->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$check->execute(); |
|
if ($check->rowCount() > 0) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
} |
|
} |
|
} |
|
} |
|
|
|
$return = $tmp; |
|
} |
|
if (!empty($return) && (!empty($this->servizi_tecnici))) { |
|
$tmp = []; |
|
$servizioTecnico = $this->db->prepare("SELECT r_oe_servizi_tecnici.codice FROM r_oe_servizi_tecnici JOIN b_oe_servizi_tecnici ON r_oe_servizi_tecnici.codice_servizio = b_oe_servizi_tecnici.codice |
|
WHERE b_oe_servizi_tecnici.codice_operatore = :operatore AND r_oe_servizi_tecnici.codice_categoria = :categoria"); |
|
foreach($return AS $relazione) { |
|
foreach($this->servizi_tecnici AS $categoria) { |
|
if ($andOperator) { |
|
$checkID = "servizioTecnico-{$categoria}"; |
|
$this->addNeedCheck($checkID); |
|
} |
|
$servizioTecnico->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$servizioTecnico->bindValue(":categoria",$categoria); |
|
$servizioTecnico->execute(); |
|
if ($servizioTecnico->rowCount() > 0) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
if (!$andOperator) { |
|
break; |
|
} else { |
|
$this->addObtainedCheck($checkID,$relazione["codice_operatore"]); |
|
} |
|
} |
|
} |
|
} |
|
$return = $tmp; |
|
} |
|
if (!empty($return) && !empty($this->soa)) { |
|
$onlySOA = $this->db->prepare("SELECT codice FROM b_certificazioni_soa WHERE codice_operatore = :operatore AND codice_categoria = :categoria AND codice_classifica > 0"); |
|
$conFatturato = $this->db->prepare("SELECT codice FROM b_certificazioni_soa WHERE codice_operatore = :operatore AND codice_categoria = :categoria AND codice_classifica >= 0"); |
|
$fatturato = $this->db->prepare("SELECT fatturato,anno FROM b_fatturato_soa WHERE codice_attestazione = :codice"); |
|
$soaClassifica = $this->db->prepare("SELECT codice FROM b_certificazioni_soa WHERE codice_operatore = :operatore AND codice_categoria = :categoria AND codice_classifica = :classifica"); |
|
$soaClassificaMinima = $this->db->prepare("SELECT codice FROM b_certificazioni_soa WHERE codice_operatore = :operatore AND codice_categoria = :categoria AND codice_classifica >= :classifica"); |
|
$tmp = []; |
|
foreach($return AS $relazione) { |
|
$insert = false; |
|
foreach($this->soa AS $soa) { |
|
if ($andOperator) { |
|
$insert = false; |
|
} |
|
if (!empty($soa["codice_categoria"])) { |
|
if ($andOperator) { |
|
$checkID = "soa-{$soa["codice_categoria"]}"; |
|
$this->addNeedCheck($checkID); |
|
} |
|
if (empty($soa["codice_classifica"])) { |
|
$onlySOA->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$onlySOA->bindValue(":categoria",$soa["codice_categoria"]); |
|
$onlySOA->execute(); |
|
if ($onlySOA->rowCount() > 0) { |
|
$insert = true; |
|
} |
|
} else { |
|
if ($soa["codice_classifica"] === "-1") { |
|
$conFatturato->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$conFatturato->bindValue(":categoria",$soa["codice_categoria"]); |
|
$conFatturato->execute(); |
|
if ($conFatturato->rowCount() > 0) { |
|
$insert = true; |
|
if (!empty($soa["importo"])) { |
|
$insert = false; |
|
$codici = $conFatturato->fetchAll(PDO::FETCH_COLUMN); |
|
$totale = 0; |
|
foreach($codici AS $codice) { |
|
$anno_riferimento = ((int)date("Y")) - 5; |
|
$fatturato->execute([":codice"=>$codice]); |
|
if ($fatturato->rowCount() > 0) { |
|
while($fatt = $fatturato->fetch(PDO::FETCH_ASSOC)) { |
|
if ($fatt["anno"] >= $anno_riferimento) { |
|
$totale += $fatt["fatturato"]; |
|
} |
|
} |
|
} |
|
} |
|
if ($soa["importo"] <= $totale) { |
|
$insert = true; |
|
} |
|
} |
|
} |
|
$soa["codice_classifica"] = 1; |
|
} |
|
if (empty($soa["classifica_minima"])) { |
|
$soaClassifica->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$soaClassifica->bindValue(":categoria",$soa["codice_categoria"]); |
|
$soaClassifica->bindValue(":classifica",$soa["codice_classifica"]); |
|
$soaClassifica->execute(); |
|
if ($soaClassifica->rowCount() > 0) { |
|
$insert = true; |
|
} |
|
} else { |
|
$soaClassificaMinima->bindValue(":operatore",$relazione["codice_operatore"]); |
|
$soaClassificaMinima->bindValue(":categoria",$soa["codice_categoria"]); |
|
$soaClassificaMinima->bindValue(":classifica",$soa["codice_classifica"]); |
|
$soaClassificaMinima->execute(); |
|
if ($soaClassificaMinima->rowCount() > 0) { |
|
$insert = true; |
|
} |
|
} |
|
} |
|
} |
|
if ($insert) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
if ($andOperator) { |
|
$this->addObtainedCheck($checkID,$relazione["codice_operatore"]); |
|
} else { |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
$return = $tmp; |
|
} |
|
if (!empty($return) && !empty($this->ratingMinimo)) { |
|
$tmp = []; |
|
foreach($return AS $relazione) { |
|
if ($relazione["feedback"] >= $this->ratingMinimo) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
} |
|
} |
|
$return = $tmp; |
|
} |
|
if (!empty($return) && !empty($this->categorie)) { |
|
$strsql = "SELECT codice FROM r_cpv_operatori WHERE codice_operatore = :codice_operatore AND ("; |
|
$bind = []; |
|
$n_cat = 0; |
|
foreach($this->categorie as $codice) { |
|
$n_cat++; |
|
if ($codice != "") { |
|
$bind[":cat_".$n_cat] = $codice; |
|
$strsql .= "(r_cpv_operatori.codice = :cat_".$n_cat ." "; |
|
if (strlen($codice)>2) { |
|
$diff = strlen($codice) - 2; |
|
$n_sub_cat = 0; |
|
for($i=1;$i<=$diff;$i++) { |
|
$n_sub_cat++; |
|
$bind[":cat_".$n_cat."_".$n_sub_cat] = substr($codice,0,$i*-1); |
|
$strsql .= "OR r_cpv_operatori.codice = :cat_".$n_cat."_".$n_sub_cat . " "; |
|
} |
|
} |
|
$strsql.=") OR "; |
|
} |
|
} |
|
$strsql = substr($strsql,0,-4); |
|
$strsql .= ")"; |
|
$cpv = $this->db->prepare($strsql); |
|
|
|
$tmp = []; |
|
foreach($bind AS $idBind => $valueBind) { |
|
$cpv->bindValue($idBind,$valueBind); |
|
} |
|
$tmp = []; |
|
foreach($return AS $relazione) { |
|
$cpv->bindValue(":codice_operatore",$relazione["codice_operatore"]); |
|
$cpv->execute(); |
|
if ($cpv->rowCount() > 0) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
} |
|
} |
|
$return = $tmp; |
|
} |
|
if (empty($return)) { |
|
$return = false; |
|
} else { |
|
if ($andOperator) { |
|
$tmp = []; |
|
foreach($return AS $relazione) { |
|
$insert = true; |
|
foreach($this->neededChecks AS $checkID) { |
|
if (!in_array($checkID, $this->obtainedChecks[$relazione["codice_operatore"]])) { |
|
$insert = false; |
|
break; |
|
} |
|
} |
|
if ($insert) { |
|
$tmp[$relazione["codice_operatore"]] = $relazione; |
|
} |
|
} |
|
$return = $tmp; |
|
} |
|
if (!empty($return)) { |
|
if ($this->countInviti && count($return) < 5000) { |
|
$inviti = $this->getInviti(array_keys($return),$codice_ente); |
|
foreach($return AS $relazione) { |
|
$return[$relazione["codice_operatore"]]["inviti"] = $inviti[$relazione["codice_operatore"]]["generali"]; |
|
$return[$relazione["codice_operatore"]]["invitiSolari"] = $inviti[$relazione["codice_operatore"]]["anno"]; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $return; |
|
} |
|
|
|
public function getInviti($operatori,$codice_ente) { |
|
if (is_numeric($operatori)) { $operatori = [$operatori]; } |
|
$operatori = self::getOE($operatori); |
|
$return = []; |
|
if (strpos($this->conteggio_rotazione,"cpv") === 0) { |
|
if (!empty($this->categorie)) { |
|
$join = $this->db->prepare("SELECT codice FROM r_inviti_cpv WHERE codice_invito = :codice AND cpv LIKE :cpv"); |
|
} |
|
} else if (strpos($this->conteggio_rotazione,"soa") === 0) { |
|
if (!empty($this->soa)) { |
|
if ($this->conteggio_rotazione == "soa") { |
|
$join = $this->db->prepare("SELECT codice FROM r_inviti_soa WHERE codice_invito = :codice AND soa = :categoria"); |
|
} else { |
|
$join = $this->db->prepare("SELECT codice FROM r_inviti_soa WHERE codice_invito = :codice AND soa = :categoria AND classifica = :classifica"); |
|
} |
|
} |
|
} else if ($this->conteggio_rotazione == "servizi_tecnici" && !empty($this->servizi_tecnici)) { |
|
$join = $this->db->prepare("SELECT codice FROM r_inviti_soa WHERE codice_invito = :codice AND categoria = :categoria"); |
|
} |
|
$error = true; |
|
if (empty($this->conteggio_rotazione) || !empty($join)) { |
|
$error = false; |
|
if (!empty($this->elenco) && $this->ambito_rotazione == "elenco") { |
|
$elencoFiltro = explode("|",$this->elenco); |
|
if (count($elencoFiltro) == 2 && $elencoFiltro[1] > 0) { |
|
$allInviti = $this->db->prepare("SELECT codice, data_invito FROM b_inviti WHERE tipo_elenco = :tipo AND codice_elenco = :elenco AND codice_fiscale_operatore = :cf AND codice_ente = :codice_ente"); |
|
$allInviti->bindValue(":tipo",$elencoFiltro[0]); |
|
$allInviti->bindValue(":elenco",$elencoFiltro[1]); |
|
} |
|
} |
|
if (empty($allInviti)) { $allInviti = $this->db->prepare("SELECT codice, data_invito FROM b_inviti WHERE codice_fiscale_operatore = :cf AND codice_ente = :codice_ente"); } |
|
$allInviti->bindValue(":codice_ente",$codice_ente); |
|
foreach($operatori AS $operatore) { |
|
$allInviti->bindValue(":cf",$operatore["codice_fiscale_impresa"]); |
|
$allInviti->execute(); |
|
$return[$operatore["codice"]]["generali"] = 0; |
|
$return[$operatore["codice"]]["anno"] = 0; |
|
if ($allInviti->rowCount() > 0) { |
|
$inviti = $allInviti->fetchALL(PDO::FETCH_ASSOC); |
|
foreach($inviti AS $invito) { |
|
$count = true; |
|
if (!empty($this->conteggio_rotazione)) { |
|
$join->bindValue(":codice",$invito["codice"]); |
|
$count = false; |
|
if (strpos($this->conteggio_rotazione,"cpv") === 0) { |
|
$length = explode("_",$this->conteggio_rotazione); |
|
$length = $length[1]; |
|
if (!empty($this->categorie)) { |
|
foreach($this->categorie as $codice) { |
|
if (!empty($codice)) { |
|
$codice = substr($codice,0,$length); |
|
$join->bindValue(":cpv",$codice."%"); |
|
$join->execute(); |
|
if ($join->rowCount() > 0) { |
|
$count = true; |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
} else if (strpos($this->conteggio_rotazione,"soa") === 0) { |
|
if (!empty($this->soa)) { |
|
foreach($this->soa AS $soa) { |
|
if (!empty($soa["codice_categoria"])) { |
|
$join->bindValue(":categoria",$soa["codice_categoria"]); |
|
if ($this->conteggio_rotazione != "soa") { |
|
$error = true; |
|
if (!empty($soa["codice_classifica"])) { |
|
$error = false; |
|
$join->bindValue(":classifica",$soa["codice_classifica"]); |
|
} |
|
} |
|
if (!$error) { |
|
$join->execute(); |
|
if ($join->rowCount() > 0) { |
|
$count = true; |
|
break; |
|
} |
|
} |
|
} else { |
|
$error = true; |
|
} |
|
} |
|
} |
|
} else if ($this->conteggio_rotazione == "servizi_tecnici" && !empty($this->servizi_tecnici)) { |
|
foreach($this->servizi_tecnici AS $categoria) { |
|
if (!empty($categoria)) { |
|
$join->bindValue(":categoria",$categoria); |
|
$join->execute(); |
|
if ($join->rowCount() > 0) { |
|
$count = true; |
|
break; |
|
} |
|
} else { |
|
$error = true; |
|
break; |
|
} |
|
} |
|
} |
|
if ($error) { |
|
break(2); |
|
} |
|
} |
|
if ($count) { |
|
$return[$operatore["codice"]]["generali"] += 1; |
|
if (substr($invito["data_invito"],0,4) == date("Y")) { $return[$operatore["codice"]]["anno"] += 1; } |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if ($error) { |
|
foreach($operatori AS $operatore) { |
|
$return[$operatore["codice"]]["generali"] = "n/a"; |
|
$return[$operatore["codice"]]["anno"] = "n/a"; |
|
} |
|
} |
|
return $return; |
|
} |
|
|
|
public function exportInfo($codici_fornitore,$codice_ente,$ignore_allegati = false,$withForm = true) { |
|
if (!is_array($codici_fornitore)) { $codici_fornitore = [$codici_fornitore]; } |
|
if (!empty($codici_fornitore)) { |
|
$keys = ["codice","stato_legale","codice_fiscale_impresa","partita_iva","ragione_sociale","pec"]; |
|
$aziende = oeManager::getOE($codici_fornitore); |
|
$relazioni = $this->getOERelations($codice_ente); |
|
if(!empty($aziende)) { |
|
$cpvs = self::getCpvs($codici_fornitore); |
|
$fatturatiSoa = self::getFatturatiSOA($codici_fornitore); |
|
$soaFornitore = self::getSOA($codici_fornitore); |
|
$servizi_tecniciFornitore = self::getServiziTecnici($codici_fornitore); |
|
ini_set("memory_limit", "999M"); |
|
ini_set("max_execution_time", "999"); |
|
$return = []; |
|
$allegati = []; |
|
$forms = self::getStandardForms("ALL", $codice_ente); |
|
$forms = array_unique($forms); |
|
foreach($aziende AS $codice => $azienda) { |
|
$fornitore = []; |
|
foreach($keys AS $key) { |
|
$fornitore[$key] = $azienda[$key] ?? ""; |
|
} |
|
$fornitore["inviti"] = $relazioni[$codice]["inviti"] ?? "n.a."; |
|
$fornitore["feedback"] = $relazioni[$codice]["feedback"] ?? "n.a."; |
|
$fornitore["categorie"] = $cpvs[$codice] ?? []; |
|
$fornitore["soa"] = $soaFornitore[$codice] ?? []; |
|
$fornitore["fatturatiLavori"] = $fatturatiSoa[$codice] ?? []; |
|
$fornitore["serviziTecnici"] = $servizi_tecniciFornitore[$codice] ?? []; |
|
|
|
if (count($forms) > 0 && $withForm) { |
|
$fornitore["forms"] = []; |
|
foreach($forms AS $tmp) { |
|
$tmp = FormManager::getInfoFromID($tmp,$codice_ente); |
|
if (!empty($tmp)) { |
|
$form["codice"] = $tmp["codice"]; |
|
$form["titolo"] = json_decode($tmp["titolo"]); |
|
$form["descrizione"] = json_decode($tmp["descrizione"]); |
|
$compilazione = new FormManager(); |
|
$compilazione->init($form["codice"],"oe",$azienda["codice"]); |
|
$data = $compilazione->getValues(); |
|
$form["data"] = []; |
|
if (!empty($data)) { |
|
$gruppi = []; |
|
foreach($data AS $gruppo_compilazione => $inputs) { |
|
foreach($inputs AS $valore) { |
|
$gruppo = []; |
|
$inputInfo = $compilazione->getInputInfo($valore["codice"]); |
|
if (!empty($inputInfo)) { |
|
$gruppo["codice"] = $inputInfo["gruppo"]["codice"]; |
|
if (empty($gruppi[$gruppo["codice"]])) { |
|
$gruppo["titolo"] = json_decode($inputInfo["gruppo"]["titolo"]); |
|
$gruppo["descrizione"] = json_decode($inputInfo["gruppo"]["descrizione"]); |
|
$gruppi[$gruppo["codice"]] = $gruppo; |
|
} |
|
$gruppo = $gruppi[$gruppo["codice"]]; |
|
$input["codice"] = $inputInfo["input"]["codice"]; |
|
if (empty($gruppo["data"][$input["codice"]])) { |
|
$input["titolo"] = json_decode($inputInfo["input"]["titolo"]); |
|
$input["descrizione"] = json_decode($inputInfo["input"]["descrizione"]); |
|
$input["tipo"] = $inputInfo["input"]["tipo"]; |
|
$gruppo["inputs"][$input["codice"]]["info"] = $input; |
|
$gruppo["inputs"][$input["codice"]]["data"] = []; |
|
} |
|
$data = $gruppo["inputs"][$input["codice"]]["data"]; |
|
if ($inputInfo["input"]["tipo"] == "file" && !$ignore_allegati) { |
|
$tmp = json_decode($valore["value"],true); |
|
$valore["value"] = []; |
|
if (!empty($tmp)) { |
|
$file = filesManager::fileInfo($tmp["codice"],$tmp["filename"],$azienda["codice"],"form-oe",true); |
|
if (!empty($file)) { |
|
$file["path"] = "{$azienda["codice"]}/$gruppo_compilazione/{$valore["codice"]}/{$file["name"]}"; |
|
$allegati[] = ["path"=>$file["path"],"content"=>$file["content"]]; |
|
unset($file["content"]); |
|
$valore["value"] = $file; |
|
} |
|
} |
|
} |
|
$data[$gruppo_compilazione] = $valore["value"]; |
|
$gruppo["inputs"][$input["codice"]]["data"] = $data; |
|
$gruppi[$gruppo["codice"]] = $gruppo; |
|
} |
|
} |
|
} |
|
$form["data"] = $gruppi; |
|
} |
|
$fornitore["forms"][] = $form; |
|
} |
|
} |
|
} |
|
$return[] = $fornitore; |
|
} |
|
if (!empty($return)) { |
|
return ["data"=>$return,"allegati"=>$allegati]; |
|
} |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public static function exportCSV($alloperatori, $extended = false) |
|
{ |
|
if($alloperatori){ |
|
global $pdo; |
|
|
|
|
|
$manager = new oeManager; |
|
$manager->countInviti = true; |
|
$manager->countAggiudicato = true; |
|
$ooee = $manager->exportInfo($alloperatori,$_SESSION["ente"]->codice,true,!empty($extended)); |
|
|
|
$keys = [ |
|
"codice", |
|
"stato_legale", |
|
"codice_fiscale_impresa", |
|
"partita_iva", |
|
"ragione_sociale", |
|
"pec", |
|
"inviti", |
|
"feedback", |
|
"categorie", |
|
"soa", |
|
"indirizzo_legale", |
|
"citta_legale", |
|
"provincia_legale", |
|
"regione_legale", |
|
"stato_legale", |
|
"indirizzo_operativa", |
|
"citta_operativa", |
|
"provincia_operativa", |
|
"regione_operativa", |
|
"stato_operativa" |
|
]; |
|
|
|
if (!empty($extended)) { |
|
$keysForm = []; |
|
$keysValues = []; |
|
foreach($ooee["data"] AS $oe) { |
|
foreach($oe["forms"] AS $form) { |
|
if (!empty($form["data"])) { |
|
foreach($form["data"] AS $group => $data) { |
|
if (!empty($data["inputs"])) { |
|
foreach($data["inputs"] AS $input => $info) { |
|
if (!empty($info["info"])) { |
|
if (!isset($keysForm[$info["info"]["codice"]])) { |
|
$keysForm[$info["info"]["codice"]] = $data["titolo"]->IT . " - ". $info["info"]["titolo"]->IT; |
|
} |
|
if (!isset($keysValues[$oe["codice"]])) { |
|
$keysValues[$oe["codice"]] = []; |
|
} |
|
if (is_array($info["data"])) { |
|
$keysValues[$oe["codice"]][$info["info"]["codice"]] = reset($info["data"]); |
|
if (is_array($keysValues[$oe["codice"]][$info["info"]["codice"]])) { |
|
$keysValues[$oe["codice"]][$info["info"]["codice"]] = implode("/",$keysValues[$oe["codice"]][$info["info"]["codice"]]); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
$data = []; |
|
$row = []; |
|
foreach($keys AS $key) { |
|
$row[] = $key; |
|
} |
|
if (!empty($extended)) { |
|
foreach($keysForm AS $key) { |
|
$row[] = $key; |
|
} |
|
$keysIDS = array_keys($keysForm); |
|
} |
|
|
|
$data[] = $row; |
|
$risSoa = $pdo->prepare("SELECT id FROM b_categorie_soa WHERE codice = :codice"); |
|
$risClassifica = $pdo->prepare("SELECT id FROM b_classifiche_soa WHERE codice = :codice"); |
|
$risLegale = $pdo->prepare("SELECT valore FROM b_form_data WHERE type='oe' AND id = :id AND codice_input = 3 AND soft_delete = 'N'"); |
|
$risOperativa = $pdo->prepare("SELECT valore FROM b_form_data WHERE type='oe' AND id = :id AND codice_input = 6 AND soft_delete = 'N'"); |
|
|
|
foreach($ooee["data"] AS $oe) { |
|
$row = []; |
|
$legale = null; |
|
$operativa = null; |
|
$risLegale->execute([":id"=>$oe["codice"]]); |
|
if ($risLegale->rowCount() > 0) { |
|
$legale = json_decode($risLegale->fetch(PDO::FETCH_COLUMN) ?? "",true); |
|
} |
|
$risOperativa->execute([":id"=>$oe["codice"]]); |
|
if ($risOperativa->rowCount() > 0) { |
|
$operativa = json_decode($risOperativa->fetch(PDO::FETCH_COLUMN) ?? "",true); |
|
} |
|
foreach($keys AS $key) { |
|
if ($key == "soa") { |
|
if (!empty($oe[$key])) { |
|
$soa = []; |
|
foreach($oe[$key] AS $cat) { |
|
if ($risSoa->execute([":codice"=>$cat["codice_categoria"]])) { |
|
$categoria = $risSoa->fetch(PDO::FETCH_COLUMN); |
|
if ($risClassifica->execute([":codice"=>$cat["codice_classifica"]])) { |
|
$classifica = $risClassifica->fetch(PDO::FETCH_COLUMN); |
|
$soa[] = $categoria . "-" . $classifica; |
|
} |
|
} |
|
} |
|
$row[] = implode("/",$soa); |
|
} else { |
|
$row[] = ""; |
|
} |
|
} else if (strpos($key,"_legale") !== false) { |
|
$key = str_replace("_legale","",$key); |
|
$row[] = $legale[$key] ?? ""; |
|
} else if (strpos($key,"_operativa") !== false) { |
|
$key = str_replace("_operativa","",$key); |
|
$row[] = $operativa[$key] ?? ""; |
|
} else { |
|
$row[] = (is_array($oe[$key])) ? implode("/",$oe[$key]) : ($oe[$key] ?? ""); |
|
} |
|
} |
|
if (!empty($keysIDS)) { |
|
foreach($keysIDS AS $id) { |
|
$row[] = $keysValues[$oe["codice"]][$id] ?? ""; |
|
} |
|
} |
|
$data[] = $row; |
|
} |
|
|
|
return $data; |
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
public function __construct() { |
|
global $pdo; |
|
$this->db = $pdo; |
|
$this->estesa = "N"; |
|
$this->countInviti = false; |
|
$this->countAggiudicato = false; |
|
$this->ambito_rotazione = "elenco"; |
|
$this->operatoriSorteggio = null; |
|
} |
|
}
|
|
|