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