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.
 
 
 
 
 

308 righe
12 KiB

<?
class publicStipula extends stipula {
public $codice_firmatario;
private function __construct() {
global $pdo;
$this->db = $pdo;
$this->codice_gestore = $_SESSION["ente"]->codice;
}
public static function init($codice) {
if (!empty($codice) && !empty($_SESSION["ente"])) {
$check = self::getList(["b_contratti.codice"=>$codice]);
if (!empty($check) && count($check) == 1) {
global $pdo;
$bind = [":codice"=>$codice,":codice_gestore"=>$_SESSION["ente"]->codice];
$sql = "SELECT * FROM b_contratti WHERE codice = :codice AND codice_gestore = :codice_gestore";
$contratto = $pdo->go($sql,$bind)->fetch(PDO::FETCH_ASSOC);
if (!empty($contratto)) {
$bind[":codice"] = $_SESSION["utente"]->oe["codice"];
$bind[":contratto"] = $codice;
$sql = "SELECT b_contraenti.codice FROM b_contraenti JOIN r_contraenti ON b_contraenti.codice = r_contraenti.codice_contraente WHERE b_contraenti.codice_gestore = :codice_gestore AND b_contraenti.codice_operatore = :codice AND r_contraenti.codice_contratto = :contratto";
$codice_firmatario = $pdo->go($sql,$bind)->fetch(PDO::FETCH_ASSOC)["codice"];
if (!empty($codice_firmatario)) {
$instance = new publicStipula();
$instance->info = $contratto;
$instance->codice_firmatario = $codice_firmatario;
return $instance;
}
}
}
return false;
}
}
public static function getList($filters=[],$order=["b_contratti.id"=>"DESC"],$start=0,$length=1) {
global $pdo;
$bind = [ ":codice_gestore"=>$_SESSION["ente"]->codice, ":operatore"=>$_SESSION["utente"]->oe["codice"]];
$select = "SELECT b_contratti.* ";
$from = " FROM b_contratti
JOIN r_contraenti ON b_contratti.codice = r_contraenti.codice_contratto
JOIN b_contraenti ON r_contraenti.codice_contraente = b_contraenti.codice ";
$bind[':stato'] = '20';
$where = " WHERE b_contratti.codice_gestore = :codice_gestore AND b_contraenti.codice_operatore = :operatore AND b_contratti.stato >= :stato ";
if ($_SESSION['ente']->hasModulo('contratti.documentale')) {
$bind[':stato'] = '15';
// $bind[':codice_oe'] = $_SESSION['utente']->oe['codice'];
if (!empty($filters['b_contratti.stato']['richiesta_documentale']) ) {
$from .= "JOIN r_contratto_richiesta ON b_contratti.codice = r_contratto_richiesta.codice_contratto
JOIN b_contratti_richiesta_documentale ON r_contratto_richiesta.codice_richiesta = b_contratti_richiesta_documentale.codice";
}else {
$from .= "LEFT JOIN r_contratto_richiesta ON b_contratti.codice = r_contratto_richiesta.codice_contratto
LEFT JOIN b_contratti_richiesta_documentale ON r_contratto_richiesta.codice_richiesta = b_contratti_richiesta_documentale.codice";
}
// $where .= " AND b_contratti_richiesta_documentale.bozza = 'N ";
}
if (!empty($filters)) {
$keys = ["b_contratti.id","b_contratti.oggetto","b_contratti.cig"];
$addWhere = [];
foreach($keys AS $key) {
if (isset($filters[$key]) || isset($filters["*"])) {
$value = $filters[$key] ?? $filters["*"];
$sudd = suddivisione_pdo($value,$key);
if (!empty($sudd)) {
$bind = $bind + $sudd["bind"];
$addWhere[] = $sudd["sql"];
}
}
}
if (count($addWhere) > 0) {
$where .= " AND (" . implode(" OR ",$addWhere) . ") ";
}
if (!empty($filters["b_contratti.stato"])) {
$stato = $filters["b_contratti.stato"];
if ($stato == "attesa") {
$bind[":operatore"] = $_SESSION["utente"]->oe["codice"];
$from .= " JOIN b_contratti_sottoscritti ON b_contratti_sottoscritti.codice_contratto = b_contratti.codice AND b_contratti_sottoscritti.codice_firmatario = b_contraenti.codice ";
$where .= " AND b_contratti_sottoscritti.md5 IS NULL ";
}else if ($stato == "richiesta_documentale") {
// VEDERE QUI
// trova i codici delle richieste con risposte in stato 20-25-30
$subquery = "SELECT codice_richiesta
FROM b_contratti_risposta_documentale
WHERE ( b_contratti_risposta_documentale.stato = '20' || b_contratti_risposta_documentale.stato = '25' || b_contratti_risposta_documentale.stato = '30' )
AND codice IN (
SELECT MAX(codice) as codice
FROM b_contratti_risposta_documentale
GROUP BY codice_richiesta, codice_soggetto_oe
)";
$richiesteWithRisposta = $pdo->go($subquery)->fetchAll(PDO::FETCH_COLUMN);
$subquery = "SELECT r_contratto_richiesta.codice_richiesta
FROM r_contratto_richiesta
JOIN b_contratti_richiesta_documentale ON r_contratto_richiesta.codice_richiesta = b_contratti_richiesta_documentale.codice
LEFT JOIN b_contratti_risposta_documentale ON r_contratto_richiesta.codice_richiesta = b_contratti_risposta_documentale.codice_richiesta
WHERE b_contratti_richiesta_documentale.soft_delete = 'N'
AND b_contratti_risposta_documentale.codice IS NULL
AND b_contratti_risposta_documentale.bozza = 'N' ";
$richiesteWithoutRisposta = $pdo->go($subquery)->fetchAll(PDO::FETCH_COLUMN);
$codiciRichieste = array_merge($richiesteWithRisposta, $richiesteWithoutRisposta);
$codiciRichieste = implode(",", $codiciRichieste);
$where .= " AND r_contratto_richiesta.codice_richiesta IN ($codiciRichieste) AND b_contratti_richiesta_documentale.soft_delete = 'N' ";
}else if ($stato == "archivio") {
$where .= " AND ( b_contratti.stato >= 30 OR b_contratti.data_fine < CURDATE() ) ";
}
}
if (isset($filters["b_contratti.codice"])) {
$bind[":codice"] = (int)$filters["b_contratti.codice"];
$where .= " AND b_contratti.codice = :codice ";
}
}
$sort = " ORDER BY b_contratti.id DESC ";
if (!empty($order)) {
$keys = ["b_contratti.id","b_contratti.oggetto","b_contratti.data_inizio","b_contratti.data_fine","b_contratti.data_stipula"];
$sortArray = [];
foreach($keys AS $key) {
if (isset($order[$key])) {
if (strcmp($order[$key],"ASC") === 0) {
$sortArray[] = "{$key} ASC";
} else {
$sortArray[] = "{$key} DESC";
}
}
}
if (count($sortArray) > 0) {
$sort = " ORDER BY " . implode(",",$sortArray);
}
}
$limit = "";
if (is_numeric($start) && is_numeric($length) && $length > 0) {
$start = (int)$start;
$length = (int)$length;
$limit = " LIMIT {$start}, {$length}";
}
$where .= "GROUP BY b_contratti.codice";
$result = $pdo->go($select.$from.$where.$sort.$limit,$bind)->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
public function getContrattoSottoscrivere() {
$sottoscrizioni = parent::getContrattoSottoscritto();
if (!empty($sottoscrizioni)) {
$previous = "";
foreach($sottoscrizioni AS $codice_firmatario => $sottoscrizione) {
if ($codice_firmatario == $this->codice_firmatario) { break; }
if (!empty($sottoscrizione["md5"])) { $previous = $codice_firmatario; }
}
if ($previous !== "") {
return parent::getContrattoSottoscritto(true, $previous);
}
}
return false;
}
public function canUpload() {
if ($this->info["stato"] != 20) { return false; }
$check = $this->db->go("SELECT codice FROM b_contratti_sottoscritti WHERE codice_contratto = :codice_contratto AND codice >
(SELECT codice FROM b_contratti_sottoscritti WHERE codice_contratto = :codice_contratto AND codice_firmatario = :codice_firmatario) ",
[":codice_contratto"=>$this->info["codice"],":codice_firmatario"=>$this->codice_firmatario]);
if ($check->rowCount() > 0) { return false; }
return true;
}
public function getRichiesteIntegrazione() {
$manager = new publicRichiesteOE("contratti",$this->info["codice"]);
if (!empty($manager)) {
return $manager->getRichieste();
}
}
/**
* Questa funzione riporta i codici dei soggetti abbinati al contratto
* e i codici dei ruoli associati
*/
public static function getSoggettiAssociati($codice_contratto, $codice_oe = null)
{
global $pdo;
$sql = "SELECT r_contratto_b_soggetto_oe.codice_soggetto_oe, r_contratto_b_soggetto_oe_ruolo.codice_ruolo
FROM r_contratto_b_soggetto_oe
JOIN r_contratto_b_soggetto_oe_ruolo ON r_contratto_b_soggetto_oe.codice = r_contratto_b_soggetto_oe_ruolo.codice_r_contratto_b_soggetti_oe
WHERE codice_contratto = :codice_contratto ";
$bind[':codice_contratto'] = $codice_contratto;
if(!empty($codice_oe)){
$sql .= " AND codice_oe = :codice_oe ";
$bind[':codice_oe'] = $codice_oe;
}
$ris = $pdo->go($sql, $bind);
$codiciSoggetti = $ris->fetchAll(PDO::FETCH_ASSOC) ?? [];
// abbina ad ogni codice soggetto, i codici ruoli
if(!empty($codiciSoggetti)){
$ids = [];
$tmpIds = implode(',',array_values(array_unique(pluck('codice_soggetto_oe', $codiciSoggetti))));
// controlla se il soggetto_oe è stato eliminato
if(!empty($tmpIds)){
$sql = "SELECT codice FROM b_soggetti_oe WHERE codice IN ($tmpIds) AND soft_delete = 'N' ";
$ids = $pdo->go($sql)->fetchAll(PDO::FETCH_COLUMN);
}
$return = [];
foreach($ids as $key => $value){
foreach($codiciSoggetti as $key2 => $cSoggetto){
if($value == $cSoggetto['codice_soggetto_oe']){
$return[$key]['codice_soggetto'] = $value;
$return[$key]['ruoli'][] = $cSoggetto['codice_ruolo'];
}
}
}
return $return;
}
return [];
}
public static function getCountBadge()
{
global $pdo;
$badge = 0;
$sql = "SELECT b_contratti_richiesta_documentale.codice
FROM b_contratti_richiesta_documentale
JOIN r_contratto_richiesta ON b_contratti_richiesta_documentale.codice = r_contratto_richiesta.codice_richiesta
WHERE b_contratti_richiesta_documentale.soft_delete = 'N'
AND b_contratti_richiesta_documentale.codice_oe = :codice_oe ";
$bind[':codice_oe'] = $_SESSION['utente']->oe['codice'];
$richieste = $pdo->go($sql,$bind)->fetchAll(PDO::FETCH_COLUMN);
if(!empty($richieste)){
$codiciRichieste = implode(',',array_unique($richieste));
$risposte = $pdo->prepare("SELECT codice, codice_richiesta, stato
FROM b_contratti_risposta_documentale
WHERE codice IN (
SELECT MAX(codice) AS codice
FROM b_contratti_risposta_documentale
WHERE codice_richiesta IN ($codiciRichieste)
GROUP BY codice_richiesta, codice_soggetto_oe
)");
$risposte->execute();
$risposte = $risposte->fetchAll(PDO::FETCH_ASSOC);
$codiciInRisposte = pluck('codice_richiesta', $risposte);
if (!empty($risposte)) {
foreach (array_unique($richieste) as $richiesta) {
if(in_array($richiesta, $codiciInRisposte)){
foreach ($risposte as $key2 => $risposta) {
if($risposta['codice_richiesta'] == $richiesta ){
if($risposta['stato'] == '20' || $risposta['stato'] == '25' || $risposta['stato'] == '30'){
$badge += 1;
}
}
}
}else{
$badge += 1;
}
}
}else{
$badge = count($richieste);
}
}
return $badge;
}
}
?>