using System; using System.Collections.Generic; using System.Text; using SteamWare; using System.Reflection; using System.Data.SqlClient; 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.KanbanTableAdapter taKanban; public DS_applicazioneTableAdapters.KeepAliveTableAdapter taKeepAlive; public DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter taStati; public DS_applicazioneTableAdapters.EventListTableAdapter taEventi; public DS_applicazioneTableAdapters.Kanban2insTableAdapter taK2ins; public DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter taOp; public DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter taOp2ins; public DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter taTranIngr; public DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter taRemReb; // 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_selKanbanTableAdapter taSelKan; 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(); taKanban = new DS_applicazioneTableAdapters.KanbanTableAdapter(); taKeepAlive = new DS_applicazioneTableAdapters.KeepAliveTableAdapter(); taStati = new DS_applicazioneTableAdapters.DiarioDiBordoTableAdapter(); taEventi = new DS_applicazioneTableAdapters.EventListTableAdapter(); taK2ins = new DS_applicazioneTableAdapters.Kanban2insTableAdapter(); taOp = new DS_applicazioneTableAdapters.AnagraficaOperatoriTableAdapter(); taOp2ins = new DS_applicazioneTableAdapters.AnagraficaOperatori2insTableAdapter(); taTranIngr = new DS_applicazioneTableAdapters.TransizioneIngressiTableAdapter(); taRemReb = new DS_applicazioneTableAdapters.RemoteRebootLogTableAdapter(); 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(); taSelKan = new DS_UtilityTableAdapters.v_selKanbanTableAdapter(); 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; taKanban.Connection.ConnectionString = connectionString; taKeepAlive.Connection.ConnectionString = connectionString; taStati.Connection.ConnectionString = connectionString; taEventi.Connection.ConnectionString = connectionString; taK2ins.Connection.ConnectionString = connectionString; taOp.Connection.ConnectionString = connectionString; taOp2ins.Connection.ConnectionString = connectionString; taTranIngr.Connection.ConnectionString = connectionString; taRemReb.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; taSelKan.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 da confermare /// public bool confermaProdMacchina(string idxMacchina, int modoConfProd, int numPzConfermati) { 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, 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; } } #endregion } } public enum tipoSelettore { articoli }