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