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.
 
 
 

487 righe
16 KiB

<?php
require_once ROOT . "/lib/classes/IDataClass.php";
/**
* Description of Account
*
* @author Gigi
*/
class Account extends DataClass {
const TABLE_NAME = "ACCOUNT";
const SEQ_NAME = "ACCOUNT_ID_SEQ";
public $ID = 0; // PK
public $CODICE_FISCALE = '';
public $USERNAME = '';
public $PASSWORD = '';
public $AUTORIZZAZIONE_TRATTAMENTO = '';
public $CANCELLATO = 0;
public $CanLogIn = false;
public $CountDomande = 0;
/**/
public $IP = null;
public $Anagrafica = null;
public $NucleoFamiliare = null;
public function __construct($src = null) {
global $con;
if ($src == null){
return;
}
if (is_array($src)) {
if (isset($src['ID']) && $src['ID'] > 0) {
$this->_loadAndFillObject($src['ID'], self::TABLE_NAME, $src);
} else {
$this->_loadByRow($src, $stripSlashes);
}
} elseif (intval($src)) {
$this->_loadById($src, self::TABLE_NAME, true);
}
$this->loadDati($src);
}
/*
* Load dati a corredo dell'account (anagrafica, domande ecc.)
*/
public function loadDati($src = array()) {
$this->Anagrafica = $this->loadAccountAnagrafica();
$this->CountDomande = $this->countDomandeAssociate();
$this->CanLogIn = $this->checkAuthPersonale();
$this->NucleoFamiliare = $this->loadNucleoFamiliare();
if (isset($src['IP']) && !empty($src['IP'])) {
$this->IP = $src['IP'];
} else {
$this->IP = Utils::get_IP_address();
}
}
public function loadNucleoFamiliare(){
return AccountNucleoFamiliare::load($this->ID);
}
/**
* Verifica se un determinato codice fiscale appartiene al nucleo familiare del dichiarante
* @param $cf
* @return false
*/
public function isNucleoFamiliare($cf){
$return = false;
$nucleo = AccountNucleoFamiliare::load();
foreach ($nucleo as $persona){
if(trim($cf) == trim($persona['CODICE_FISCALE'])){
$return = true;
return $return;
}
}
return $return;
}
/**
* Conta il numero di istanze per stato stato
* @return int
*/
public function loadDomandeAssociate() {
global $STATI_DOMANDA;
$domande = Domanda::selectFromAccount();
$istanze = array();
foreach ($STATI_DOMANDA as $key => $value) {
$istanze[$key] = 0;
}
$istanzeAtecoStato = array();
foreach ($domande as $v) {
$c_ateco = $v['CODICE_ATECO'];
if ($c_ateco != "" && (!isset($istanzeAtecoStato[$c_ateco]) || ($istanzeAtecoStato[$c_ateco] == 0 && $v['STATO'] == 1))) {
$istanzeAtecoStato[] = $v['STATO'];
}
}
foreach ($istanzeAtecoStato as $v) {
$istanze[$v]++;
}
return $istanze;
}
public function countDomandeAssociate() {
global $con;
$response = Utils::initDefaultResponse();
$filter = " ID_ACCOUNT = '" . $this->ID . "' ";
$sql = "SELECT COUNT(ID) AS TOTREC FROM " . Domanda::TABLE_NAME . " WHERE " . $filter;
$stmn = $con->prepare($sql);
try {
$stmn->execute();
$row = $stmn->fetch(PDO::FETCH_ASSOC);
// $response = $row['TOTREC'];
$response = 0;
} catch (Exception $exc) {
$response['esito'] = -999;
$response['erroreDescrizione'] = $exc->getMessage();
}
return $response;
}
/**
* Controllo se sono un utente presente all'interno dell'anagrafica fornita dalla regione
* @global type $con
* @return type boolean
*/
public function checkAuthPersonale() {
global $con;
return 1;
}
/**
* Load dati from anagrafica personale (primo accesso o accesso con anagrafica non confermata)
*/
public function LoadDatiFromAnagraficaPersonale() {
$anag = AnagraficaPersonale::load($this->CODICE_FISCALE);
$this->Anagrafica->NOME = $anag->NOME;
$this->Anagrafica->COGNOME = $anag->COGNOME;
$this->Anagrafica->DATA_NASCITA = $anag->DATA_NASCITA;
$this->Anagrafica->SESSO = Utils::extractGenderFromCF($this->CODICE_FISCALE);
}
/**
* init account da dati di sessione
*/
public static function initAccountFromSessione($account = null) {
if (!empty($account)) {
$response = new Account(); //$account['ID']
$anagrafica = new AccountAnagrafica();
$key_anagrafica = 'Anagrafica';
$anagrafica->_loadByRow($account[$key_anagrafica]);
$response->_loadByRow($account);
$response->CanLogIn = $response->checkAuthPersonale();
$response->CountDomande = $response->countDomandeAssociate();
$response->Anagrafica = $anagrafica; // assegnamo un oggetto come anagrafica e non un array
if ($response->AUTORIZZAZIONE_TRATTAMENTO != 1) {
$response->Anagrafica->SPID_CELLULARE = $account[$key_anagrafica]['SPID_CELLULARE'];
$response->Anagrafica->SPID_EMAIL = $account[$key_anagrafica]['SPID_EMAIL'];
$response->Anagrafica->SPID_TIPO_DOCUMENTO = $account[$key_anagrafica]['SPID_TIPO_DOCUMENTO'];
$response->Anagrafica->SPID_DOCUMENTO = $account[$key_anagrafica]['SPID_DOCUMENTO'];
$response->Anagrafica->SPID_DOCUMENTO_ENTE = $account[$key_anagrafica]['SPID_DOCUMENTO_ENTE'];
$response->Anagrafica->SPID_DOCUMENTO_RILASCIO = $account[$key_anagrafica]['SPID_DOCUMENTO_RILASCIO'];
$response->Anagrafica->SPID_DOCUMENTO_SCADENZA = $account[$key_anagrafica]['SPID_DOCUMENTO_SCADENZA'];
}
}
return $response;
}
public function loadAccountAnagrafica() {
$anagrafica = new AccountAnagrafica($this->CODICE_FISCALE);
$nucleo = AccountNucleoFamiliare::loadFromCf($this->CODICE_FISCALE, $this->ID);
$anagrafica->FLAG = $nucleo->FLAG;
$anagrafica->STUDENTE = $nucleo->STUDENTE;
return $anagrafica;
}
public function loadSchedaPersona() {
return array();//
}
/*
* Set Session with current LoggedAccount Load By Codice Fiscale
*/
public function reloadSession() {
global $LoggedAccount;
session_name('voli_2023_2024');
session_start();
$LoggedAccount = new Account($LoggedAccount->ID);
$_SESSION['ID'] = $LoggedAccount->ID;
$_SESSION['LoggedAccount'] = json_encode($LoggedAccount);
}
/*
* Set Session with current LoggedAccount Load By Codice Fiscale
*/
public function SetSession($codiceFiscale = '') {
session_name('voli_2023_2024');
session_start();
$LoggedAccount = SELF::load($codiceFiscale);
$_SESSION['ID'] = $LoggedAccount->ID;
$_SESSION['LoggedAccount'] = json_encode($LoggedAccount);
}
/*
* Select id by Field
* default field: codice Fiscale
*/
public static function load($field = "", $fieldName = "CODICE_FISCALE") {
global $con;
$account = new Account();
if (!empty($field) && !empty($fieldName)) {
$sql = "SELECT * FROM " . self::TABLE_NAME . " WHERE " . $fieldName . " = :" . $fieldName . " ";
$stmn = $con->prepare($sql);
$stmn->bindParam(":" . $fieldName, $field);
try {
$stmn->execute();
$row = $stmn->fetch(PDO::FETCH_ASSOC);
if (intval($row['ID']) > 0) {
Utils::FillObjectFromRow($account, $row);
$account->loadDati(); // DA VERIFICARE
}
} catch (Exception $exc) {
$exc->getMessage();
}
}
return $account;
}
public function Save() {
global $con, $LoggedAccount;
$vars = get_object_vars($this);
/* REMOVE LOCAL VAR */
unset($vars['IP']);
unset($vars['SchedaPersona']);
unset($vars['NucleoFamiliare']);
unset($vars['Anagrafica']);
unset($vars['CountDomande']);
unset($vars['CanLogIn']);
/**/
$sql = Utils::prepareQuery(self::TABLE_NAME, $vars);
$queryabi = $con->prepare($sql);
foreach ($vars as $k => $v) {
if ($k == "ID" && $v == 0){
continue;
}
$queryabi->bindValue(":" . $k, $v);
}
try {
$it = parent::_Save($queryabi);
} catch (Exception $exc) {
$it['esito'] = -999;
$it['erroreDescrizione'] = $exc->getMessage();
}
return $it;
}
/**
* Elimina l'oggetto corrente dal database e restituisce TRUE se ha successo
*
* @return bool Risultato booleano dell'operazione
*/
public function Delete() {
return parent::_LogicalDelete(self::TABLE_NAME, "id = " . $this->id);
}
/**
* Funzione per la visualizzazione dei logs
* @param type $record
* @param type $campo
*/
public function Parse(&$record, $campo = "") {
array_push($record, array("Campo" => $campo, "Valore" => $this->$campo));
}
public function SaveAuth($auth = null) {
if ($this->AUTORIZZAZIONE_TRATTAMENTO == 1) {
$response = Utils::initDefaultResponse(true);
} else {
$response = Utils::initDefaultResponse(false, "L'autorizzazione al trattamento dei dati è obbligatoria");
if (!empty($auth)) {
$this->AUTORIZZAZIONE_TRATTAMENTO = 1;
$response = $this->Save();
}
}
return $response;
}
public function getFieldAuthConsenso() {
global $LoggedAccount;
$reponse = '';
if ($LoggedAccount->AUTORIZZAZIONE_TRATTAMENTO > 0) {
$reponse = '<div class="col-12 text-right">Visualizza <a href="'.LINK_PRIVACY.'" target="_blank"><b>l\'informativa sulla privacy</b></a> ai sensi del Regolamento UE 2016/679 (GDPR)</div>';
} else {
$reponse = '
<div class="col-2 text-right">
<input class="form-control " type="checkbox" id="consenso_informativo" name="AUTORIZZAZIONE_TRATTAMENTO" >
</div>
<div class="col-10">
<label for="defaultCheck1">
<span class="text-danger">*&nbsp;</span><b>Autorizzo il trattamento dei dati forniti ai sensi delle vigenti disposizioni in materia di <a href="'.LINK_PRIVACY.'" target="_blank"><b>privacy</b></a> ai sensi del Regolamento UE 2016/679 (GDPR)</b>
</label></div>';
}
return $reponse;
}
public function checkAuthShowDomanda($idDomanda = 0) {
global $LoggedAccount;
$record = null;
if (intval($idDomanda) > 0) {
$record = Domanda::loadDomandaCompleta($idDomanda);
if ($record['CODICE_FISCALE'] != $LoggedAccount->CODICE_FISCALE) {
Utils::RedirectTo('dashboard.php');
}
} else {
Utils::RedirectTo('dashboard.php');
}
return $record;
}
public function checkAuthShowDomandaPage($idDomanda = 0) {
global $LoggedAccount;
if (intval($idDomanda) > 0) {
$domanda = new Domanda($idDomanda);
if ($domanda->ID_ACCOUNT != $LoggedAccount->ID) {
Utils::RedirectTo(HTTP_PRIVATE_SECTION . 'dashboard.php');
}
} else {
Utils::RedirectTo(HTTP_PRIVATE_SECTION . 'dashboard.php');
}
}
public function checkTrattamento($trattamento = null) {
global $LoggedAccount;
if ($LoggedAccount->AUTORIZZAZIONE_TRATTAMENTO == 1) {
$response = true;
} else if (strtolower($trattamento) == 'on' || intval($trattamento) == 1) {
$response = true;
}else{
$response = false;
}
return $response;
}
public function checkAuthNewAccount() {
if (Utils::isStatoSportelloPreparazione()) {
$response = true;
} else if (Utils::isStatoSportelloPreparazione(true) && !empty($this->Anagrafica->CODICE_FISCALE) && $this->CountDomande > 0) {
$response = true;
}else{
$response = false;
}
return $response;
}
public function checkAuthApiFase() {
return $this->checkAuthNewAccount();
}
public function checkAuthPageFase() {
if (!$this->checkAuthNewAccount()) {
Utils::RedirectTo(HTTP_PRIVATE_SECTION . 'info.php');
} else {
if (intval($this->AUTORIZZAZIONE_TRATTAMENTO) == 0 && (
Utils::checkCurrentPage('dashboard') || Utils::checkCurrentPage('faq') || Utils::checkCurrentPage('domanda') || Utils::checkCurrentPage('azienda') || Utils::checkCurrentPage('istanze')
)
) {
Utils::RedirectTo(HTTP_PRIVATE_SECTION . 'account.php');
}
}
}
public function checkStateEditableFieldPage() {
$response = Utils::getFieldsState(Utils::isStatoSportelloPreparazione());
if ($this->CountDomande > 0) {
$response = array(
'readonly' => "readonly='readonly'",
'hidden' => "hidden='true'",
'disabled' => "disabled='true'",
'stato' => 0
);
}
return $response;
}
public function checkStateEditableFieldPageCambioIban() {
$response = Utils::getFieldsState(Utils::isStatoSportelloCambioIban());
return $response;
}
/**
* Controlla se tra le imprese legate al codice fiscale è presente l'impresa per cui si sta lavorando la pratica
* @global type $LoggedAccount
* @param type $piva
* @return boolean
*/
public function checkImpresaFromLoggedAccount($piva = null) {
global $LoggedAccount;
if ($LoggedAccount->ID > 0 && !empty($piva)) {
foreach ($LoggedAccount->SchedaPersona->imprese_persona as $v) {
if ($v['c_fiscale'] == $piva) {
return true;
}
}
}
return false;
}
/* * ***************************************************************
*
* OCI SECTION
*
*/
/*
* Select id by codice Fiscale
*/
public static function selectFromCodiceFiscaleOCI($codice_fiscale = "") {
global $conOCI;
$account = new Account();
try {
$sql = "SELECT * FROM " . self::TABLE_NAME . " WHERE CODICE_FISCALE = :codice_fiscale ";
$statement = $conOCI->db_getStatement($sql);
oci_bind_by_name($statement, ":codice_fiscale", $codice_fiscale);
$row = $conOCI->db_fetch_array($statement);
if (intval($row['ID']) > 0) {
Utils::FillObjectFromRow($account, $row);
}
$conOCI->db_free_statement($statement);
$conOCI->db_close();
} catch (Exception $exc) {
$conOCI->db_free_statement($statement);
$conOCI->db_close();
}
return $account;
}
/* Load account by ID (evitando il costruttore) */
public static function LoadByIDOCI($id = null) {
global $conOCI;
$account = new Account();
if (intval($id) > 0) {
try {
$sql = "SELECT * FROM " . self::TABLE_NAME . " WHERE ID = :id ";
$statement = $conOCI->db_getStatement($sql);
oci_bind_by_name($statement, ":id", $id);
$row = $conOCI->db_fetch_array($statement);
if (intval($row['ID']) > 0) {
Utils::FillObjectFromRow($account, $row);
}
$conOCI->db_free_statement($statement);
$conOCI->db_close();
} catch (Exception $exc) {
$conOCI->db_free_statement($statement);
$conOCI->db_close();
}
}
return $account;
}
function isFamiliare(){
}
}