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 .= "
" . ($this->getRicorsivo($paragrafo["avanzato"])["contenuto"] ?? ""); } else if ($paragrafo["tipo"] == "paragrafo") { $corpo .= "
" . ($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); } } } ?>