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.
 
 
 
 
 

275 righe
10 KiB

<?
class Compilatore {
public $info;
private $db;
public $opzioni;
public $modalita;
public $importo;
public $criterio;
public $edit;
public $soa;
public static function listModelli() {
global $pdo;
return $pdo->go("SELECT * FROM b_compilatore WHERE soft_delete = 'N'")->fetchAll(PDO::FETCH_ASSOC);
}
public static function getModelli($tipologia,$procedura,$importo,$categorie) {
global $pdo;
$return = [];
$sql = "SELECT * FROM b_compilatore WHERE soft_delete = 'N' AND tipo = :tipologia AND procedura = :procedura AND
(importo_minimo = 0 OR importo_minimo <= :importo) AND (importo_massimo = 0 OR importo_massimo >= :importo)";
if ($_SESSION["utente"]->gerarchia > 5) {
$sql .= " AND attivo = 'S' ";
}
$bind = [];
$bind[":tipologia"] = $tipologia;
$bind[":procedura"] = $procedura;
$bind[":importo"] = $importo;
$modelli = $pdo->go($sql,$bind);
if ($modelli->rowCount() > 0) {
$checkCPV = $pdo->prepare("SELECT codice FROM r_cpv_compilatore WHERE codice_modello = :modello");
while($modello = $modelli->fetch(PDO::FETCH_ASSOC)) {
$checkCPV->bindValue(":modello",$modello["codice"]);
$checkCPV->execute();
if ($checkCPV->rowCount() > 0) {
while($cpv = $checkCPV->fetch(PDO::FETCH_COLUMN)) {
foreach($categorie AS $categoria) {
if (strpos($categoria,$cpv) === 0) {
$return[] = $modello;
break(2);
}
}
}
} else {
$return[] = $modello;
}
}
}
return $return;
}
public static function getCategorieMerceologiche($codice) {
global $pdo;
$codici_categoria = [];
$sql_categoria = "SELECT codice FROM r_cpv_compilatore WHERE codice_modello = :codice ";
$ris_custom = $pdo->go($sql_categoria, array(":codice" => $codice));
if ($ris_custom->rowCount() > 0) {
while ($categoria = $ris_custom->fetch(PDO::FETCH_ASSOC)) {
if (!empty($categoria)) {
$codici_categoria[] = $categoria["codice"];
}
}
}
$codici_categoria = array_unique($codici_categoria);
return $codici_categoria;
}
public static function vincoliSoa() {
return [
0 => "Nessuno",
1 => "S.I.O.S. > 15%",
12 => "S.I.O.S. Assenti",
2 => "S.I.O.S. che cambiano classe - 30%",
3 => "S.I.O.S. che non cambiano classe - 30%",
4 => "(T.A. - 70% S.I.O.S.) > 20.658.000 ",
5 => "(T.A. - 70% S.I.O.S.) < 20.658.000 ",
6 => "Scorporabili a Q.O. <> S.I.O.S.",
7 => "Scorporabili non a Q.O.",
8 => "OG2 - OS2-A - OS2-B - OS25",
13 => "Tutelate assenti",
9 => "OG11 o OS3 - OS28 - OS30",
10 => "Categorie Scorporabili Assenti",
11 => "Categorie Scorporabili Presenti"
];
}
public static function listOpzioni() {
global $pdo;
return $pdo->go("SELECT * FROM b_compilatore_gruppi_opzioni WHERE soft_delete = 'N'")->fetchAll(PDO::FETCH_ASSOC);
}
public static function getOpzione($codice,$attive = true) {
global $pdo;
$sqlAttive = "";
if ($attive) {
$sqlAttive = " AND attivo = 'S' ";
}
$return = $pdo->go("SELECT * FROM b_compilatore_gruppi_opzioni WHERE soft_delete = 'N' AND codice = :codice {$sqlAttive}",[":codice"=>$codice])->fetch(PDO::FETCH_ASSOC);
if (!empty($return)) {
$return["opzioni"] = $pdo->go("SELECT * FROM b_compilatore_opzioni WHERE soft_delete = 'N' AND codice_gruppo = :codice {$sqlAttive}",[":codice"=>$codice])->fetchAll(PDO::FETCH_ASSOC);
return $return;
}
}
public static function listRicorsivi() {
global $pdo;
return $pdo->go("SELECT * FROM b_compilatore_paragrafi_ricorsivi WHERE soft_delete = 'N'")->fetchAll(PDO::FETCH_ASSOC);
}
public static function getRicorsivo($codice) {
global $pdo;
return $pdo->go("SELECT * FROM b_compilatore_paragrafi_ricorsivi WHERE soft_delete = 'N' AND codice = :codice",[":codice"=>$codice])->fetch(PDO::FETCH_ASSOC);
}
private function __construct()
{
$this->opzioni = null;
$this->edit = false;
$this->modalita = null;
$this->criterio = null;
$this->importo = null;
$this->importo = null;
}
public static function init($codice) {
global $pdo;
$info = $pdo->go("SELECT * FROM b_compilatore WHERE codice = :codice AND soft_delete = 'N'",[":codice"=>$codice])->fetch(PDO::FETCH_ASSOC);
$instance = new Compilatore;
$instance->info = $info;
$instance->db = $pdo;
return $instance;
}
public function getOpzioni() {
$bind = [":modello"=>$this->info["codice"]];
$bind[":modalita"] = $this->modalita;
$sqlCriterio = "";
$sqlSOA = "";
$sqlImporto = "";
if (!empty($this->criterio)) {
$bind[":criterio"] = $this->criterio;
$sqlCriterio = " AND (criterio = '' OR criterio IS NULL OR criterio = :criterio)";
}
if (!empty($this->soa)) {
$vincoliSOA = [];
foreach($this->soa AS $vincolo) {
$vincoliSOA[] = (int)$vincolo;
}
if (!empty($vincoliSOA)) {
$vincoliSOA = implode(",",$vincoliSOA);
$sqlSOA = " AND (soa = '0' OR soa IS NULL OR soa IN ({$vincoliSOA}))";
}
}
if (!empty($this->importo)) {
$bind[":importo"] = $this->importo;
$sqlImporto = " AND (importo_minimo = '0' OR importo_minimo <= :importo) AND (importo_massimo = '0' OR importo_massimo >= :importo) ";
}
$sql = "SELECT codice FROM b_compilatore_gruppi_opzioni WHERE b_compilatore_gruppi_opzioni.codice IN (
SELECT codice_gruppo FROM b_compilatore_opzioni WHERE codice IN (
SELECT opzione FROM b_compilatore_paragrafi
WHERE codice_modello = :modello AND opzione > 0 AND attivo = 'S' AND soft_delete = 'N'
AND (modalita = '' OR modalita IS NULL OR modalita = :modalita)
{$sqlCriterio}
{$sqlSOA}
{$sqlImporto}
)
)";
return $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_COLUMN);
}
public function paragrafi($codice = null) {
$paragrafi = [];
$bind = [":modello"=>$this->info["codice"]];
$sql = "SELECT b_compilatore_paragrafi.* FROM b_compilatore_paragrafi WHERE b_compilatore_paragrafi.codice_modello = :modello AND b_compilatore_paragrafi.soft_delete = 'N' ";
if (empty($this->edit)) {
$sql .= " AND b_compilatore_paragrafi.attivo = 'S' ";
}
if (!empty($codice)) {
$sql .= " AND b_compilatore_paragrafi.codice = :codice ";
$bind[":codice"] = $codice;
} else {
if (!empty($this->modalita)) {
$bind[":modalita"] = $this->modalita;
$sql .= " AND (modalita = '' OR modalita IS NULL OR modalita = :modalita) ";
}
if (!empty($this->criterio)) {
$bind[":criterio"] = $this->criterio;
$sql .= " AND (criterio = '' OR criterio IS NULL OR criterio = :criterio) ";
}
if (!empty($this->soa)) {
$vincoliSOA = [];
foreach($this->soa AS $vincolo) {
$vincoliSOA[] = (int)$vincolo;
}
if (!empty($vincoliSOA)) {
$vincoliSOA = implode(",",$vincoliSOA);
$sql .= " AND (soa = '0' OR soa IS NULL OR soa IN ({$vincoliSOA})) ";
}
}
if (!empty($this->importo)) {
$bind[":importo"] = $this->importo;
$sql .= " AND (importo_minimo = '0' OR importo_minimo <= :importo) AND (importo_massimo = '0' OR importo_massimo >= :importo) ";
}
}
$sql .= " ORDER BY b_compilatore_paragrafi.ordinamento ASC ";
$tmp = $this->db->go($sql,$bind)->fetchAll(PDO::FETCH_ASSOC);
if (!empty($this->opzioni)) {
$return = [];
foreach($tmp AS $paragrafo) {
if (empty($paragrafo["opzione"]) || in_array($paragrafo["opzione"],$this->opzioni) !== false) {
$return[] = $paragrafo;
}
}
} else {
$return = $tmp;
}
return $return;
}
public function getCorpo() {
$paragrafi = $this->paragrafi();
$corpo = "";
foreach($paragrafi AS $paragrafo) {
if ($paragrafo["tipo"] == "ricorsivo") {
$corpo .= "<br>" . ($this->getRicorsivo($paragrafo["avanzato"])["contenuto"] ?? "");
} else if ($paragrafo["tipo"] == "paragrafo") {
$corpo .= "<br>" . ($paragrafo["contenuto"] ?? false);
}
}
return $corpo;
}
public function getOrdinamento($riferimento) {
$riferimento = $this->paragrafi($riferimento);
if (!empty($riferimento)) {
$riferimento = end($riferimento);
return $riferimento["ordinamento"] + 1;
}
return 0;
}
public function updateOrdinamento($ordinamento,$codice) {
$this->db->go("UPDATE b_compilatore_paragrafi SET ordinamento = (ordinamento + 1) WHERE ordinamento >= :ordinamento AND codice <> :codice",[":ordinamento"=>$ordinamento,":codice"=>$codice]);
}
public static function saveQuestionario($riferimento,$opzioni) {
if (!empty($_SESSION["utente"]->gerarchia) && $_SESSION["utente"]->gerarchia < 100) {
global $pdo;
$pdo->go("DELETE FROM b_compilatore_opzioni_selezionate WHERE riferimento = :riferimento",[":riferimento"=>$riferimento]);
$insert = $pdo->prepare("INSERT INTO b_compilatore_opzioni_selezionate (riferimento,codice_opzione,utente_modifica) VALUES (:riferimento,:codice_opzione,:utente_modifica)");
$insert->bindValue(":utente_modifica",$_SESSION["utente"]->codice);
$insert->bindValue(":riferimento",$riferimento);
foreach($opzioni AS $gruppo) {
foreach($gruppo AS $opzione) {
$insert->bindValue(":codice_opzione",$opzione);
$insert->execute();
ob_start();
$insert->debugDumpParams();
$log = ob_get_clean();
scriviLog("b_compilatore_opzioni_selezionate","INSERT",$log,$pdo->lastInsertId());
}
}
return true;
}
return false;
}
public static function getQuestionario($riferimento) {
if (!empty($_SESSION["utente"]->gerarchia) && $_SESSION["utente"]->gerarchia < 100) {
global $pdo;
return $pdo->go("SELECT codice_opzione FROM b_compilatore_opzioni_selezionate WHERE riferimento = :riferimento",[":riferimento"=>$riferimento])->fetchAll(PDO::FETCH_COLUMN);
}
}
}
?>