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