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
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); |
|
} |
|
} |
|
} |
|
?>
|