Files
2021-03-26 17:17:28 +01:00

293 lines
14 KiB
C#

using SteamWare;
using System;
namespace GPW_data
{
/// <summary>
/// proxy accesso ai dati
/// </summary>
public class DataProxy
{
#region area table adapters
public DS_ApplicazioneTableAdapters.AnagClientiTableAdapter taAnCli;
public DS_ApplicazioneTableAdapters.TimbratureTableAdapter taTimb;
public DS_ApplicazioneTableAdapters.TimbratureExplTableAdapter taTimbExpl;
public DS_ApplicazioneTableAdapters.AnagDevicesTableAdapter taAnagDev;
public DS_ApplicazioneTableAdapters.DipendentiTableAdapter taDipendenti;
public DS_ApplicazioneTableAdapters.Dipendenti2RuoliTableAdapter taDip2Ruoli;
public DS_ApplicazioneTableAdapters.AnagProgettiTableAdapter taAP;
public DS_ApplicazioneTableAdapters.AnagFasiTableAdapter taAF;
public DS_ApplicazioneTableAdapters.v_logCommUtTableAdapter taLCU;
public DS_ApplicazioneTableAdapters.RegAttivitaTableAdapter taRA;
public DS_ApplicazioneTableAdapters.regAttDayExplTableAdapter taRAExpl;
public DS_ApplicazioneTableAdapters.AnagOrariTableAdapter taAO;
public DS_ApplicazioneTableAdapters.GiustificativiTableAdapter taGiust;
public DS_ApplicazioneTableAdapters.stp_DipendentiAndAnomalieTableAdapter taDipAnom;
public DS_ApplicazioneTableAdapters.TE_RA_ExplTableAdapter taTimbRegAtt;
public DS_ApplicazioneTableAdapters.RegistroEventiTableAdapter taRE;
public DS_ApplicazioneTableAdapters.CalendFesteFerieTableAdapter taCFF;
public DS_ApplicazioneTableAdapters.RilievoTempTableAdapter taRT;
public DS_ApplicazioneTableAdapters.HistTempTableAdapter taHT;
public DS_UtilityTableAdapters.nextValContatoreTableAdapter taNextVal;
public DS_UtilityTableAdapters.AnagKeyValueTableAdapter taAKV;
public DS_UtilityTableAdapters.stp_VSProjFasi_searchTableAdapter taVSProjFasiSearch;
public DS_UtilityTableAdapters.v_selProjFasiTableAdapter taVSPF;
public DS_exportTableAdapters.TimbratureZucchettiTableAdapter taExpZucc;
public DS_exportTableAdapters.RegAtt_pivotTableAdapter taExpComm;
/// <summary>
/// init dei table adapters
/// </summary>
protected void initTA()
{
taAnCli = new DS_ApplicazioneTableAdapters.AnagClientiTableAdapter();
taTimb = new DS_ApplicazioneTableAdapters.TimbratureTableAdapter();
taTimbExpl = new DS_ApplicazioneTableAdapters.TimbratureExplTableAdapter();
taAnagDev = new DS_ApplicazioneTableAdapters.AnagDevicesTableAdapter();
taDipendenti = new DS_ApplicazioneTableAdapters.DipendentiTableAdapter();
taDip2Ruoli = new DS_ApplicazioneTableAdapters.Dipendenti2RuoliTableAdapter();
taAP = new DS_ApplicazioneTableAdapters.AnagProgettiTableAdapter();
taAF = new DS_ApplicazioneTableAdapters.AnagFasiTableAdapter();
taLCU = new DS_ApplicazioneTableAdapters.v_logCommUtTableAdapter();
taRA = new DS_ApplicazioneTableAdapters.RegAttivitaTableAdapter();
taRAExpl = new DS_ApplicazioneTableAdapters.regAttDayExplTableAdapter();
taAO = new DS_ApplicazioneTableAdapters.AnagOrariTableAdapter();
taGiust = new DS_ApplicazioneTableAdapters.GiustificativiTableAdapter();
taDipAnom = new DS_ApplicazioneTableAdapters.stp_DipendentiAndAnomalieTableAdapter();
taTimbRegAtt = new DS_ApplicazioneTableAdapters.TE_RA_ExplTableAdapter();
taRE = new DS_ApplicazioneTableAdapters.RegistroEventiTableAdapter();
taCFF = new DS_ApplicazioneTableAdapters.CalendFesteFerieTableAdapter();
taRT = new DS_ApplicazioneTableAdapters.RilievoTempTableAdapter();
taHT = new DS_ApplicazioneTableAdapters.HistTempTableAdapter();
taNextVal = new DS_UtilityTableAdapters.nextValContatoreTableAdapter();
taAKV = new DS_UtilityTableAdapters.AnagKeyValueTableAdapter();
taVSProjFasiSearch = new DS_UtilityTableAdapters.stp_VSProjFasi_searchTableAdapter();
taVSPF = new DS_UtilityTableAdapters.v_selProjFasiTableAdapter();
taExpZucc = new DS_exportTableAdapters.TimbratureZucchettiTableAdapter();
taExpComm = new DS_exportTableAdapters.RegAtt_pivotTableAdapter();
}
/// <summary>
/// effettua setup dei connection strings da web.config delal singola applicazione
/// </summary>
protected virtual void setupConnectionStringBase()
{
string connGPW = memLayer.ML.confReadString("GPWConnectionString");
// connections del db
taAnCli.Connection.ConnectionString = connGPW;
taTimb.Connection.ConnectionString = connGPW;
taTimbExpl.Connection.ConnectionString = connGPW;
taAnagDev.Connection.ConnectionString = connGPW;
taDipendenti.Connection.ConnectionString = connGPW;
taDip2Ruoli.Connection.ConnectionString = connGPW;
taAP.Connection.ConnectionString = connGPW;
taAF.Connection.ConnectionString = connGPW;
taLCU.Connection.ConnectionString = connGPW;
taRA.Connection.ConnectionString = connGPW;
taRAExpl.Connection.ConnectionString = connGPW;
taAO.Connection.ConnectionString = connGPW;
taGiust.Connection.ConnectionString = connGPW;
taDipAnom.Connection.ConnectionString = connGPW;
taTimbRegAtt.Connection.ConnectionString = connGPW;
taRE.Connection.ConnectionString = connGPW;
taCFF.Connection.ConnectionString = connGPW;
taRT.Connection.ConnectionString = connGPW;
taHT.Connection.ConnectionString = connGPW;
taNextVal.Connection.ConnectionString = connGPW;
taAKV.Connection.ConnectionString = connGPW;
taVSProjFasiSearch.Connection.ConnectionString = connGPW;
taVSPF.Connection.ConnectionString = connGPW;
taExpZucc.Connection.ConnectionString = connGPW;
taExpComm.Connection.ConnectionString = connGPW;
}
#endregion
protected DataProxy()
{
initTA();
setupConnectionStringBase();
}
/// <summary>
/// Singleton accesso a DataProxy
/// </summary>
public static DataProxy DP = new DataProxy();
#region utility public esposte
/// <summary>
/// invia una mail al destinatario x linkare nuovi devices tramite URL
/// </summary>
/// <param name="destinatario"></param>
/// <param name="UserAuthKey"></param>
/// <param name="idxDipendente"></param>
/// <returns></returns>
public bool sendUserAuthEmail(string destinatario, string UserAuthKey, int idxDipendente)
{
bool fatto = false;
string mittente = "";
string oggetto = "";
string userUrl = "";
string baseUrl = "";
string userWebUrl = "";
string baseWebUrl = "";
string corpo = "";
try
{
// compongo la stringa
mittente = memLayer.ML.confReadString("_fromEmail");
oggetto = "Link autorizzazione device per GPW";
baseUrl = memLayer.ML.confReadString("baseUrl");
baseWebUrl = memLayer.ML.confReadString("baseWebUrl");
userUrl = string.Format("{2}jumper?UserAuthkey={0}&idxDipendente={1}", UserAuthKey, idxDipendente, baseUrl);
userWebUrl = string.Format("{2}jumper?UserAuthkey={0}&idxDipendente={1}", UserAuthKey, idxDipendente, baseWebUrl);
corpo = string.Format("Hai ricevuto questa email su richiesta tua o dell'Admin per poter procedere a registrare un (nuovo) devices con GPW:{0}<br/>Per proseguire clicca sul link seguente(rete interna):<br />{0}{0}{1}{0}{0}<br /><br />oppure sul link seguente (internet):<br />{0}{0}{2}{0}{0}<br /><br />Team GPW Steamware", Environment.NewLine, userUrl, userWebUrl);
fatto = gestEmail.geAuth.mandaEmail(mittente, destinatario, oggetto, corpo);
}
catch
{ }
return fatto;
}
/// <summary>
/// effettua enroll del device
/// </summary>
/// <param name="UserAuthKey"></param>
/// <param name="IPv4"></param>
/// <param name="DeviceName"></param>
/// <param name="Description"></param>
/// <param name="idxDipendente"></param>
/// <returns></returns>
public bool enrollDevice(string UserAuthKey, string IPv4, string DeviceName, string Description, int idxDipendente)
{
bool fatto = false;
// in primis testo se dipendente ed authKey sono validi..
if (DataProxy.DP.taDipendenti.getByAuthKey(idxDipendente, UserAuthKey).Rows.Count > 0)
{
/************************************************
* Gestione riconoscimento devices
*
* - cerco IP del device, testo se è rete interna (A) o extranet/internet (B) cercando substring "localNet" da web.config
* (A): device interni: c'è un DHCP, e "dhcpLeaseTime" deve essere pari a lease time---
* - verifico se IP già in uso da un tempo < "dhcpLeaseTime" --> in questo caso segnalo errore e rimbalzo (NON permetto di registrare device a nuovo utente... sospetto uso "improprio" del device
* - se tempo > dhcpLeaseTime allora può aver cambiato IP: aggiorno IP e descrizione del device e proseguo
* (B): all'esterno vedo tutta una subnet NATtata con unico IP, non è + discriminante
* - le timbrature "da esterno" devono essere confermate (instrodurre "tipo timbratura" x cui interne sono autoconfermate, esterne sono "grayed" (da confermare, da admin o ad esempio se si accende secondo device utente entro 5/10 min)
* - le timbrature ext DOVREBBERO chiedere location (jScript?) e inviarla, visibile in conferma
*
*
* **********************************************/
//!!!RIFARE!!! non è + importante device name e description come distinti ma "quasi distinti" gli IP "intranet" o meglio anche ripetuto se a distanza di tempo
#if false
// controllo se esiste già device con quel secret code...
if (DataProxy.DP.taAnagDev.getByDeviceName(DeviceName).Rows.Count > 0)
{
// controllo se è inutilizzato da almeno XX minuti (da web.config), min 5 direi...
bool ip_decaduto = true; // fare cerco IP nei device name e cerco data ultimo utilizzo...
if (ip_decaduto)
{
// in questo caso elimino il record...
DataProxy.DP.taAnagDev.delByDeviceName(DeviceName);
}
else
{
}
}
#endif
// calcolo il secret...
DateTime adesso = DateTime.Now;
string Secret = string.Format("{0}|{1}|{2}", idxDipendente, DeviceName, adesso);
string devSecret = SteamCrypto.EncryptString(Secret, "AuthGPW");
try
{
DataProxy.DP.taAnagDev.insertQuery(devSecret, idxDipendente, DeviceName, Description, adesso, IPv4);
// registro "consumo" della authKey
DataProxy.DP.taDipendenti.recordAuthKeyUse(idxDipendente);
// salvo il cookie nel browser
memLayer.ML.setCookieVal("AuthGPW", devSecret, DateTime.Now.AddYears(5));
// indico come fatto
fatto = true;
}
catch
{ }
}
return fatto;
}
/// <summary>
/// idxDipendente in sessione
/// </summary>
public static int idxDipendente
{
get
{
int idx = 0;
try
{
idx = memLayer.ML.IntSessionObj("IdxDipendente");
}
catch
{ }
return idx;
}
set
{
memLayer.ML.setSessionVal("idxDipendente", value);
}
}
/// <summary>
/// Verifica se il dip corrente sia attivo
/// </summary>
public static bool currDipIsActive
{
get
{
bool answ = false;
try
{
DS_Applicazione.DipendentiRow rigaDip = DP.taDipendenti.getByIdx(idxDipendente)[0];
answ = rigaDip.attivo;
}
catch
{ }
return answ;
}
}
/// <summary>
/// Verifica se il dip RICHIESTO sia attivo
/// </summary>
/// <param name="_idxDipendente"></param>
/// <returns></returns>
public bool dipIsActive(int _idxDipendente)
{
bool answ = false;
try
{
DS_Applicazione.DipendentiRow rigaDip = DP.taDipendenti.getByIdx(_idxDipendente)[0];
answ = rigaDip.attivo;
}
catch
{ }
return answ;
}
public string CognomeNomeByIdx(int idxDip)
{
string answ = "";
try
{
DS_Applicazione.DipendentiRow rigaDip = taDipendenti.getByIdx(idxDip)[0];
answ = string.Format("{0} {1}", rigaDip.Cognome, rigaDip.Nome);
}
catch
{ }
return answ;
}
#endregion
}
}