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