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.
 
 
 
 
 

260 righe
7.5 KiB

<?
class contrattoDocumentale {
public $info;
protected $db;
public $codice_ente;
private function __construct() {
global $pdo;
$this->db = $pdo;
$this->codice_ente = $_SESSION["ente"]->codice ?? 0;
}
public static function getInfo($codice)
{
$instance = new ContrattoDocumentale();
$instance->info = self::getAllDocumentali(['codice' => $codice])[0] ?? [];
if (!empty($instance->info['codice'])) {
$instance->info['preavviso'] = self::getPreavvisi($codice);
// se è una classe documentale con soggetto == OE non mostrare i ruoli
if ($instance->info['soggetto'] != '5' ) {
$instance->info['ruoli'] = self::getRuoli($instance->info['codice']);
}
}
return $instance;
}
public static function getAllDocumentali($filters = [])
{
global $pdo;
$sql = "SELECT * FROM b_classe_documentale WHERE (codice_ente = :codice_ente OR codice_ente = 0) AND soft_delete = 'N' ";
$bind = array(":codice_ente" => $_SESSION["ente"]->codice);
if (!empty($filters)) {
if (!empty($filters['codice'])) {
$bind[':codice'] = $filters['codice'];
$sql .= " AND codice = :codice ";
}
if (!empty($filters['titolo'])) {
$bind[':titolo'] = "%{$filters['titolo']}%";
$sql .= " AND titolo LIKE :titolo ";
}
if(!empty($filters['attivo'])){
$bind[':attivo'] = $filters['attivo'];
$sql .= " AND attivo = :attivo ";
}
if(!empty($filters['codici'])){
$ids = arrayIsNumeric($filters['codici']);
$ids = implode(',', $ids);
$sql .= " AND codice IN ($ids) ";
}
if(!empty($filters['not_codici'])){
$ids = arrayIsNumeric($filters['not_codici']);
$ids = implode(',', $ids);
$sql .= " AND codice NOT IN ($ids) ";
}
}
$risultato = $pdo->go($sql,$bind);
if ($risultato->rowCount() > 0 ) {
$record = $risultato->fetchAll(PDO::FETCH_ASSOC);
}
return $record ?? [];
}
public static function getDocumentaleByRuoli($codiceRuoli)
{
global $pdo;
$sql = "SELECT b_classe_documentale.*, r_classe_documentale_ruoli.codice_ruolo
FROM b_classe_documentale
JOIN r_classe_documentale_ruoli ON r_classe_documentale_ruoli.codice_classe_documentale = b_classe_documentale.codice
WHERE (b_classe_documentale.codice_ente = :codice_ente OR b_classe_documentale.codice_ente = 0)
AND b_classe_documentale.soft_delete = 'N' ";
if(!empty($codiceRuoli)){
$ids = arrayIsNumeric($codiceRuoli);
$ids = implode(',', $ids);
$sql .= " AND r_classe_documentale_ruoli.codice_ruolo IN ($ids) ";
}
$sql .= " GROUP BY b_classe_documentale.codice ";
$bind = array(":codice_ente"=>$_SESSION["ente"]->codice);
$risultato = $pdo->go($sql,$bind);
if ($risultato->rowCount() > 0 ) {
$record = $risultato->fetchAll(PDO::FETCH_ASSOC);
}
return $record ?? [];
}
static function getAmbitoValidita()
{
return [
'contratto' => 'Contratto',
'oe' => 'Operatore Economico'
];
}
/**
* nel caso di modifica, guardare rubrica::getElencoSoggettiInteressati
*/
static function getSoggetti($soggetto = null)
{
$soggetti = [
'5' => __('Operatore Economico'),
'10' => __('Dipendente/Incaricato'),
'15' => __('Macchinario/Strumento')
];
if (isset($soggetto)) {
return $soggetti[$soggetto] ?? null;
}else{
return $soggetti;
}
}
static function salvaPreavvisi($codice_classe_documentale, $preavviso = null)
{
global $pdo;
$bind = array(":codice_classe_documentale"=>$codice_classe_documentale);
$sql = "DELETE FROM b_preavvisi WHERE codice_classe_documentale = :codice_classe_documentale ";
$ris = $pdo->go($sql,$bind);
if (!empty($preavviso)) {
$preavviso = explode(',', $preavviso);
$preavviso = array_filter(array_unique($preavviso));
sort($preavviso, SORT_NUMERIC);
}else{
$preavviso = ['1','3','7','15','30'];
}
foreach ($preavviso as $key => $giorni) {
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "b_preavvisi";
$salva->operazione = "INSERT";
$salva->oggetto = ['codice_classe_documentale' => $codice_classe_documentale, 'preavviso' => $giorni, 'timestamp_creazione' => date("d/m/Y H:i:s")];
$salva_preavviso = $salva->save();
if (empty($salva_preavviso)) {
return false;
}
}
return true;
}
public static function getPreavvisi($codice_classe_documentale)
{
global $pdo;
if(!empty(self::getAllDocumentali(['codice' => $codice_classe_documentale]))){
$bind = array(":codice_classe_documentale" => (int)$codice_classe_documentale);
$sql = "SELECT preavviso FROM b_preavvisi WHERE codice_classe_documentale = :codice_classe_documentale";
$ris = $pdo->go($sql, $bind);
if ($ris->rowCount() > 0) {
$giorni = $ris->fetchAll(PDO::FETCH_ASSOC);
return implode(",",array_map('implode',$giorni));
}
}
return [];
}
public static function getRuoli($codice_classe_documentale)
{
global $pdo;
$bind = array(":codice_classe_documentale" => (int)$codice_classe_documentale);
$sql = "SELECT b_ruoli_documentale.*
FROM r_classe_documentale_ruoli
JOIN b_ruoli_documentale ON r_classe_documentale_ruoli.codice_ruolo = b_ruoli_documentale.codice
WHERE r_classe_documentale_ruoli.codice_classe_documentale = :codice_classe_documentale
AND b_ruoli_documentale.soft_delete = 'N' ";
$ris = $pdo->go($sql, $bind);
if ($ris->rowCount() > 0) {
$ruoli = $ris->fetchAll(PDO::FETCH_ASSOC) ;
return $ruoli;
}
return [];
}
public static function checkBeforeDelete($codice)
{
global $pdo;
$bind = array(':codice_classe_documentale' => $codice);
$sql = "SELECT codice_classe_documentale
FROM b_contratti_richiesta_documentale
WHERE codice_classe_documentale = :codice_classe_documentale
AND soft_delete = 'N' ";
$ris = $pdo->go($sql, $bind);
if($ris->rowCount() > 0){
return false;
}
return true;
}
static function salvaRelazioniRuoli($codice_classe_documentale, $ruolo = [])
{
global $pdo;
if (!empty($ruolo)) {
$ruolo = array_unique($ruolo);
$bind = array(":codice_classe_documentale" => $codice_classe_documentale);
$sql = "DELETE FROM r_classe_documentale_ruoli WHERE codice_classe_documentale = :codice_classe_documentale ";
$ris = $pdo->go($sql,$bind);
foreach ($ruolo as $key => $ruolo) {
$salva = new salva();
$salva->debug = false;
$salva->nome_tabella = "r_classe_documentale_ruoli";
$salva->operazione = "INSERT";
$salva->oggetto = ['codice_classe_documentale' => $codice_classe_documentale, 'codice_ruolo' => $ruolo, 'timestamp_creazione' => date("d/m/Y H:i:s")];
$salva = $salva->save();
if (empty($salva)) {
return false;
}
}
return true;
}
return false;
}
}