class PannelloCommissione {
private $db;
public $info;
public $manager;
private function __construct()
{
}
public static function printList($backend = false) {
global $config;
global $pdo;
include __DIR__ . "/views/list.php";
}
public static function getDataTableJSON($get, $backend = false) {
global $pdo;
$return = array();
$return["draw"] = (int)$get["draw"];
$return["recordsTotal"] = (int)0;
$return["recordsFiltered"] = (int)0;
$bind = array();
$bind[":utente"] = $_SESSION["utente"]->codice;
$bind[":ente"] = $_SESSION["ente"]->codice;
$sql = "SELECT b_commissioni.oggetto, b_commissioni.codice, b_commissioni.scadenza, b_commissioni.modulo
FROM b_commissioni
JOIN r_commissione ON b_commissioni.codice = r_commissione.codice_commissione
WHERE r_commissione.codice_utente = :utente AND b_commissioni.scadenza >= now() AND b_commissioni.codice_gestore = :ente ";
$risultati = $pdo->go($sql,$bind);
if ($risultati->rowCount() > 0) {
$return["recordsTotal"] = (int)$risultati->rowCount();
if (!empty($get["search"]["value"])) {
$sql .= " AND ( ";
$suddivisione = suddivisione_pdo($get["search"]["value"],"b_commissioni.oggetto");
$sql .= "OR (" . $suddivisione["sql"] . ") ";
$bind = array_merge($bind,$suddivisione["bind"]);
$sql .= ") ";
}
$order = "b_commissioni.scadenza ";
switch($get["order"][0]["column"]) {
case "1": $order = "b_commissioni.oggetto "; break;
}
if ($get["order"][0]["dir"] == "desc") {
$order.= "DESC ";
} else {
$order.= "ASC ";
}
$sql .= "ORDER BY " . $order . ", b_commissioni.scadenza ASC ";
$risultatiBeforLimit = $pdo->go($sql,$bind);
if ($get["length"] !== "-1") { $sql.= "LIMIT ". (int)$get["start"] .", " . (int)$get["length"]; }
$risultati = $pdo->go($sql,$bind);
if ($risultati->rowCount() > 0) {
if (!empty($get["search"]["value"])) {
$return["recordsFiltered"] = (int)$risultatiBeforLimit->rowCount();
} else {
$return["recordsFiltered"] = $return["recordsTotal"];
}
$return["data"] = array();
while($record = $risultati->fetch(PDO::FETCH_ASSOC)) {
$panelHref = (($backend) ? "/backend" : "") . "/commissione/edit.php?codice={$record["codice"]}";
$row = array();
$row[] = "{$record["oggetto"]}";
$row[] = mysql2datetime($record["scadenza"]);
$row[] = __(Modulo::getInfo($record["modulo"])["titolo"] ?? "Modulo sconosciuto");
$row[] = "";
$return["data"][] = $row;
}
} else {
$return["data"] = array();
}
} else {
$return["error"] = "No record";
}
return $return;
}
public static function getBadge() {
global $pdo;
$badge = 0;
$bind = array(":utente"=>$_SESSION["utente"]->codice,":ente"=>$_SESSION["ente"]->codice);
$sql_badge = "SELECT b_commissioni.codice
FROM b_commissioni
JOIN r_commissione ON b_commissioni.codice = r_commissione.codice_commissione
WHERE r_commissione.codice_utente = :utente AND b_commissioni.scadenza >= now() AND codice_gestore = :ente ";
$ris_badge = $pdo->go($sql_badge,$bind);
$badge += $ris_badge->rowCount();
return $badge;
}
public static function init($codice) {
global $pdo;
$bind = array(":utente"=>$_SESSION["utente"]->codice);
$bind[":codice"] = $codice;
$bind[":ente"] = $_SESSION["ente"]->codice;
$sql = "SELECT b_commissioni.* FROM b_commissioni
JOIN r_commissione ON b_commissioni.codice = r_commissione.codice_commissione
WHERE r_commissione.codice_utente = :utente AND r_commissione.codice_commissione = :codice
AND b_commissioni.scadenza >= now() AND b_commissioni.codice_gestore = :ente ";
$ris = $pdo->go($sql,$bind);
if ($ris->rowCount() > 0) {
$obj = new self();
$obj->info = $ris->fetch(PDO::FETCH_ASSOC);
$obj->manager = new Commissione($obj->info["modulo"],$obj->info["codice_elemento"],"commissione");
$obj->db = $pdo;
return $obj;
}
}
public function printPanel($get) {
if (!empty($this->manager)) {
$object = $this->manager->getObject();
include __DIR__ . "/views/panel.php";
} else {
alertManager::printAlertBox(__("Imposibile accedere"),__("Errore inizializzazione pannello"));
}
}
public function printCoppie($get) {
if (!empty($this->manager)) {
$object = $this->manager->getObject();
include __DIR__ . "/views/coppie.php";
} else {
alertManager::printAlertBox(__("Imposibile accedere"),__("Errore inizializzazione pannello"));
}
}
public function saveValutazione($post) {
$esito = ["error" => true, "msg"=> "", "action" => ""];
$infoCommissione = $this->info;
if (!empty($this->manager)) {
$object = $this->manager->getObject();
if (!empty($object)) {
if (method_exists($object,"setLotto")) {
$continua = false;
if (!empty($post["codice_lotto"]) && $object->setLotto($post["codice_lotto"])) {
$continua = true;
}
} else {
$continua = true;
}
if ($continua) {
$criteri = $object->getCriteriValutabili($post["codice_criterio"] ?? NULL);
$partecipanti = $object->getPartecipanti(null,true);
if (!empty($criteri)) {
$criterio = $criteri[0];
$coppie = true;
$coefficienti = [];
if (count($partecipanti) < 3 || $infoCommissione["modalita"] == "R") { $coppie = false; }
if ($coppie) {
if (!empty($post["valutazione"])) {
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_confronto_coppie";
$salva->operazione = "INSERT";
$delete = $this->db->prepare("DELETE FROM b_confronto_coppie WHERE codice_commissione = :codice_commissione
AND codice_utente = :codice_utente AND codice_criterio = :codice_criterio AND codice_partecipante_1 = :a AND codice_partecipante_2 = :b ");
$delete->bindValue(":codice_commissione",$infoCommissione["codice"]);
$delete->bindValue(":codice_utente",$_SESSION["utente"]->codice);
$delete->bindValue(":codice_criterio",$criterio["codice"]);
foreach($post["valutazione"] AS $operatori => $voti) {
$operatori = explode("_",$operatori);
$voti = explode("_",$voti);
$delete->bindValue(":a",$operatori[0]);
$delete->bindValue(":b",$operatori[1]);
$delete->execute();
$tmp = [];
$tmp["codice_commissione"] = $infoCommissione["codice"];
$tmp["codice_criterio"] = $criterio["codice"];
$tmp["codice_utente"] = $_SESSION["utente"]->codice;
$tmp["codice_partecipante_1"] = $operatori[0];
$tmp["codice_partecipante_2"] = $operatori[1];
$tmp["punteggio_partecipante_1"] = $voti[0];
$tmp["punteggio_partecipante_2"] = $voti[1];
$salva->oggetto = $tmp;
$salva->save();
}
$saved = $this->db->prepare("SELECT codice_partecipante_1, codice_partecipante_2, punteggio_partecipante_1, punteggio_partecipante_2
FROM b_confronto_coppie WHERE codice_commissione = :codice_commissione
AND codice_utente = :codice_utente AND codice_criterio = :codice_criterio ");
$saved->bindValue(":codice_commissione",$infoCommissione["codice"]);
$saved->bindValue(":codice_utente",$_SESSION["utente"]->codice);
$saved->bindValue(":codice_criterio",$criterio["codice"]);
$saved->execute();
if ($saved->rowCount() > 0) {
$somme = [];
$count = [];
$total = count($partecipanti) - 1;
$createCoefficienti = true;
while($valutazione = $saved->fetch(PDO::FETCH_ASSOC)) {
for ($i = 1; $i <= 2; $i++) {
if (!isset($somme[$valutazione["codice_partecipante_".$i]])) {
$somme[$valutazione["codice_partecipante_".$i]] = 0;
$count[$valutazione["codice_partecipante_".$i]] = 0;
}
$count[$valutazione["codice_partecipante_".$i]]++;
$somme[$valutazione["codice_partecipante_".$i]] += $valutazione["punteggio_partecipante_".$i];
}
}
foreach($count AS $valutazioni) {
if ($total != $valutazioni) {
$createCoefficienti = false;
break;
}
}
if ($createCoefficienti) { $coefficienti = tuttogareMath::proporzionale($somme,1,9); }
}
}
} else {
foreach($post["partecipante"] AS $partecipante => $valutazione) {
if (is_numeric($valutazione)) {
$coefficienti[$partecipante] = $valutazione / 10;
}
}
}
$esito["error"] = false;
if (!empty($coefficienti)) {
$codici_partecipanti = array_keys($partecipanti,"codice");
if (!empty($codici_partecipanti)) {
$codici_partecipanti = implode(",",$codici_partecipanti);
$bind = [":codice_commissione"=>$infoCommissione["codice"],":codice_utente"=>$_SESSION["utente"]->codice,":codice_criterio"=>$criterio["codice"]];
$this->db->go("DELETE FROM b_coefficienti_commissari WHERE codice_commissione = :codice_commissione
AND codice_utente = :codice_utente AND codice_criterio = :codice_criterio AND codice_partecipante IN ({$codici_partecipanti})",$bind);
}
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_coefficienti_commissari";
$salva->operazione = "INSERT";
foreach($coefficienti AS $partecipante => $coefficiente) {
$tmp = [];
$tmp["codice_commissione"] = $infoCommissione["codice"];
$tmp["codice_criterio"] = $criterio["codice"];
$tmp["codice_utente"] = $_SESSION["utente"]->codice;
$tmp["codice_partecipante"] = $partecipante;
$tmp["coefficiente"] = $coefficiente;
$salva->oggetto = $tmp;
$salva->save();
}
}
$esito["action"] = ($coppie) ? "window.location.reload();" : "window.location.href='edit.php?codice={$infoCommissione["codice"]}';";
}
}
}
}
return $esito;
}
}
?>