diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs
index 2251806c..e944a4ab 100644
--- a/MapoDb/DataLayer.cs
+++ b/MapoDb/DataLayer.cs
@@ -7,490 +7,490 @@ using System.Threading;
namespace MapoDb
{
+ ///
+ /// classe gestione operazioni su DB tramite MapoDb
+ ///
+ public class DataLayer
+ {
+ #region area table adapters
+
+ // Table adapter x DS_Applicazione
+ public DS_applicazioneTableAdapters.MacchineTableAdapter taMacchine;
+ public DS_applicazioneTableAdapters.StatoMacchineTableAdapter taStatoMacchine;
+ public DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter taAnagEventi;
+ public DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter taAnagStati;
+ public DS_applicazioneTableAdapters.KeepAliveTableAdapter taKeepAlive;
+ public DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taStati;
+ public DS_applicazioneTableAdapters.EventListTableAdapter taEventi;
+ public DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter taOp;
+ public DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter taOp2ins;
+ public DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter taTranIngr;
+ public DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter taRemReb;
+ public DS_applicazioneTableAdapters.SignalLogTableAdapter taSigLog;
+ // Table adapter x DS_ProdTempi
+ public DS_ProdTempiTableAdapters.AnagArticoliTableAdapter taAnagArt;
+ public DS_ProdTempiTableAdapters.ODLTableAdapter taODL;
+ public DS_ProdTempiTableAdapters.DatiMacchineTableAdapter taDatiMacchine;
+ public DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaTableAdapter taDatiProdMacch;
+ public DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaPeriodoTableAdapter taDatiProdMacchPer;
+ public DS_ProdTempiTableAdapters.stp_repDonati_getLastStatoDurataMacchinaTableAdapter taDatiStatoMacch;
+ public DS_ProdTempiTableAdapters.PostazioniMapoTableAdapter taPostazioni;
+ public DS_ProdTempiTableAdapters.DatiConfermatiTableAdapter taDatiConfermati;
+ public DS_ProdTempiTableAdapters.stp_PzProd_getByMacchinaTableAdapter taPzProd2conf;
+ public DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter taTempiCicloRilevati;
+ public DS_ProdTempiTableAdapters.DatiProduzioneTableAdapter taDatiProd;
+ public DS_ProdTempiTableAdapters.stp_TempoByIdxMaccPeriodClassTableAdapter taTempoByClass;
+ public DS_ProdTempiTableAdapters.TurniMacchinaTableAdapter taTurniMacc;
+ public DS_ProdTempiTableAdapters.CalendFesteFerieTableAdapter taCalFF;
+ public DS_ProdTempiTableAdapters.MappaStatoExplTableAdapter taMSE;
+ public DS_ProdTempiTableAdapters.ProduzioneAs400TableAdapter taAs400;
+ // table adapter x utility
+ public DS_UtilityTableAdapters.v_selArticoliTableAdapter taSelArt;
+ public DS_UtilityTableAdapters.v_selODLTableAdapter taSelOdlFree;
+ public DS_UtilityTableAdapters.CommentiTableAdapter taComm;
+
+
///
- /// classe gestione operazioni su DB tramite MapoDb
+ /// init dei table adapters
///
- public class DataLayer
+ protected void initTA()
{
- #region area table adapters
-
- // Table adapter x DS_Applicazione
- public DS_applicazioneTableAdapters.MacchineTableAdapter taMacchine;
- public DS_applicazioneTableAdapters.StatoMacchineTableAdapter taStatoMacchine;
- public DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter taAnagEventi;
- public DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter taAnagStati;
- public DS_applicazioneTableAdapters.KeepAliveTableAdapter taKeepAlive;
- public DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taStati;
- public DS_applicazioneTableAdapters.EventListTableAdapter taEventi;
- public DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter taOp;
- public DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter taOp2ins;
- public DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter taTranIngr;
- public DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter taRemReb;
- public DS_applicazioneTableAdapters.SignalLogTableAdapter taSigLog;
- // Table adapter x DS_ProdTempi
- public DS_ProdTempiTableAdapters.AnagArticoliTableAdapter taAnagArt;
- public DS_ProdTempiTableAdapters.ODLTableAdapter taODL;
- public DS_ProdTempiTableAdapters.DatiMacchineTableAdapter taDatiMacchine;
- public DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaTableAdapter taDatiProdMacch;
- public DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaPeriodoTableAdapter taDatiProdMacchPer;
- public DS_ProdTempiTableAdapters.stp_repDonati_getLastStatoDurataMacchinaTableAdapter taDatiStatoMacch;
- public DS_ProdTempiTableAdapters.PostazioniMapoTableAdapter taPostazioni;
- public DS_ProdTempiTableAdapters.DatiConfermatiTableAdapter taDatiConfermati;
- public DS_ProdTempiTableAdapters.stp_PzProd_getByMacchinaTableAdapter taPzProd2conf;
- public DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter taTempiCicloRilevati;
- public DS_ProdTempiTableAdapters.DatiProduzioneTableAdapter taDatiProd;
- public DS_ProdTempiTableAdapters.stp_TempoByIdxMaccPeriodClassTableAdapter taTempoByClass;
- public DS_ProdTempiTableAdapters.TurniMacchinaTableAdapter taTurniMacc;
- public DS_ProdTempiTableAdapters.CalendFesteFerieTableAdapter taCalFF;
- public DS_ProdTempiTableAdapters.MappaStatoExplTableAdapter taMSE;
- public DS_ProdTempiTableAdapters.ProduzioneAs400TableAdapter taAs400;
- // table adapter x utility
- public DS_UtilityTableAdapters.v_selArticoliTableAdapter taSelArt;
- public DS_UtilityTableAdapters.v_selODLTableAdapter taSelOdlFree;
- public DS_UtilityTableAdapters.CommentiTableAdapter taComm;
-
-
- ///
- /// init dei table adapters
- ///
- protected void initTA()
- {
- // istanzio oggetto
- taMacchine = new DS_applicazioneTableAdapters.MacchineTableAdapter();
- taStatoMacchine = new DS_applicazioneTableAdapters.StatoMacchineTableAdapter();
- taAnagEventi = new DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter();
- taAnagStati = new DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter();
- taKeepAlive = new DS_applicazioneTableAdapters.KeepAliveTableAdapter();
- taStati = new DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter();
- taEventi = new DS_applicazioneTableAdapters.EventListTableAdapter();
- taOp = new DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter();
- taOp2ins = new DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter();
- taTranIngr = new DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter();
- taRemReb = new DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter();
- taSigLog = new DS_applicazioneTableAdapters.SignalLogTableAdapter();
- taAnagArt = new DS_ProdTempiTableAdapters.AnagArticoliTableAdapter();
- taODL = new DS_ProdTempiTableAdapters.ODLTableAdapter();
- taDatiMacchine = new DS_ProdTempiTableAdapters.DatiMacchineTableAdapter();
- taDatiProdMacch = new DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaTableAdapter();
- taDatiProdMacchPer = new DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaPeriodoTableAdapter();
- taDatiStatoMacch = new DS_ProdTempiTableAdapters.stp_repDonati_getLastStatoDurataMacchinaTableAdapter();
- taPostazioni = new DS_ProdTempiTableAdapters.PostazioniMapoTableAdapter();
- taTurniMacc = new DS_ProdTempiTableAdapters.TurniMacchinaTableAdapter();
- taDatiConfermati = new DS_ProdTempiTableAdapters.DatiConfermatiTableAdapter();
- taPzProd2conf = new DS_ProdTempiTableAdapters.stp_PzProd_getByMacchinaTableAdapter();
- taTempiCicloRilevati = new DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter();
- taDatiProd = new DS_ProdTempiTableAdapters.DatiProduzioneTableAdapter();
- taTempoByClass = new DS_ProdTempiTableAdapters.stp_TempoByIdxMaccPeriodClassTableAdapter();
- taCalFF = new DS_ProdTempiTableAdapters.CalendFesteFerieTableAdapter();
- taMSE = new DS_ProdTempiTableAdapters.MappaStatoExplTableAdapter();
- taAs400 = new DS_ProdTempiTableAdapters.ProduzioneAs400TableAdapter();
- taSelArt = new DS_UtilityTableAdapters.v_selArticoliTableAdapter();
- taSelOdlFree = new DS_UtilityTableAdapters.v_selODLTableAdapter();
- taComm = new DS_UtilityTableAdapters.CommentiTableAdapter();
- }
- ///
- /// effettua setup dei connection strings da web.config delal singola applicazione
- ///
- protected virtual void setupConnectionStringBase()
- {
- string connectionString = memLayer.ML.confReadString("MoonProConnectionString");
- // connections del db
- taMacchine.Connection.ConnectionString = connectionString;
- taStatoMacchine.Connection.ConnectionString = connectionString;
- taAnagEventi.Connection.ConnectionString = connectionString;
- taAnagStati.Connection.ConnectionString = connectionString;
- taKeepAlive.Connection.ConnectionString = connectionString;
- taStati.Connection.ConnectionString = connectionString;
- taEventi.Connection.ConnectionString = connectionString;
- taOp.Connection.ConnectionString = connectionString;
- taOp2ins.Connection.ConnectionString = connectionString;
- taTranIngr.Connection.ConnectionString = connectionString;
- taRemReb.Connection.ConnectionString = connectionString;
- taSigLog.Connection.ConnectionString = connectionString;
- taAnagArt.Connection.ConnectionString = connectionString;
- taODL.Connection.ConnectionString = connectionString;
- taDatiMacchine.Connection.ConnectionString = connectionString;
- taDatiProdMacch.Connection.ConnectionString = connectionString;
- taDatiProdMacchPer.Connection.ConnectionString = connectionString;
- taDatiStatoMacch.Connection.ConnectionString = connectionString;
- taPostazioni.Connection.ConnectionString = connectionString;
- taTurniMacc.Connection.ConnectionString = connectionString;
- taDatiConfermati.Connection.ConnectionString = connectionString;
- taPzProd2conf.Connection.ConnectionString = connectionString;
- taTempiCicloRilevati.Connection.ConnectionString = connectionString;
- taDatiProd.Connection.ConnectionString = connectionString;
- taTempoByClass.Connection.ConnectionString = connectionString;
- taCalFF.Connection.ConnectionString = connectionString;
- taMSE.Connection.ConnectionString = connectionString;
- taAs400.Connection.ConnectionString = connectionString;
- taSelArt.Connection.ConnectionString = connectionString;
- taSelOdlFree.Connection.ConnectionString = connectionString;
- taComm.Connection.ConnectionString = connectionString;
- }
-
- #endregion
-
- #region Inizializzazione
-
- protected DataLayer()
- {
- initTA();
- setupConnectionStringBase();
-
- // aggiunta x gestione timeout esteso (ove necessario)!
- fixCommandTimeout();
- }
-
- ///
- /// sistemazione timeout comandi nei tableadapter
- ///
- private void fixCommandTimeout()
- {
- //SetAllCommandTimeouts(taQL, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taQFQ, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taQRM, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taRMD, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taSCL, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taVSCli, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taVSItm, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taVSRM, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taRPT, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taO4I, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taOH, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- //SetAllCommandTimeouts(taSC2C, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- SetAllCommandTimeouts(taComm, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
- }
- void SetAllCommandTimeouts(object adapter, int timeout)
- {
- var commands = adapter.GetType().InvokeMember(
- "CommandCollection",
- BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
- null, adapter, new object[0]);
- var sqlCommand = (SqlCommand[])commands;
- foreach (var cmd in sqlCommand)
- {
- cmd.CommandTimeout = timeout;
- }
- }
- ///
- /// oggetto static per fare chiamate sul magazzino
- ///
- public static DataLayer obj = new DataLayer();
-
- #endregion
-
- #region utility public esposte
-
- ///
- /// Effettua conferma prod macchina dell'intero periodo da confermare (ultima conferma --> adesso)
- ///
- /// idx macchina da confermare
- /// 0=periodo, 1 = giorno, 2 = turno
- /// qta pezzi BUONI da confermare
- /// qta pezzi SCARTO da confermare
- ///
- public bool confermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzScarto)
- {
- bool answ = false;
- try
- {
- DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayer.obj.taPzProd2conf.GetData(idxMacchina.ToString())[0];
- // chiamo stored stp_ConfermaProduzCompleta(idxMacchina,MatrApp,dataFrom,dataTo,pezziConf)
- taPzProd2conf.stp_ConfermaProduzCompleta(idxMacchina, MatrOpr, rigaProd.DataFrom, rigaProd.DataTo, numPzConfermati, numPzScarto, modoConfProd, DateTime.Now, true);
- // indico eseguito!
- answ = true;
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog(string.Format("Errore in conferma prod macchina:{0}{1}", Environment.NewLine, exc));
- }
- return answ;
- }
-
- ///
- /// invia una mail al destinatario x linkare nuovi devices tramite URL
- ///
- ///
- ///
- ///
- ///
- public bool sendUserAuthEmail(string destinatario, string UserAuthKey, int idxDipendente)
- {
- bool fatto = false;
- string smtpCli = "";
- string mittente = "";
- string oggetto = "";
- string userUrl = "";
- string baseUrl = "";
- string userWebUrl = "";
- string baseWebUrl = "";
- string corpo = "";
- try
- {
- // compongo la stringa
- smtpCli = memLayer.ML.confReadString("_smtpCli");
- 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.aspx?UserAuthkey={0}&idxDipendente={1}", UserAuthKey, idxDipendente, baseUrl);
- userWebUrl = string.Format("{2}jumper.aspx?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}
Per proseguire clicca sul link seguente(rete interna):
{0}{0}{1}{0}{0}
oppure sul link seguente (internet):
{0}{0}{2}{0}{0}
Team GPW Steamware", Environment.NewLine, userUrl, userWebUrl);
- gestEmail.ge.mandaEmail(mittente, destinatario, oggetto, corpo);
- fatto = true;
- }
- catch
- { }
- return fatto;
- }
- ///
- /// Invia email di avviso che ci sono dei TC da confermare
- ///
- ///
- ///
- public bool sendWarnTcChangeReq(string destinatario)
- {
- bool fatto = false;
- string mittente = "";
- string oggetto = "";
- string pageUrl = "";
- string corpo = "";
- try
- {
- // compongo la stringa
- mittente = memLayer.ML.confReadString("_fromEmail");
- oggetto = memLayer.ML.confReadString("oggettoChgTc");
- pageUrl = string.Format("{0}{1}", memLayer.ML.confReadString("baseUrlAdmin"), memLayer.ML.confReadString("pageUrlApprODL"));
- corpo = string.Format(memLayer.ML.confReadString("corpoChgTc"), Environment.NewLine, pageUrl);
- if (memLayer.ML.confReadBool("_useAuthSmtp"))
- {
- gestEmail.geAuth.mandaEmail(mittente, destinatario, oggetto, corpo);
- }
- else
- {
- gestEmail.ge.mandaEmail(mittente, destinatario, oggetto, corpo);
- }
- fatto = true;
- }
- catch
- { }
- return fatto;
- }
-
- ///
- /// effettua enroll del device
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public bool enrollDevice(string UserAuthKey, string IPv4, string DeviceName, string Description, int matricola)
- {
- bool fatto = false;
- // in primis testo se dipendente ed authKey sono validi..
- if (taOp.getByMatrAuthKey(matricola, UserAuthKey).Rows.Count > 0)
- {
- // salvo matrOpr
- MatrOpr = matricola;
- /************************************************
- * 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
- *
- *
- * **********************************************/
- // calcolo il secret...
- DateTime adesso = DateTime.Now;
- string Dominio = memLayer.ML.confReadString("dominio");
- string UsrName = memLayer.ML.confReadString("user");
- // recupero dati da matricola...
- try
- {
- DataLayer_AnagGen.UTENTERow rigaUt = user_std.UtSn.rigaUtenteDaMatricola(matricola.ToString());
- if (rigaUt != null)
- {
- Dominio = rigaUt.DOMINIO;
- UsrName = rigaUt.USER_NAME;
- }
- else
- {
- logger.lg.scriviLog(string.Format("non sono riuscito a recuperare RIGA utente per matricola {0}", matricola), tipoLog.ERROR);
- }
- }
- catch
- {
- logger.lg.scriviLog(string.Format("Eccezione! non sono riuscito a recuperare utente per matricola {0}", matricola), tipoLog.ERROR);
- Dominio = memLayer.ML.confReadString("dominio");
- UsrName = memLayer.ML.confReadString("user");
- }
- string Secret = authProxy.getSecret(Dominio, UsrName, matricola, DeviceName, adesso);
- string devSecret = SteamCrypto.EncryptString(Secret, memLayer.ML.confReadString("cookieName"));
- try
- {
- // creo device + cookie!
- fatto = authProxy.createNewCookie(Dominio, UsrName, matricola, DeviceName, Description, IPv4, memLayer.ML.confReadString("cookieName"), DateTime.Now.AddDays(memLayer.ML.confReadInt("cookieDayExpire")));
- // loggo!
- logger.lg.scriviLog(string.Format("Effettuato enroll nuovo device: utente {0}\\{1} | matricola {2} | DeviceName {3} | Descrizione {4} | IP {5} | nome cookcie {6} | valido sino a {7:yyyy/MM/dd}", Dominio, UsrName, matricola, DeviceName, Description, IPv4, memLayer.ML.confReadString("cookieName"), DateTime.Now.AddDays(memLayer.ML.confReadInt("cookieDayExpire"))));
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog(string.Format("Errore enroll nuovo device:{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
- }
- }
- return fatto;
- }
- ///
- /// MatrOpr in sessione
- ///
- public static int MatrOpr
- {
- get
- {
- int idx = 0;
- try
- {
- idx = memLayer.ML.IntSessionObj("MatrOpr");
- }
- catch
- { }
- return idx;
- }
- set
- {
- memLayer.ML.setSessionVal("MatrOpr", value);
- }
- }
- ///
- /// Cognome Nome da MatrOpr in sessione
- ///
- public static string CognomeNomeOpr
- {
- get
- {
- // cerco operatore...
- string answ = "";
- try
- {
- DS_applicazione.AnagraficaOperatoriRow oper = (DS_applicazione.AnagraficaOperatoriRow)DataLayer.obj.taOp.getByMatrOpr(MatrOpr)[0];
- answ = string.Format("{0} {1}", oper.Cognome, oper.Nome);
- }
- catch
- { }
- return answ;
- }
- }
- ///
- /// Processa input da IOB eventualmente registrando i segnali inviati
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static string processInput(string idxMacchina, string valore, string dtEve, string dtCurr, string contatore)
- {
-
- string answ = "";
- DateTime dataOraEvento = DateTime.Now;
- DateTime dtEvento, dtCorrente;
- // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo dataOraEvento corretto
- if (dtEve != dtCurr)
- {
- Int64 delta = 0;
- try
- {
- // se ho meno decimali x evento rispetto dtCorrente...
- if (dtEve.Length < dtCurr.Length)
- {
- dtEve = dtEve.PadRight(dtCurr.Length, '0');
- }
- delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
- // se meno di 60'000 ms ...
- if (delta < 59999)
- {
- dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
- }
- else
- {
- // in questo caso elimino i MS dalle stringhe e converto i datetime....
- CultureInfo provider = CultureInfo.InvariantCulture;
- string format = "yyyyMMddHHmmssfff";
- dtEvento = DateTime.ParseExact(dtEve, format, provider);
- dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
- Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
- dataOraEvento = dataOraEvento.AddTicks(-tiks);
- }
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog(string.Format("Errore calcolo ms evento/ora corrente da device remoto:{0}dtEve: {1}{0}dtCurr: {2}{0}{3}", Environment.NewLine, dtEve, dtCurr, exc), tipoLog.EXCEPTION);
- }
- }
- //
- if (idxMacchina != null && valore != null)
- {
- if (idxMacchina != "" && valore != "")
- {
- // 2016.12.23 modifica x recording catena di input...
- // se abilitato registro evento sul DB
- int idxMacc = 0;
- try
- {
- idxMacc = Convert.ToInt32(idxMacchina);
- }
- catch
- { }
- if (idxMacc > 0 && MapoDb.obj.sLogEnabled(idxMacc))
- {
- MapoDb.obj.saveSigLog(idxMacchina, valore, dataOraEvento, contatore);
- }
- // continuo col resto
- try
- {
- // ora processo e salvo il valore del microstato...
- MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore);
- answ = "OK"; // registro in risposta che è andato tutto bene...
- }
- catch (Exception exc)
- {
- if (memLayer.ML.confReadInt("_logLevel") > 5)
- {
- string errore = string.Format("Errore: {0}{1}", Environment.NewLine, exc);
- logger.lg.scriviLog(errore, tipoLog.EXCEPTION);
- answ = errore;
- }
- }
- }
- else
- {
- string errore = "Errore: parametri macchina/valore vuoti";
- logger.lg.scriviLog(errore, tipoLog.ERROR);
- answ = errore;
- }
- }
- else
- {
- string errore = "Errore: mancano parametri macchina/valore";
- logger.lg.scriviLog(errore, tipoLog.ERROR);
- answ = errore;
- }
- return answ;
- }
-
- #endregion
+ // istanzio oggetto
+ taMacchine = new DS_applicazioneTableAdapters.MacchineTableAdapter();
+ taStatoMacchine = new DS_applicazioneTableAdapters.StatoMacchineTableAdapter();
+ taAnagEventi = new DS_applicazioneTableAdapters.AnagraficaEventiTableAdapter();
+ taAnagStati = new DS_applicazioneTableAdapters.AnagraficaStatiTableAdapter();
+ taKeepAlive = new DS_applicazioneTableAdapters.KeepAliveTableAdapter();
+ taStati = new DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter();
+ taEventi = new DS_applicazioneTableAdapters.EventListTableAdapter();
+ taOp = new DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter();
+ taOp2ins = new DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter();
+ taTranIngr = new DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter();
+ taRemReb = new DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter();
+ taSigLog = new DS_applicazioneTableAdapters.SignalLogTableAdapter();
+ taAnagArt = new DS_ProdTempiTableAdapters.AnagArticoliTableAdapter();
+ taODL = new DS_ProdTempiTableAdapters.ODLTableAdapter();
+ taDatiMacchine = new DS_ProdTempiTableAdapters.DatiMacchineTableAdapter();
+ taDatiProdMacch = new DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaTableAdapter();
+ taDatiProdMacchPer = new DS_ProdTempiTableAdapters.stp_repDonati_getDatiProdMacchinaPeriodoTableAdapter();
+ taDatiStatoMacch = new DS_ProdTempiTableAdapters.stp_repDonati_getLastStatoDurataMacchinaTableAdapter();
+ taPostazioni = new DS_ProdTempiTableAdapters.PostazioniMapoTableAdapter();
+ taTurniMacc = new DS_ProdTempiTableAdapters.TurniMacchinaTableAdapter();
+ taDatiConfermati = new DS_ProdTempiTableAdapters.DatiConfermatiTableAdapter();
+ taPzProd2conf = new DS_ProdTempiTableAdapters.stp_PzProd_getByMacchinaTableAdapter();
+ taTempiCicloRilevati = new DS_ProdTempiTableAdapters.TempiCicloRilevatiTableAdapter();
+ taDatiProd = new DS_ProdTempiTableAdapters.DatiProduzioneTableAdapter();
+ taTempoByClass = new DS_ProdTempiTableAdapters.stp_TempoByIdxMaccPeriodClassTableAdapter();
+ taCalFF = new DS_ProdTempiTableAdapters.CalendFesteFerieTableAdapter();
+ taMSE = new DS_ProdTempiTableAdapters.MappaStatoExplTableAdapter();
+ taAs400 = new DS_ProdTempiTableAdapters.ProduzioneAs400TableAdapter();
+ taSelArt = new DS_UtilityTableAdapters.v_selArticoliTableAdapter();
+ taSelOdlFree = new DS_UtilityTableAdapters.v_selODLTableAdapter();
+ taComm = new DS_UtilityTableAdapters.CommentiTableAdapter();
}
+ ///
+ /// effettua setup dei connection strings da web.config delal singola applicazione
+ ///
+ protected virtual void setupConnectionStringBase()
+ {
+ string connectionString = memLayer.ML.confReadString("MoonProConnectionString");
+ // connections del db
+ taMacchine.Connection.ConnectionString = connectionString;
+ taStatoMacchine.Connection.ConnectionString = connectionString;
+ taAnagEventi.Connection.ConnectionString = connectionString;
+ taAnagStati.Connection.ConnectionString = connectionString;
+ taKeepAlive.Connection.ConnectionString = connectionString;
+ taStati.Connection.ConnectionString = connectionString;
+ taEventi.Connection.ConnectionString = connectionString;
+ taOp.Connection.ConnectionString = connectionString;
+ taOp2ins.Connection.ConnectionString = connectionString;
+ taTranIngr.Connection.ConnectionString = connectionString;
+ taRemReb.Connection.ConnectionString = connectionString;
+ taSigLog.Connection.ConnectionString = connectionString;
+ taAnagArt.Connection.ConnectionString = connectionString;
+ taODL.Connection.ConnectionString = connectionString;
+ taDatiMacchine.Connection.ConnectionString = connectionString;
+ taDatiProdMacch.Connection.ConnectionString = connectionString;
+ taDatiProdMacchPer.Connection.ConnectionString = connectionString;
+ taDatiStatoMacch.Connection.ConnectionString = connectionString;
+ taPostazioni.Connection.ConnectionString = connectionString;
+ taTurniMacc.Connection.ConnectionString = connectionString;
+ taDatiConfermati.Connection.ConnectionString = connectionString;
+ taPzProd2conf.Connection.ConnectionString = connectionString;
+ taTempiCicloRilevati.Connection.ConnectionString = connectionString;
+ taDatiProd.Connection.ConnectionString = connectionString;
+ taTempoByClass.Connection.ConnectionString = connectionString;
+ taCalFF.Connection.ConnectionString = connectionString;
+ taMSE.Connection.ConnectionString = connectionString;
+ taAs400.Connection.ConnectionString = connectionString;
+ taSelArt.Connection.ConnectionString = connectionString;
+ taSelOdlFree.Connection.ConnectionString = connectionString;
+ taComm.Connection.ConnectionString = connectionString;
+ }
+
+ #endregion
+
+ #region Inizializzazione
+
+ protected DataLayer()
+ {
+ initTA();
+ setupConnectionStringBase();
+
+ // aggiunta x gestione timeout esteso (ove necessario)!
+ fixCommandTimeout();
+ }
+
+ ///
+ /// sistemazione timeout comandi nei tableadapter
+ ///
+ private void fixCommandTimeout()
+ {
+ //SetAllCommandTimeouts(taQL, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taQFQ, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taQRM, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taRMD, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taSCL, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taVSCli, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taVSItm, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taVSRM, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taRPT, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taO4I, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taOH, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ //SetAllCommandTimeouts(taSC2C, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ SetAllCommandTimeouts(taComm, memLayer.ML.confReadInt("sqlLongCommandTimeout"));
+ }
+ void SetAllCommandTimeouts(object adapter, int timeout)
+ {
+ var commands = adapter.GetType().InvokeMember(
+ "CommandCollection",
+ BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
+ null, adapter, new object[0]);
+ var sqlCommand = (SqlCommand[])commands;
+ foreach (var cmd in sqlCommand)
+ {
+ cmd.CommandTimeout = timeout;
+ }
+ }
+ ///
+ /// oggetto static per fare chiamate sul magazzino
+ ///
+ public static DataLayer obj = new DataLayer();
+
+ #endregion
+
+ #region utility public esposte
+
+ ///
+ /// Effettua conferma prod macchina dell'intero periodo da confermare (ultima conferma --> adesso)
+ ///
+ /// idx macchina da confermare
+ /// 0=periodo, 1 = giorno, 2 = turno
+ /// qta pezzi BUONI da confermare
+ /// qta pezzi SCARTO da confermare
+ ///
+ public bool confermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati, int numPzScarto)
+ {
+ bool answ = false;
+ try
+ {
+ DS_ProdTempi.stp_PzProd_getByMacchinaRow rigaProd = DataLayer.obj.taPzProd2conf.GetData(idxMacchina.ToString())[0];
+ // chiamo stored stp_ConfermaProduzCompleta(idxMacchina,MatrApp,dataFrom,dataTo,pezziConf)
+ taPzProd2conf.stp_ConfermaProduzCompleta(idxMacchina, MatrOpr, rigaProd.DataFrom, rigaProd.DataTo, numPzConfermati, numPzScarto, modoConfProd, DateTime.Now, true);
+ // indico eseguito!
+ answ = true;
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog(string.Format("Errore in conferma prod macchina:{0}{1}", Environment.NewLine, exc));
+ }
+ return answ;
+ }
+
+ ///
+ /// invia una mail al destinatario x linkare nuovi devices tramite URL
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool sendUserAuthEmail(string destinatario, string UserAuthKey, int idxDipendente)
+ {
+ bool fatto = false;
+ string smtpCli = "";
+ string mittente = "";
+ string oggetto = "";
+ string userUrl = "";
+ string baseUrl = "";
+ string userWebUrl = "";
+ string baseWebUrl = "";
+ string corpo = "";
+ try
+ {
+ // compongo la stringa
+ smtpCli = memLayer.ML.confReadString("_smtpCli");
+ 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.aspx?UserAuthkey={0}&idxDipendente={1}", UserAuthKey, idxDipendente, baseUrl);
+ userWebUrl = string.Format("{2}jumper.aspx?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}
Per proseguire clicca sul link seguente(rete interna):
{0}{0}{1}{0}{0}
oppure sul link seguente (internet):
{0}{0}{2}{0}{0}
Team GPW Steamware", Environment.NewLine, userUrl, userWebUrl);
+ gestEmail.ge.mandaEmail(mittente, destinatario, oggetto, corpo);
+ fatto = true;
+ }
+ catch
+ { }
+ return fatto;
+ }
+ ///
+ /// Invia email di avviso che ci sono dei TC da confermare
+ ///
+ ///
+ ///
+ public bool sendWarnTcChangeReq(string destinatario)
+ {
+ bool fatto = false;
+ string mittente = "";
+ string oggetto = "";
+ string pageUrl = "";
+ string corpo = "";
+ try
+ {
+ // compongo la stringa
+ mittente = memLayer.ML.confReadString("_fromEmail");
+ oggetto = memLayer.ML.confReadString("oggettoChgTc");
+ pageUrl = string.Format("{0}{1}", memLayer.ML.confReadString("baseUrlAdmin"), memLayer.ML.confReadString("pageUrlApprODL"));
+ corpo = string.Format(memLayer.ML.confReadString("corpoChgTc"), Environment.NewLine, pageUrl);
+ if (memLayer.ML.confReadBool("_useAuthSmtp"))
+ {
+ gestEmail.geAuth.mandaEmail(mittente, destinatario, oggetto, corpo);
+ }
+ else
+ {
+ gestEmail.ge.mandaEmail(mittente, destinatario, oggetto, corpo);
+ }
+ fatto = true;
+ }
+ catch
+ { }
+ return fatto;
+ }
+
+ ///
+ /// effettua enroll del device
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool enrollDevice(string UserAuthKey, string IPv4, string DeviceName, string Description, int matricola)
+ {
+ bool fatto = false;
+ // in primis testo se dipendente ed authKey sono validi..
+ if (taOp.getByMatrAuthKey(matricola, UserAuthKey).Rows.Count > 0)
+ {
+ // salvo matrOpr
+ MatrOpr = matricola;
+ /************************************************
+ * 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
+ *
+ *
+ * **********************************************/
+ // calcolo il secret...
+ DateTime adesso = DateTime.Now;
+ string Dominio = memLayer.ML.confReadString("dominio");
+ string UsrName = memLayer.ML.confReadString("user");
+ // recupero dati da matricola...
+ try
+ {
+ DataLayer_AnagGen.UTENTERow rigaUt = user_std.UtSn.rigaUtenteDaMatricola(matricola.ToString());
+ if (rigaUt != null)
+ {
+ Dominio = rigaUt.DOMINIO;
+ UsrName = rigaUt.USER_NAME;
+ }
+ else
+ {
+ logger.lg.scriviLog(string.Format("non sono riuscito a recuperare RIGA utente per matricola {0}", matricola), tipoLog.ERROR);
+ }
+ }
+ catch
+ {
+ logger.lg.scriviLog(string.Format("Eccezione! non sono riuscito a recuperare utente per matricola {0}", matricola), tipoLog.ERROR);
+ Dominio = memLayer.ML.confReadString("dominio");
+ UsrName = memLayer.ML.confReadString("user");
+ }
+ string Secret = authProxy.getSecret(Dominio, UsrName, matricola, DeviceName, adesso);
+ string devSecret = SteamCrypto.EncryptString(Secret, memLayer.ML.confReadString("cookieName"));
+ try
+ {
+ // creo device + cookie!
+ fatto = authProxy.createNewCookie(Dominio, UsrName, matricola, DeviceName, Description, IPv4, memLayer.ML.confReadString("cookieName"), DateTime.Now.AddDays(memLayer.ML.confReadInt("cookieDayExpire")));
+ // loggo!
+ logger.lg.scriviLog(string.Format("Effettuato enroll nuovo device: utente {0}\\{1} | matricola {2} | DeviceName {3} | Descrizione {4} | IP {5} | nome cookcie {6} | valido sino a {7:yyyy/MM/dd}", Dominio, UsrName, matricola, DeviceName, Description, IPv4, memLayer.ML.confReadString("cookieName"), DateTime.Now.AddDays(memLayer.ML.confReadInt("cookieDayExpire"))));
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog(string.Format("Errore enroll nuovo device:{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
+ }
+ }
+ return fatto;
+ }
+ ///
+ /// MatrOpr in sessione
+ ///
+ public static int MatrOpr
+ {
+ get
+ {
+ int idx = 0;
+ try
+ {
+ idx = memLayer.ML.IntSessionObj("MatrOpr");
+ }
+ catch
+ { }
+ return idx;
+ }
+ set
+ {
+ memLayer.ML.setSessionVal("MatrOpr", value);
+ }
+ }
+ ///
+ /// Cognome Nome da MatrOpr in sessione
+ ///
+ public static string CognomeNomeOpr
+ {
+ get
+ {
+ // cerco operatore...
+ string answ = "";
+ try
+ {
+ DS_applicazione.AnagraficaOperatoriRow oper = (DS_applicazione.AnagraficaOperatoriRow)DataLayer.obj.taOp.getByMatrOpr(MatrOpr)[0];
+ answ = string.Format("{0} {1}", oper.Cognome, oper.Nome);
+ }
+ catch
+ { }
+ return answ;
+ }
+ }
+ ///
+ /// Processa input da IOB eventualmente registrando i segnali inviati
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string processInput(string idxMacchina, string valore, string dtEve, string dtCurr, string contatore)
+ {
+
+ string answ = "";
+ DateTime dataOraEvento = DateTime.Now;
+ DateTime dtEvento, dtCorrente;
+ // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo dataOraEvento corretto
+ if (dtEve != dtCurr)
+ {
+ Int64 delta = 0;
+ try
+ {
+ // se ho meno decimali x evento rispetto dtCorrente...
+ if (dtEve.Length < dtCurr.Length)
+ {
+ dtEve = dtEve.PadRight(dtCurr.Length, '0');
+ }
+ delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
+ // se meno di 60'000 ms ...
+ if (delta < 59999)
+ {
+ dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
+ }
+ else
+ {
+ // in questo caso elimino i MS dalle stringhe e converto i datetime....
+ CultureInfo provider = CultureInfo.InvariantCulture;
+ string format = "yyyyMMddHHmmssfff";
+ dtEvento = DateTime.ParseExact(dtEve, format, provider);
+ dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
+ Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
+ dataOraEvento = dataOraEvento.AddTicks(-tiks);
+ }
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog(string.Format("Errore calcolo ms evento/ora corrente da device remoto:{0}dtEve: {1}{0}dtCurr: {2}{0}{3}", Environment.NewLine, dtEve, dtCurr, exc), tipoLog.EXCEPTION);
+ }
+ }
+ //
+ if (idxMacchina != null && valore != null)
+ {
+ if (idxMacchina != "" && valore != "")
+ {
+ // 2016.12.23 modifica x recording catena di input...
+ // se abilitato registro evento sul DB
+ int idxMacc = 0;
+ try
+ {
+ idxMacc = Convert.ToInt32(idxMacchina);
+ }
+ catch
+ { }
+ if (idxMacc > 0 && MapoDb.obj.sLogEnabled(idxMacc))
+ {
+ MapoDb.obj.saveSigLog(idxMacchina, valore, dataOraEvento, contatore);
+ }
+ // continuo col resto
+ try
+ {
+ // ora processo e salvo il valore del microstato...
+ MapoDb.obj.checkMicroStato(idxMacchina, valore, dataOraEvento, contatore);
+ answ = "OK"; // registro in risposta che è andato tutto bene...
+ }
+ catch (Exception exc)
+ {
+ if (memLayer.ML.confReadInt("_logLevel") > 5)
+ {
+ string errore = string.Format("Errore: {0}{1}", Environment.NewLine, exc);
+ logger.lg.scriviLog(errore, tipoLog.EXCEPTION);
+ answ = errore;
+ }
+ }
+ }
+ else
+ {
+ string errore = "Errore: parametri macchina/valore vuoti";
+ logger.lg.scriviLog(errore, tipoLog.ERROR);
+ answ = errore;
+ }
+ }
+ else
+ {
+ string errore = "Errore: mancano parametri macchina/valore";
+ logger.lg.scriviLog(errore, tipoLog.ERROR);
+ answ = errore;
+ }
+ return answ;
+ }
+
+ #endregion
+ }
}
public enum tipoSelettore
{
- articoli
+ articoli
}