using System; using System.Configuration; using System.Globalization; using System.IO; using System.Web; using NLog; using System.Net.Mail; using System.Collections.Generic; using StackExchange.Redis; using System.Data; using Newtonsoft.Json; namespace ETS_Data { /// /// definisce un intervalo di 2 date /// public struct intervalloDate { #region Public Fields /// /// data fine /// public DateTime fine; /// /// data inizio /// public DateTime inizio; #endregion Public Fields #region Public Properties /// /// indica se sia valido il dato, ovvero inizio e fine > 0 e FINE >= INIZIO /// public bool isValid { get { bool cond1 = false; bool cond2 = false; bool cond3 = false; try { cond1 = inizio > Convert.ToDateTime("01/01/0001"); } catch { } try { cond2 = fine > Convert.ToDateTime("01/01/0001"); } catch { } try { cond3 = (fine.Subtract(inizio).TotalHours > 0); } catch { } return (cond1 && cond2 && cond3); } } #endregion Public Properties } /// /// Helper methods e funzioni x gestione conversione dataset tipizzati e non /// /// A strongly type DataTable. /// A DataTable of type T will be returned from the DataSet. /// public static class DataSetAdapter where T : DataTable, new() { #region Public Methods /// /// Convert the first DataTable from a DataSet to a /// strongly-typed data table. /// public static T convert(DataSet dataSet) { if (dataSet == null) return null; if (dataSet.Tables.Count == 0) return null; DataTable dataTable = dataSet.Tables[0]; return convert(dataTable); } /// /// Convert an ordinary DataTable to a strongly-typed /// data table. /// public static T convert(DataTable dataTable) { if (dataTable == null) return null; T stronglyTyped = new T(); // add data from the regular DataTable to the // strongly typed DataTable. stronglyTyped.Merge(dataTable, true, MissingSchemaAction.Ignore); return stronglyTyped; } #endregion Public Methods } /// /// Struttura allocazione risorse / commessa /// public class allocRis { #region Public Constructors /// /// Inizializzazione oggetto /// /// /// /// public allocRis(string commessa, string risorsa, int allocazione) { this.commessa = commessa; this.risorsa = risorsa; this.allocazione = allocazione; } #endregion Public Constructors #region Public Properties /// /// allocazione risorsa/commessa /// public int allocazione { get; set; } /// /// codice commessa /// public string commessa { get; set; } /// /// codice risorsa /// public string risorsa { get; set; } #endregion Public Properties } /// /// classe di funzioni inerenti le date /// public class datario { #region Public Fields /// /// oggetto singleton /// public static datario mngr = new datario(); #endregion Public Fields #region Public Constructors /// /// inizializzazione empty /// public datario() { } #endregion Public Constructors #region Public Methods /// /// restituisce la prima data della settimana richiesta /// /// /// /// public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear) { DateTime jan1 = new DateTime(year, 1, 1); int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek; DateTime firstThursday = jan1.AddDays(daysOffset); var cal = CultureInfo.CurrentCulture.Calendar; int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); var weekNum = weekOfYear; if (firstWeek <= 1) { weekNum -= 1; } var result = firstThursday.AddDays(weekNum * 7); return result.AddDays(-3); } /// /// calcola week number secondo ISO 8601 /// /// /// public static int WeekOfYearISO8601(DateTime date) { var day = (int)CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(date); return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date.AddDays(4 - (day == 0 ? 7 : day)), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); } /// /// restituisce l'intervallo dell'anno corrente per la data indicata /// /// /// public intervalloDate estremiAnno(DateTime data) { intervalloDate interv = new intervalloDate(); interv.inizio = data.AddDays(-(data.Day - 1)).AddMonths(-(data.Month - 1)).Subtract(data.TimeOfDay); interv.fine = interv.inizio.AddMonths(12); return interv; } /// /// restituisce l'intervallo del mese che comprende la data indicata (dal primo all'ultimo giorno) /// /// /// public intervalloDate estremiMese(DateTime data) { intervalloDate interv = new intervalloDate(); interv.inizio = data.AddDays(-(data.Day - 1)).Subtract(data.TimeOfDay); interv.fine = interv.inizio.AddMonths(1); return interv; } /// /// restituisce l'intervallo del giorno completo che comprende la data indicata /// /// /// public intervalloDate giornata(DateTime data) { intervalloDate interv = new intervalloDate(); interv.inizio = data.Subtract(data.TimeOfDay); interv.fine = interv.inizio.AddDays(1); return interv; } /// /// effettua l'operazione di intersezione tra 2 intervali di date restituendo ulteriore intervallo: NB se sono intervali disgiunti restituisce 9/9/9999 x inizio e fine /// /// /// /// public intervalloDate intersecaIntervalli(intervalloDate interv1, intervalloDate interv2) { intervalloDate interv3; // verifico non siano disgiunti... if (interv1.fine < interv2.inizio || interv2.fine < interv1.inizio) { interv3.inizio = Convert.ToDateTime("9/9/9999"); interv3.fine = Convert.ToDateTime("9/9/9999"); } else { interv3 = interv1; if (interv2.inizio > interv1.inizio) { interv3.inizio = interv2.inizio; } if (interv2.fine < interv1.fine) { interv3.fine = interv2.fine; } } return interv3; } /// /// oggetto mese corrente fino alla dataLilmite /// /// public intervalloDate meseCorrente(DateTime dataLimite) { intervalloDate interv = new intervalloDate(); interv.inizio = dataLimite.AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); interv.fine = dataLimite.Subtract(dataLimite.TimeOfDay); return interv; } /// /// oggetto mese precedente alla dataLilmite /// /// public intervalloDate mesePrecedente(DateTime dataLimite) { intervalloDate interv = new intervalloDate(); interv.inizio = dataLimite.AddMonths(-1).AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); interv.fine = dataLimite.AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); return interv; } /// /// restituisce l'intervallo della settimana corrente per la data indicata /// /// /// public intervalloDate questaSett(DateTime data) { intervalloDate interv = new intervalloDate(); interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); DayOfWeek giorno = data.DayOfWeek; int numGG = 0; switch (giorno) { case DayOfWeek.Monday: numGG = 1; break; case DayOfWeek.Tuesday: numGG = 2; break; case DayOfWeek.Wednesday: numGG = 3; break; case DayOfWeek.Thursday: numGG = 4; break; case DayOfWeek.Friday: numGG = 5; break; case DayOfWeek.Saturday: numGG = 6; break; case DayOfWeek.Sunday: numGG = 7; break; default: break; } interv.inizio = interv.fine.AddDays(-numGG); return interv; } /// /// restituisce l'intervallo del mese corrente per la data indicata (dal giorno 1 all'indomani delal data indicata) /// /// /// public intervalloDate questoMese(DateTime data) { intervalloDate interv = new intervalloDate(); interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); interv.inizio = interv.fine.AddDays(-data.Day); return interv; } /// /// costruisce un oggetto intervallo date /// /// /// /// public intervalloDate setIntervallo(DateTime inizio, DateTime fine) { intervalloDate periodo = new intervalloDate(); periodo.inizio = inizio; periodo.fine = fine; return periodo; } /// /// confronta le date e restituisce true se le date sono nello stesso mese /// /// /// /// public bool stessoMese(DateTime data1, DateTime data2) { bool stessoMese = false; if ((data1.Year == data2.Year) && (data1.Month == data2.Month)) { stessoMese = true; } return stessoMese; } /// /// restituisce l'intervallo di N giorni fino alla data indicata /// /// /// /// public intervalloDate ultimiGiorni(DateTime data, int numGiorniPrima) { intervalloDate interv = new intervalloDate(); interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); interv.inizio = interv.fine.AddDays(-numGiorniPrima); return interv; } #endregion Public Methods } public class oreWeek { #region Public Constructors /// /// inizializzazione empty /// public oreWeek() { } #endregion Public Constructors #region Public Methods /// /// effettua una somma di ore dallo schema ore LMMGV facendo somma giorno per giorno /// /// string LMMGV (se <> 5 char errore) /// string LMMGV (se <> 5 char errore) /// Restituisce: /// - somma giornaliera LMMGV /// - "X" se nel singolo giorno > maxOre /// - "?????" se secondo addendo nn di 5 char /// - "#" se non può convertire un singolo char public static string addOre(string addendo1, string addendo2, int MaxOre) { string answ = ""; int summa = 0; // procedo SOLO se le 2 stringhe sono 5 char if (addendo1.Length != 5 || addendo2.Length != 5) { answ = "?????"; } else { // faccio somma 1 char alla volta e controllo lungh max for (int i = 0; i < 5; i++) { try { // se già ho carattere "X" confermo "X"... if (addendo1.Substring(i, 1) == "X" || addendo1.Substring(i, 1) == "X") { answ += "X"; } else { summa = Convert.ToInt16(addendo1.Substring(i, 1)) + Convert.ToInt16(addendo2.Substring(i, 1)); if (summa > MaxOre) { answ += "X"; } else { answ += summa.ToString(); } } } catch { answ += "X"; } } } return answ; } #endregion Public Methods } public class utils { #region Private Fields /// /// Connessione lazy a redis... /// private static Lazy lazyConnection = new Lazy(() => { return ConnectionMultiplexer.Connect("127.0.0.1,abortConnect=false,ssl=false"); }); #endregion Private Fields #region Protected Fields protected AppSettingsReader configAppSetReader; #endregion Protected Fields #region Public Fields public static Logger lg = LogManager.GetCurrentClassLogger(); /// /// oggetto static per fare chiamate sul magazzino /// public static utils obj = new utils(); public DS_utilsTableAdapters.AnagSuggestTagsTableAdapter taAST; public DS_utilsTableAdapters.stp_calcolaProtocolloTableAdapter taCalcProto; public DS_WebScipTableAdapters.stp_userLoginRefreshDbTableAdapter taDBRefresh; public DS_AnagraficaTableAdapters.DirittiTableAdapter taDiritti; public DS_WebScipTableAdapters.tbDocumentiTableAdapter taDoc; public DS_utilsTableAdapters.v_selEmailFornitoriTableAdapter taEmailForn; public DS_utilsTableAdapters.v_selAutoriTableAdapter taSelAutori; public DS_utilsTableAdapters.v_selCommesseTableAdapter taSelCommesse; public DS_utilsTableAdapters.v_selFasiTableAdapter taSelFasi; public DS_utilsTableAdapters.v_selFontiTableAdapter taSelFonti; public DS_WebScipTableAdapters.Tags2DocTableAdapter taTags2Doc; public DS_utilsTableAdapters.v_tbDocs_selCommesseTableAdapter taTDSelCommesse; public DS_utilsTableAdapters.v_tbDocs_selFasiTableAdapter taTDSelFasi; public DS_utilsTableAdapters.v_tbDocs_selFontiTableAdapter taTDSelFonti; public DS_utilsTableAdapters.v_tbDocs_selOggettoTableAdapter taTDSelOggetti; public DS_utilsTableAdapters.v_tbDocs_selRedattoreTableAdapter taTDSelRedattore; public DS_WebScipTableAdapters.tbMetaDataSetTableAdapter taTMD; public DS_AnagraficaTableAdapters.UtentiTableAdapter taUtenti; public DS_utilsTableAdapters.v_selFonti_explTableAdapter taVSFE; #endregion Public Fields #region Protected Constructors protected utils() { configAppSetReader = new AppSettingsReader(); initTA(); setupConnectionStringBase(); } #endregion Protected Constructors #region Public Properties /// /// Oggetto statico connessione redis /// public static ConnectionMultiplexer connRedis { get { return lazyConnection.Value; } } /// /// dim pagina desiderata /// public static int pageSize { get { int answ = 0; try { answ = utils.obj.IntSessionObj("pageSize"); } catch { } if (answ <= 0) { answ = 20; } return answ; } set { utils.obj.setSessionVal("pageSize", value); } } public static int pageSizeConf { get { return obj.confReadInt("pageSize"); } } /// /// WRAPPER utente correntemente connesso per utilizzo FileSystem (Formato dominio.username) /// public string currUser_FS { get { return user_std.UtSn.currUser_FS; } } /// /// WRAPPER utente correntemente connesso (Formato dominio\username) /// public string currUserAD { get { return user_std.UtSn.currUserAD; } } /// /// WRAPPER utente correntemente connesso (Formato Cognome nome) /// public string currUserCognomeNome { get { return user_std.UtSn.currUserCognomeNome; } } /// /// WRAPPER EMAIL utente correntemente connesso /// public string currUserEmail { get { return user_std.UtSn.currUserEmail; } } /// /// WRAPPER UserId (AD) utente correntemente connesso /// public string currUserId { get { return user_std.UtSn.currUserId; } } /// /// WRAPPER utente correntemente connesso (Formato Nome Cognome) /// public string currUserNomeCognome { get { return user_std.UtSn.currUserNomeCognome; } } /// /// risponde alla domanda se l'utente sia CapoCommessa /// /// public bool isCC { get { return user_std.UtSn.userHasRight("CC"); } } /// /// risponde alla domanda se l'utente sia ProjectManager /// /// public bool isPM { get { return user_std.UtSn.userHasRight("PM"); } } /// /// risponde alla domanda se l'utente sia PowerReader /// /// public bool isPowerReader { get { return user_std.UtSn.userHasRight("PowerReader"); } } /// /// risponde alla domanda se l'utente sia PowerUser /// /// public bool isPowerUser { get { return user_std.UtSn.userHasRight("PowerUser"); } } /// /// risponde alla domanda se l'utente sia User /// /// public bool isUser { get { return user_std.UtSn.userHasRight("User"); } } /// /// Restituisce numero record in Redis DB /// public long numRecRedis { get { long answ = 0; try { foreach (var ep in connRedis.GetEndPoints()) { var server = connRedis.GetServer(ep); answ += server.DatabaseSize(); } } catch { } return answ; } } /// /// Verifica se si debba serializzare ogni valore complesso (tabelle/righe) in sessione (per impiego di sessioni avanzate come Redis) /// public bool serializeSession { get { return confReadBool("serializeSession"); } } /// /// elenco dictionary delle tab in cache da aggiornare con update svuotando da cache... /// public Dictionary tabelleInCache { get { try { return (Dictionary)objCacheObj("tabelleInCache"); } catch { return new Dictionary(); } } set { setCacheVal("tabelleInCache", value); } } /// /// elenco dictionary dei valori in session da NON aggiornare con update... /// public Dictionary valSess2SurvUpd { get { try { return (Dictionary)objSessionObj("valoriInSession2Survive"); } catch { return new Dictionary(); } } set { setSessionVal("valoriInSession2Survive", value); } } #endregion Public Properties #region Protected Methods /// /// init dei table adapters /// protected void initTA() { taUtenti = new DS_AnagraficaTableAdapters.UtentiTableAdapter(); taDiritti = new DS_AnagraficaTableAdapters.DirittiTableAdapter(); taSelFonti = new DS_utilsTableAdapters.v_selFontiTableAdapter(); taSelCommesse = new DS_utilsTableAdapters.v_selCommesseTableAdapter(); taSelFasi = new DS_utilsTableAdapters.v_selFasiTableAdapter(); taSelAutori = new DS_utilsTableAdapters.v_selAutoriTableAdapter(); taTDSelFonti = new DS_utilsTableAdapters.v_tbDocs_selFontiTableAdapter(); taTDSelCommesse = new DS_utilsTableAdapters.v_tbDocs_selCommesseTableAdapter(); taTDSelFasi = new DS_utilsTableAdapters.v_tbDocs_selFasiTableAdapter(); taTDSelOggetti = new DS_utilsTableAdapters.v_tbDocs_selOggettoTableAdapter(); taTDSelRedattore = new DS_utilsTableAdapters.v_tbDocs_selRedattoreTableAdapter(); taCalcProto = new DS_utilsTableAdapters.stp_calcolaProtocolloTableAdapter(); taEmailForn = new DS_utilsTableAdapters.v_selEmailFornitoriTableAdapter(); taAST = new DS_utilsTableAdapters.AnagSuggestTagsTableAdapter(); taVSFE = new DS_utilsTableAdapters.v_selFonti_explTableAdapter(); taDoc = new DS_WebScipTableAdapters.tbDocumentiTableAdapter(); taTags2Doc = new DS_WebScipTableAdapters.Tags2DocTableAdapter(); taTMD = new DS_WebScipTableAdapters.tbMetaDataSetTableAdapter(); taDBRefresh = new DS_WebScipTableAdapters.stp_userLoginRefreshDbTableAdapter(); } /// /// effettua setup dei connection strings da web.config delal singola applicazione /// protected virtual void setupConnectionStringBase() { string connStringETS_WS = (string)configAppSetReader.GetValue("ETS_WSConnectionString", typeof(string)); string connStringETS_WAnagrafica = (string)configAppSetReader.GetValue("ETS_AnagraficaConnectionString", typeof(string)); // connections del db taUtenti.Connection.ConnectionString = connStringETS_WAnagrafica; taDiritti.Connection.ConnectionString = connStringETS_WAnagrafica; taSelFonti.Connection.ConnectionString = connStringETS_WS; taSelCommesse.Connection.ConnectionString = connStringETS_WS; taSelFasi.Connection.ConnectionString = connStringETS_WS; taSelAutori.Connection.ConnectionString = connStringETS_WS; taTDSelFonti.Connection.ConnectionString = connStringETS_WS; taTDSelCommesse.Connection.ConnectionString = connStringETS_WS; taTDSelFasi.Connection.ConnectionString = connStringETS_WS; taTDSelOggetti.Connection.ConnectionString = connStringETS_WS; taTDSelRedattore.Connection.ConnectionString = connStringETS_WS; taCalcProto.Connection.ConnectionString = connStringETS_WS; taEmailForn.Connection.ConnectionString = connStringETS_WS; taAST.Connection.ConnectionString = connStringETS_WS; taVSFE.Connection.ConnectionString = connStringETS_WS; taDoc.Connection.ConnectionString = connStringETS_WS; taTags2Doc.Connection.ConnectionString = connStringETS_WS; taTMD.Connection.ConnectionString = connStringETS_WS; taDBRefresh.Connection.ConnectionString = connStringETS_WS; } #endregion Protected Methods #region Public Methods /// /// ripulisce la stringa da eventuali caratteri non ammessi quali /// [ .,;\/] /// e OPZIONALMENTE toglie " " (spazi) sostituendoli con "_" (underscore) /// /// stringa originale /// definisce se mantenere (true) o togliere (false) gli spazi (eventualmente sostituendo con underscore "_") /// public static string cleanPathName(string originalName, bool keepSpaces) { string answ = originalName.Trim().Replace("&", "e").Replace(".", "").Replace(",", "").Replace(";", "").Replace(":", "").Replace("/", "-").Replace(@"\", "-").Replace(@"'", "_").Replace("\"", "_").Replace("#", "_").Replace("?", "_").Replace("*", "_").Replace(" ", "_").Replace("__", "_").Replace("__", "_").Replace("__", "_").Replace("__", "_"); ; if (keepSpaces) { answ = originalName.Trim().Replace("&", "e").Replace(".", "").Replace(",", "").Replace(";", "").Replace(":", "").Replace("/", "-").Replace(@"\", "-").Replace(@"'", "_").Replace("\"", "_").Replace("#", "_").Replace("?", "_").Replace("*", "_").Replace(" ", " ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " ").Replace("__", "_").Replace("__", "_").Replace("__", "_").Replace("__", "_"); } return answ; } /// /// ripulisce la stringa da eventuali caratteri non ammessi quali /// [ .,;\/] /// e toglie " " (spazi) sostituendoli con "_" (underscore) /// /// stringa originale /// public static string cleanPathName(string originalName) { return cleanPathName(originalName, false); } /// /// restituisce, in caso di null o stringa vuota, il carattere "*" /// /// /// public static string emptyToStar(string original) { string answ = original; if ((original == null) || (original == "")) { answ = "*"; } return answ; } /// /// Effettua shring di una stringa ricudendola in lunghezza (tiene inizio/fine + eventuale ".." centrale se lungh superiore a indicata) /// /// stringa originale /// lungh max desiderata /// public static string shrinkString(string originalString, int maxLenght) { string answ = originalString; if (answ.Length > maxLenght) { string sep = utils.obj.confReadString("separatoreTrim"); int numChar = (maxLenght - sep.Length) / 2; answ = string.Format("{0}{1}{2}", answ.Substring(0, numChar), sep, answ.Substring(answ.Length - (maxLenght - 3 - numChar))); } return answ; } /// /// trimma una stringa per il num max di caratteri richiesti togliendo dal centro (tiene inizio/fine...) /// /// /// /// num caratteri da ignorare a dx /// public static string shrinkString(string stringaIn, int maxNum, int ignoreRight) { // elimino caratteri a dx.. se posso string answ = stringaIn; if (ignoreRight < stringaIn.Length) { answ = answ.Substring(0, stringaIn.Length - ignoreRight); } // effetuo shrink! answ = shrinkString(answ, maxNum); return answ; } /// /// trimma una stringa per il num max di caratteri richiesti /// /// /// public static string trimChar(object stringaIn, object maxChar) { string answ = ""; int maxNum = 0; try { answ = stringaIn.ToString(); maxNum = Convert.ToInt32(maxChar); } catch { } if (maxNum < answ.Length) { answ = answ.Substring(0, maxNum) + "..."; } return answ; } /// /// aggiunge la stringa corrente nel dictionary delle tabelle messe in cache e da aggiornare su comando update /// /// public void addTabInCache(string nuovaTab) { // provo ad aggiungere nuova tab in elenco... Dictionary _tabelleInCache = tabelleInCache; try { _tabelleInCache.Add(nuovaTab, nuovaTab); tabelleInCache = _tabelleInCache; } catch { } } /// /// aggiunge la stringa corrente nel dictionary delle tabelle messe in session che vanno preservate da comando update (es: oggetto selezionato...) /// /// /// public void addValInSession(string nomePar, string valore) { // provo ad aggiungere nuova tab in elenco... Dictionary _valoriInSession2Survive = valSess2SurvUpd; // verifico se fare update o insert... if (_valoriInSession2Survive.ContainsKey(nomePar)) { // update, rimuovo vecchio valore... try { _valoriInSession2Survive.Remove(nomePar); } catch { } } // insert try { _valoriInSession2Survive.Add(nomePar, valore); valSess2SurvUpd = _valoriInSession2Survive; } catch { } } /// /// carica dalla Cachee un dato di tipo boolean (se vuoto false) /// /// /// public bool BoolCacheObj(string nomeVar) { if (HttpContext.Current.Cache[nomeVar] != null) { return (bool)HttpContext.Current.Cache[nomeVar]; } else { return false; } } /// /// carica dalla sessione un dato di tipo boolean (se vuoto false) /// /// /// public bool BoolSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { return (bool)HttpContext.Current.Session[nomeVar]; } else { return false; } } /// /// legge dalla config un valore bool /// /// /// public bool confReadBool(string nomeParam) { bool answ = false; try { answ = (bool)configAppSetReader.GetValue(nomeParam, typeof(bool)); } catch { } return answ; } /// /// legge dalla config un valore int /// /// /// public int confReadInt(string nomeParam) { int answ = -1; try { answ = (int)configAppSetReader.GetValue(nomeParam, typeof(int)); } catch { } return answ; } /// /// legge dalla config un valore string /// /// /// public string confReadString(string nomeParam) { string answ = ""; try { answ = (string)configAppSetReader.GetValue(nomeParam, typeof(string)); } catch { } return answ; } /// /// carica dalla sessione un dato di tipo DataSet NON Tipizzato /// /// /// public DataSet dsSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { string valSer = obj.StringSessionObj(nomeVar); DataSet dataSet = JsonConvert.DeserializeObject(valSer); return dataSet; } else { return null; } } /// /// svuota una variabile dalla Cache /// /// public bool emptyCacheVal(string nome) { bool _done = false; try { HttpContext.Current.Cache.Remove(nome); _done = true; } catch { } return _done; } /// /// svuota una variabile dalla session /// /// public bool emptySessionVal(string nome) { bool _done = false; try { HttpContext.Current.Session.Remove(nome); _done = true; } catch { } return _done; } /// /// forza lo svuotamento delle tabelle indicate come in cache... /// public void flushRegisteredCache() { // elimino tutte le tab nella pos tabInCache... foreach (KeyValuePair kvp in tabelleInCache) { HttpContext.Current.Cache.Remove(kvp.Value); } HttpContext.Current.Cache.Remove("tabelleInCache"); } /// /// Restituisce una chiave COUNTER in RedisCache /// /// /// public int getRCnt(string chiave) { int answInt = 0; string answ = ""; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.StringGet(chiave); answInt = Convert.ToInt32(answ); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in getRSV:{0}{1}", Environment.NewLine, exc)); } return answInt; } /// /// Restituisce un set KVP (Key Value Pair) salvati in RedisCache /// /// /// public RedisValue[] getRKeys(RedisKey[] chiavi) { RedisValue[] answ = null; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.StringGet(chiavi); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in getRKeys:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// Restituisce una chiave salvata in RedisCache /// /// /// public string getRSV(string chiave) { string answ = ""; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.StringGet(chiave); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in getRSV:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// carica dalla sessione un dato di tipo int /// /// /// public int IntSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { return (int)Convert.ToInt32(HttpContext.Current.Session[nomeVar].ToString()); } else { return -1; } } /// /// risponde alla domanda se l'utente sia CC della commessa indicata dalla fase /// /// /// public bool isCurrentCC(int idxFase) { bool answ = false; string CapoCommessa = ""; try { CapoCommessa = DataProxy_ProjEts.DP.taDC.GetData(idxFase)[0].CapoCommessa; } catch { } if (user_std.UtSn.NomeCognome == CapoCommessa || user_std.UtSn.CognomeNome == CapoCommessa) { answ = true; } return answ; } /// /// restituisce true se è presente in cache l'oggetto richiesto /// /// /// public bool isInCacheObject(string nomeVar) { bool answ = false; bool stringAnsw = false; // cerco di fare cast a stringa... try { stringAnsw = (string)HttpContext.Current.Cache[nomeVar].ToString() != ""; } catch { } // infine condizione doppia... try { answ = (HttpContext.Current.Cache[nomeVar] != null && stringAnsw); } catch { } return answ; } /// /// restituisce true se è presente in session l'oggetto richiesto /// /// /// public bool isInSessionObject(string nomeVar) { bool answ = false; bool stringAnsw = false; // cerco di fare cast a stringa... try { if (HttpContext.Current.Session != null && HttpContext.Current.Session[nomeVar] != null) { stringAnsw = !string.IsNullOrEmpty($"{HttpContext.Current.Session[nomeVar]}"); //stringAnsw = (string)HttpContext.Current.Session[nomeVar].ToString() != ""; } } catch { } // infine condizione doppia... try { answ = (HttpContext.Current.Session[nomeVar] != null && stringAnsw); } catch { } return answ; } /// /// carica dalla sessione un dato di tipo long /// /// /// public long LongSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { return (long)Convert.ToInt32(HttpContext.Current.Session[nomeVar].ToString()); } else { return 0; } } /// /// carica dalla Cache un dato di tipo object generico /// /// /// public object objCacheObj(string nomeVar) { if (HttpContext.Current.Cache[nomeVar] != null) { return HttpContext.Current.Cache[nomeVar]; } else { return ""; } } /// /// carica dalla sessione un dato di tipo object generico /// /// /// public object objSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { return HttpContext.Current.Session[nomeVar]; } else { return ""; } } /// /// recupera valore querystring BOOL /// /// /// valore string public bool QSB(string nome) { bool answ = false; try { answ = Convert.ToBoolean(HttpContext.Current.Request.QueryString[nome]); } catch { } return answ; } /// /// recupera valore querystring DATE /// /// /// valore DATE public DateTime QSD(string nome) { DateTime answ = DateTime.Now; try { answ = Convert.ToDateTime(HttpContext.Current.Request.QueryString[nome]); } catch { } return answ; } /// /// recupera valore querystring INT /// /// /// valore INT public int QSI(string nome) { int answ = 0; try { answ = Convert.ToInt32(HttpContext.Current.Request.QueryString[nome]); } catch { } return answ; } /// /// recupera valore querystring STRING /// /// /// valore string public string QSS(string nome) { string answ = ""; try { answ = HttpContext.Current.Request.QueryString[nome].ToString().Trim(); } catch { } return answ; } /// /// Elimina una key (hash, string) /// /// /// public bool redDelKey(string key) { bool answ = false; // cerco se ci sia valore in redis... IDatabase cache = connRedis.GetDatabase(); try { RedisKey chiave = key; cache.KeyDelete(chiave); answ = true; } catch { } return answ; } /// /// Flush completo cache redis /// /// ** = tutti /// public bool redFlushKey(string keyPattern) { bool answ = false; // cerco se ci sia valore in redis... IDatabase cache = connRedis.GetDatabase(); // se vuoto = ALL... keyPattern = keyPattern == "" ? "**" : keyPattern; try { foreach (var ep in connRedis.GetEndPoints()) { var server = connRedis.GetServer(ep); foreach (var key in server.Keys(pattern: keyPattern)) { cache.KeyDelete(key); } } answ = true; } catch (Exception exc) { utils.lg.Error(string.Format("{0}", exc)); } return answ; } /// /// Recupera tutti i valori dalla hash /// /// /// public KeyValuePair[] redGetHash(string hashKey) { KeyValuePair[] answ = new KeyValuePair[1]; // cerco se ci sia valore in redis... IDatabase cache = connRedis.GetDatabase(); try { RedisKey chiave = hashKey; HashEntry[] valori = cache.HashGetAll(chiave); answ = new KeyValuePair[valori.Length]; int i = 0; foreach (HashEntry item in valori) { answ[i] = new KeyValuePair(item.Name, item.Value); i++; } } catch { } return answ; } /// /// Nome della variabile HASH da utilizzare dato CodModulo + keyName richiesto... /// public string redHash(string keyName) { string answ = keyName; try { answ = $"{confReadString("CodModulo")}:{keyName}".Replace("\\", "_").Replace(" ", "_"); } catch { } return answ; } /// /// Verifica se ci siano valori nella hash indicata... /// /// /// public bool redHashPresent(RedisKey key) { bool answ = false; // cerco se ci sia valore in redis... IDatabase cache = connRedis.GetDatabase(); try { answ = cache.HashGetAll(key).Length > 0; } catch { } return answ; } /// /// Salvataggio di una hash di valori /// /// /// /// public bool redSaveHash(string hashKey, KeyValuePair[] hashFields) { bool answ = false; // cerco se ci sia valore in redis... IDatabase cache = connRedis.GetDatabase(); try { RedisKey chiave = hashKey; HashEntry[] valori = new HashEntry[hashFields.Length]; int i = 0; foreach (KeyValuePair kvp in hashFields) { valori[i] = new HashEntry(kvp.Key, kvp.Value); i++; } cache.HashSet(chiave, valori); answ = true; } catch { } return answ; } /// /// Resetta (elimina) un contatore in Redis /// /// /// public bool resetRCnt(string chiave) { bool answ = false; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.KeyDelete(chiave); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in resetRCnt:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// inserisce in Cache un valore /// /// nome della variabile /// valore public bool setCacheVal(string nome, object valore) { bool _done = false; try { HttpContext.Current.Cache[nome] = valore; _done = true; } catch { } return _done; } /// /// inserisce in Cache un valore e su richiesta regitra tra le tab in cache da svuotare on update.. /// /// nome della variabile /// valore /// da registrare come tabella da svuotare on update /// public bool setCacheVal(string nome, object valore, bool setInTabInCache) { bool _done = setCacheVal(nome, valore); if (setInTabInCache) { addTabInCache(nome); } return _done; } /// /// Decrementa un contatore in Redis /// /// /// public long setRCntD(string chiave) { long answ = 0; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.StringDecrement(chiave, 1); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in setRCD:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// Incrementa un contatore in Redis /// /// /// public long setRCntI(string chiave) { long answ = 0; try { IDatabase cache = connRedis.GetDatabase(); answ = cache.StringIncrement(chiave, 1); } catch (Exception exc) { utils.lg.Error(string.Format("Errore in setRCI:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// Salva un set KVP (Key Value Pair) in RedisCache /// /// Set KVP chiave-valore da salvare /// public bool setRKeys(KeyValuePair[] valori) { bool answ = false; try { IDatabase cache = connRedis.GetDatabase(); cache.StringSet(valori); answ = true; } catch (Exception exc) { utils.lg.Error(string.Format("Errore in setRKeys:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// Salva una chiave in RedisCache /// /// /// /// public bool setRSV(string chiave, string valore) { bool answ = false; try { IDatabase cache = connRedis.GetDatabase(); cache.StringSet(chiave, valore); answ = true; } catch (Exception exc) { utils.lg.Error(string.Format("Errore in setRSV:{0}{1}", Environment.NewLine, exc)); } return answ; } /// /// Salva una chiave in RedisCache /// /// /// /// in secondi /// public bool setRSV(string chiave, string valore, int TTL_sec) { bool answ = false; try { TimeSpan expT = new TimeSpan(0, 0, TTL_sec); // salvo con expiry... IDatabase cache = connRedis.GetDatabase(); cache.StringSet(chiave, valore, expT); answ = true; } catch (Exception exc) { utils.lg.Error($"Errore in setRSV | chiave: {chiave} | valore: {valore} | TTL: {TTL_sec}{Environment.NewLine}{exc}"); } return answ; } /// /// inserisce in session un valore /// /// /// public bool setSessionVal(string nome, object valore) { bool _done = false; try { HttpContext.Current.Session[nome] = valore; _done = true; } catch { } return _done; } /// /// carica dalla Cachee un dato di tipo string /// /// /// public string StringCacheObj(string nomeVar) { if (HttpContext.Current.Cache[nomeVar] != null) { return HttpContext.Current.Cache[nomeVar].ToString(); } else { return ""; } } /// /// carica dalla sessione un dato di tipo string /// /// /// public string StringSessionObj(string nomeVar) { if (HttpContext.Current.Session[nomeVar] != null) { return HttpContext.Current.Session[nomeVar].ToString(); } else { return ""; } } /// /// WRAPPER calcola se l'utente abbia il diritto x la funzione indicata /// /// username formato AD /// codice modulo /// codice funzione /// public bool userHasRight(string utenteAD, string codModulo, string codFunzione) { return user_std.UtSn.userHasRight(utenteAD, codModulo, codFunzione); } #endregion Public Methods #region Public Classes /// /// classe di gestione delle email /// public class gestEmail { #region Protected Fields /// /// stringa pwd x server SMTP /// protected string _password; /// /// stringa del nome DNS o dell'ip del server SMTP /// protected string _smtpCli; /// /// stringa username x server SMTP /// protected string _username; protected Logger lg = LogManager.GetCurrentClassLogger(); #endregion Protected Fields #region Public Fields /// /// metodo singleton gestione email... /// public static gestEmail ge = new gestEmail(utils.obj.confReadString("_smtpCli")); /// /// metodo singleton gestione email CON AUTH utente... /// public static gestEmail geAuth = new gestEmail(utils.obj.confReadString("_smtpCli"), utils.obj.confReadString("_emailUser"), utils.obj.confReadString("_emailPwd")); #endregion Public Fields #region Public Constructors /// /// metodo static per la gestione delle email /// /// public gestEmail(string smtpCli) { lg.Info("[Modulo gestEmail]: avviato con parametro smtp {0}", smtpCli); _smtpCli = smtpCli; _username = ""; _password = ""; } /// /// metodo static per la gestione delle email /// /// /// /// public gestEmail(string smtpCli, string user, string pwd) { lg.Info("[Modulo gestEmail]: avviato con parametro smtp {0} ed utente {1}", smtpCli, user); _smtpCli = smtpCli; _username = user; _password = pwd; } /// /// metodo static per la gestione delle email /// /// /// public gestEmail(string smtpCli, string logDir) { lg.Info("[Modulo gestEmail]: avviato con parametro smtp {0} e logdir {1}", smtpCli, logDir); _smtpCli = smtpCli; _username = ""; _password = ""; } #endregion Public Constructors #region Public Methods /// /// procedura invio email + scrittura in log! /// /// email mittente /// email destinatario /// oggetto dell'email /// corpo del messaggio public bool mandaEmail(string _mailFrom, string _mailTo, string _oggetto, string _corpo) { bool fatto = false; //manda email... try { fatto = mandaEmailNoLog(_mailFrom, _mailTo, _oggetto, _corpo); lg.Info("Email inviata: oggetto: {0}, corpo: {1}", _oggetto, _corpo); } catch (Exception exc) { lg.Error($"ERRORE! Email NON INVIATA!oggetto: {_oggetto} corpo: {_corpo} eccezione:{Environment.NewLine}{exc}"); } return fatto; } /// /// procedura invio email /// /// email mittente /// email destinatario /// oggetto dell'email /// corpo del messaggio public bool mandaEmailNoLog(string _mailFrom, string _mailTo, string _oggetto, string _corpo) { //manda email... MailMessage messaggio = new MailMessage(_mailFrom, _mailTo, _oggetto, _corpo); messaggio.IsBodyHtml = true; SmtpClient _smtpClient = new SmtpClient(_smtpCli); // se ci sono credenziali utente... if (_username != "") { _smtpClient.Credentials = new System.Net.NetworkCredential(_username, _password); _smtpClient.EnableSsl = utils.obj.confReadBool("_enableSSL"); } try { _smtpClient.Send(messaggio); return true; } catch (SmtpException esmtp) { Console.WriteLine("{0}", esmtp.Message); Console.WriteLine("Here is the full error message output"); Console.Write("{0}", esmtp.ToString()); lg.Error($"{esmtp.Message}{Environment.NewLine}full error message:{Environment.NewLine}{esmtp}"); return false; } } #endregion Public Methods } #endregion Public Classes } }