From ebc495fe779975ac040a044a1f37026b7febe741 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 19 Oct 2021 08:38:57 +0200 Subject: [PATCH] Assegnazione gruppi e tipo risorsa da dropdown --- .../ETS-DIP.csproj.AssemblyReference.cache | Bin 26454 -> 26454 bytes ETS_Data/DataProxy_ProjEts.cs | 591 +++++++++--------- .../PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx | 23 +- .../mod_Dip2Atr.ascx.designer.cs | 18 + PROJ-ETS/PROJ-ETS/bin/ETS_Data.dll | Bin 1408512 -> 1408512 bytes PROJ-ETS/PROJ-ETS/bin/PROJ-ETS.dll | Bin 128000 -> 128000 bytes 6 files changed, 345 insertions(+), 287 deletions(-) diff --git a/ETS-DIP/ETS-WS/obj/Debug/ETS-DIP.csproj.AssemblyReference.cache b/ETS-DIP/ETS-WS/obj/Debug/ETS-DIP.csproj.AssemblyReference.cache index 02a6d150c562c1a2aa4884eb08ac2d0826dd0124..d838d781a42ad6fbc734709bde560572d2b1ad16 100644 GIT binary patch delta 18 acmcb1j`7+##tFf!w-@T1Z`c^|FAV@%u?d#| delta 18 acmcb1j`7+##tFf!8{O7CXV@6=FAV@!?+GdZ diff --git a/ETS_Data/DataProxy_ProjEts.cs b/ETS_Data/DataProxy_ProjEts.cs index b188007..522d1cc 100644 --- a/ETS_Data/DataProxy_ProjEts.cs +++ b/ETS_Data/DataProxy_ProjEts.cs @@ -5,136 +5,220 @@ using System.Text; namespace ETS_Data { - /// - /// classe proxy dati x PROJ-ETS - /// - public class DataProxy_ProjEts - { - #region area table adapters - - /* Ds_ProjEts */ - public Ds_ProjEtsTableAdapters.AnagLabelsTableAdapter taAL; - public Ds_ProjEtsTableAdapters.AnagProgettiTableAdapter taAP; - public Ds_ProjEtsTableAdapters.AnagFasiTableAdapter taAF; - public Ds_ProjEtsTableAdapters.DatiCommessaTableAdapter taDC; - public Ds_ProjEtsTableAdapters.DatiCommFornTableAdapter taDCF; - public Ds_ProjEtsTableAdapters.DatiCommIntegTableAdapter taDCI; - public Ds_ProjEtsTableAdapters.BdgtRisorseFasiTableAdapter taBRF; - public Ds_ProjEtsTableAdapters.AnagTipoRisorseTableAdapter taATR; - public Ds_ProjEtsTableAdapters.BazaarRisorseTableAdapter taBaz; - public Ds_ProjEtsTableAdapters.Dip2ATRTableAdapter taD2ATR; - public Ds_ProjEtsTableAdapters.DipendentiTableAdapter taDip; - public Ds_ProjEtsTableAdapters.ImpiegoRisorseTableAdapter taIR; - public Ds_ProjEtsTableAdapters.LabelsCommTableAdapter taL2C; - public Ds_ProjEtsTableAdapters.LogEmailBazTableAdapter taLEB; - public Ds_ProjEtsTableAdapters.ReleasedWeekTableAdapter taReW; - public Ds_ProjEtsTableAdapters.TLockBazRATableAdapter taTLB; - public Ds_ProjEtsTableAdapters.v_CommessaTableAdapter taVComm; - /* DS_utilsProjEts */ - public DS_utilsProjEtsTableAdapters.v_selClientiTableAdapter taSelCli; - public DS_utilsProjEtsTableAdapters.v_selProgettiTableAdapter taSelPro; - public DS_utilsProjEtsTableAdapters.v_selCommesseTableAdapter taSelCom; - public DS_utilsProjEtsTableAdapters.v_selFornitoriClaTableAdapter taSelForn; - public DS_utilsProjEtsTableAdapters.v_FattureETSTableAdapter taFattETS; - /// - /// init dei table adapters + /// classe proxy dati x PROJ-ETS /// - protected void initTA() + public class DataProxy_ProjEts { - taAL = new Ds_ProjEtsTableAdapters.AnagLabelsTableAdapter(); - taAP = new Ds_ProjEtsTableAdapters.AnagProgettiTableAdapter(); - taAF = new Ds_ProjEtsTableAdapters.AnagFasiTableAdapter(); - taDC = new Ds_ProjEtsTableAdapters.DatiCommessaTableAdapter(); - taDCF = new Ds_ProjEtsTableAdapters.DatiCommFornTableAdapter(); - taDCI = new Ds_ProjEtsTableAdapters.DatiCommIntegTableAdapter(); - taBRF = new Ds_ProjEtsTableAdapters.BdgtRisorseFasiTableAdapter(); - taATR = new Ds_ProjEtsTableAdapters.AnagTipoRisorseTableAdapter(); - taBaz = new Ds_ProjEtsTableAdapters.BazaarRisorseTableAdapter(); - taD2ATR = new Ds_ProjEtsTableAdapters.Dip2ATRTableAdapter(); - taDip = new Ds_ProjEtsTableAdapters.DipendentiTableAdapter(); - taIR = new Ds_ProjEtsTableAdapters.ImpiegoRisorseTableAdapter(); - taL2C = new Ds_ProjEtsTableAdapters.LabelsCommTableAdapter(); - taLEB = new Ds_ProjEtsTableAdapters.LogEmailBazTableAdapter(); - taReW = new Ds_ProjEtsTableAdapters.ReleasedWeekTableAdapter(); - taTLB = new Ds_ProjEtsTableAdapters.TLockBazRATableAdapter(); - taVComm = new Ds_ProjEtsTableAdapters.v_CommessaTableAdapter(); - taSelCli = new DS_utilsProjEtsTableAdapters.v_selClientiTableAdapter(); - taSelPro = new DS_utilsProjEtsTableAdapters.v_selProgettiTableAdapter(); - taSelCom = new DS_utilsProjEtsTableAdapters.v_selCommesseTableAdapter(); - taSelForn = new DS_utilsProjEtsTableAdapters.v_selFornitoriClaTableAdapter(); - taFattETS = new DS_utilsProjEtsTableAdapters.v_FattureETSTableAdapter(); - } - /// - /// effettua setup dei connection strings da web.config delal singola applicazione - /// - protected virtual void setupConnectionStringBase() - { - // connections del db - taAL.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taAP.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taAF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taDC.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taDCF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taDCI.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taBRF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taATR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taBaz.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taD2ATR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taDip.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taIR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taL2C.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taLEB.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taReW.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taTLB.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taVComm.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taSelCli.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taSelPro.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taSelCom.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taSelForn.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - taFattETS.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); - } + /* Ds_ProjEts */ - #endregion + #region Protected Fields - protected DataProxy_ProjEts() - { - initTA(); - setupConnectionStringBase(); - } - /// - /// Singleton accesso a DataProxy - /// - public static DataProxy_ProjEts DP = new DataProxy_ProjEts(); + protected Ds_ProjEts.BazaarRisorseDataTable tabBazSingle = new Ds_ProjEts.BazaarRisorseDataTable(); + protected DS_utilsProjEts.v_selCommesseDataTable tabComm = new DS_utilsProjEts.v_selCommesseDataTable(); + protected Ds_ProjEts.Dip2ATRDataTable tabD2ATR = new Ds_ProjEts.Dip2ATRDataTable(); + protected Ds_ProjEts.DipendentiDataTable tabDip = new Ds_ProjEts.DipendentiDataTable(); - #region utility public esposte + #endregion Protected Fields + #region Public Fields - /// - /// idxDipendente in sessione - /// - public static int idxDipendente - { - get - { - int idx = 0; - try + /// + /// Singleton accesso a DataProxy + /// + public static DataProxy_ProjEts DP = new DataProxy_ProjEts(); + + public Ds_ProjEtsTableAdapters.AnagFasiTableAdapter taAF; + public Ds_ProjEtsTableAdapters.AnagLabelsTableAdapter taAL; + public Ds_ProjEtsTableAdapters.AnagProgettiTableAdapter taAP; + public Ds_ProjEtsTableAdapters.AnagTipoRisorseTableAdapter taATR; + public Ds_ProjEtsTableAdapters.BazaarRisorseTableAdapter taBaz; + public Ds_ProjEtsTableAdapters.BdgtRisorseFasiTableAdapter taBRF; + public Ds_ProjEtsTableAdapters.Dip2ATRTableAdapter taD2ATR; + public Ds_ProjEtsTableAdapters.DatiCommessaTableAdapter taDC; + public Ds_ProjEtsTableAdapters.DatiCommFornTableAdapter taDCF; + public Ds_ProjEtsTableAdapters.DatiCommIntegTableAdapter taDCI; + public Ds_ProjEtsTableAdapters.DipendentiTableAdapter taDip; + public DS_utilsProjEtsTableAdapters.v_FattureETSTableAdapter taFattETS; + public Ds_ProjEtsTableAdapters.ImpiegoRisorseTableAdapter taIR; + public Ds_ProjEtsTableAdapters.LabelsCommTableAdapter taL2C; + public Ds_ProjEtsTableAdapters.LogEmailBazTableAdapter taLEB; + public Ds_ProjEtsTableAdapters.ReleasedWeekTableAdapter taReW; + public DS_utilsProjEtsTableAdapters.v_selClientiTableAdapter taSelCli; + public DS_utilsProjEtsTableAdapters.v_selCommesseTableAdapter taSelCom; + public DS_utilsProjEtsTableAdapters.v_selFornitoriClaTableAdapter taSelForn; + public DS_utilsProjEtsTableAdapters.v_selProgettiTableAdapter taSelPro; + public Ds_ProjEtsTableAdapters.TLockBazRATableAdapter taTLB; + public Ds_ProjEtsTableAdapters.v_CommessaTableAdapter taVComm; + + #endregion Public Fields + + /* DS_utilsProjEts */ + + #region Protected Constructors + + protected DataProxy_ProjEts() { - idx = utils.obj.IntSessionObj("IdxDipendente"); + initTA(); + setupConnectionStringBase(); } - catch - { } - return idx; - } - set - { - utils.obj.setSessionVal("idxDipendente", value); - } - } - public string CognomeNomeByIdx(int idxDip) - { - string answ = ""; + #endregion Protected Constructors + + #region Public Properties + + /// + /// idxDipendente in sessione + /// + public static int idxDipendente + { + get + { + int idx = 0; + try + { + idx = utils.obj.IntSessionObj("IdxDipendente"); + } + catch + { } + return idx; + } + set + { + utils.obj.setSessionVal("idxDipendente", value); + } + } + + #endregion Public Properties + + #region Protected Methods + + /// + /// Formatta blocco impegno x dipendente x una specifica data + /// + /// identificativo dipendente + /// anno di riferimento + /// settimana desiderata + /// shift (add) da applicare con base lunedì (0..4) + /// + protected string getAgendByDate(int idxDipendente, int anno, int sett, int shiftDay) + { + // variabili + string answ = ""; + DS_utilsProjEts.v_selCommesseRow rigaComm; + + // parto dal lunedì della sett indicata! + DateTime dataRif = datario.FirstDateOfWeekISO8601(anno, sett); + dataRif = dataRif.AddDays(shiftDay); + + // inserisco intestazione con data + answ += string.Format("{0:dd.MM.yyyy} {0:dddd}", dataRif).ToUpper(); + + // recupero tutte le assegnazioni x la giornata indicata (cerco alla posizione shiftDay se è != 0) + Ds_ProjEts.BazaarRisorseRow[] commGG = (Ds_ProjEts.BazaarRisorseRow[])tabBazSingle.Select(string.Format("SUBSTRING(SchemaWeek, {0}, 1) <> 0", shiftDay + 1)); + foreach (Ds_ProjEts.BazaarRisorseRow riga in commGG) + { + // recupero dati commessa... + rigaComm = (DS_utilsProjEts.v_selCommesseRow)tabComm.Select(string.Format("value = {0}", riga.idxFase))[0]; + answ += string.Format("{0} {1}", utils.trimChar(rigaComm.label, utils.obj.confReadInt("maxCharNomeComm")), riga.SchemaWeek); + } + // aggiungo spaziatura + answ += "

"; + + return answ; + } + + /// + /// Formatta blocco impegni del dipendente x la settimana indicata + /// + /// identificativo dipendente + /// anno di riferimento + /// settimana desiderata + /// + protected string getAgendDip(int idxDipendente, int anno, int sett) + { + //default + string answ = ""; + // inizio a comporre tabella utente + answ += ""; + // recupero i dati x il dipendente corrente... + tabBazSingle = DataProxy_ProjEts.DP.taBaz.getByAnnoSettDip(anno, sett, idxDipendente); + // compongo la settimana a partire dalla data richiesta... + for (int i = 0; i < 5; i++) + { + answ += getAgendByDate(idxDipendente, anno, sett, i); + } + answ += "
"; + // restituisco risultato + return answ; + } + + /// + /// init dei table adapters + /// + protected void initTA() + { + taAF = new Ds_ProjEtsTableAdapters.AnagFasiTableAdapter(); + taAL = new Ds_ProjEtsTableAdapters.AnagLabelsTableAdapter(); + taAP = new Ds_ProjEtsTableAdapters.AnagProgettiTableAdapter(); + taATR = new Ds_ProjEtsTableAdapters.AnagTipoRisorseTableAdapter(); + taDC = new Ds_ProjEtsTableAdapters.DatiCommessaTableAdapter(); + taDCF = new Ds_ProjEtsTableAdapters.DatiCommFornTableAdapter(); + taDCI = new Ds_ProjEtsTableAdapters.DatiCommIntegTableAdapter(); + taBRF = new Ds_ProjEtsTableAdapters.BdgtRisorseFasiTableAdapter(); + taBaz = new Ds_ProjEtsTableAdapters.BazaarRisorseTableAdapter(); + taD2ATR = new Ds_ProjEtsTableAdapters.Dip2ATRTableAdapter(); + taDip = new Ds_ProjEtsTableAdapters.DipendentiTableAdapter(); + taIR = new Ds_ProjEtsTableAdapters.ImpiegoRisorseTableAdapter(); + taL2C = new Ds_ProjEtsTableAdapters.LabelsCommTableAdapter(); + taLEB = new Ds_ProjEtsTableAdapters.LogEmailBazTableAdapter(); + taReW = new Ds_ProjEtsTableAdapters.ReleasedWeekTableAdapter(); + taTLB = new Ds_ProjEtsTableAdapters.TLockBazRATableAdapter(); + taVComm = new Ds_ProjEtsTableAdapters.v_CommessaTableAdapter(); + taSelCli = new DS_utilsProjEtsTableAdapters.v_selClientiTableAdapter(); + taSelPro = new DS_utilsProjEtsTableAdapters.v_selProgettiTableAdapter(); + taSelCom = new DS_utilsProjEtsTableAdapters.v_selCommesseTableAdapter(); + taSelForn = new DS_utilsProjEtsTableAdapters.v_selFornitoriClaTableAdapter(); + taFattETS = new DS_utilsProjEtsTableAdapters.v_FattureETSTableAdapter(); + } + + /// + /// effettua setup dei connection strings da web.config delal singola applicazione + /// + protected virtual void setupConnectionStringBase() + { + // connections del db + taAF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taAL.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taAP.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taATR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taDC.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taDCF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taDCI.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taBRF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taBaz.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taD2ATR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taDip.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taIR.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taL2C.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taLEB.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taReW.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taTLB.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taVComm.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taSelCli.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taSelPro.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taSelCom.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taSelForn.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + taFattETS.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString"); + } + + #endregion Protected Methods + + #region Public Methods + + public string CognomeNomeByIdx(int idxDip) + { + string answ = ""; #if false try { @@ -142,178 +226,117 @@ namespace ETS_Data answ = string.Format("{0} {1}", rigaDip.Cognome, rigaDip.Nome); } catch - { } + { } #endif - return answ; - } - /// - /// calcola se una commessa sia attiva (da idxFase) - /// - /// - /// - public bool commessaAttiva(int idxFase) - { - bool answ = false; - try - { - answ = taAF.getByIdx(idxFase)[0].Attivo; - } - catch - { } - return answ; - } - /// - /// effettua export su GPW dei singoli dipendenti delle ore programmate x la settimana indicata - /// - /// anno - /// num settimana 1-53 - /// Utente che congela la settimana - /// - public bool esportaBazaarSuGPW(int anno, int settimana, string UsernameAD) - { - bool answ = false; - try - { - taBaz.copy2GPW(anno, settimana, UsernameAD); - answ = true; - } - catch - { } - return answ; - } - - /// - /// invia email ai singoli dipendenti delle ore programmate x la settimana indicata con link a bazaar - /// - /// anno - /// num settimana 1-53 - /// - public bool inviaEmailBazaar(int anno, int settimana) - { - bool answ = false; - int inviate = 0; - string oggettoEmail = utils.obj.confReadString("emailBaz_subject"); - string fromEmail = utils.obj.confReadString("_fromEmail"); - string toEmail = ""; - string aCapo = "
"; - string corpoEmail = ""; - string progSett = ""; - int idxDipendente = 0; - // leggo tutte commesse ed i dipendenti... - tabComm = DataProxy_ProjEts.DP.taSelCom.GetData(); - tabDip = DataProxy_ProjEts.DP.taDip.GetData(); - tabD2ATR = DataProxy_ProjEts.DP.taD2ATR.getBazOrd(); - Ds_ProjEts.DipendentiRow rigaDip; - - - // ciclo su TUTTI i dipendenti inseriti come risorse in bazaar - foreach (Ds_ProjEts.Dip2ATRRow riga in tabD2ATR) - { - idxDipendente = riga.idxDipendente; - rigaDip = (Ds_ProjEts.DipendentiRow)tabDip.Select(string.Format("idxDipendente={0}", idxDipendente))[0]; - - // se sono in testing resetto email a mia... - if (utils.obj.confReadBool("testMode")) - { - toEmail = utils.obj.confReadString("stdEmail"); - } - else - { - toEmail = rigaDip.email; + return answ; } - corpoEmail = "
PROJ-ETS
"; - corpoEmail += string.Format(utils.obj.confReadString("emailBaz_body_Head") + " {1:00}/{0} - {2} {3}", anno, settimana, rigaDip.Cognome, rigaDip.Nome) + aCapo + aCapo; - corpoEmail += string.Format(@"{1}", utils.obj.confReadString("baseUrl"), utils.obj.confReadString("emailBaz_body_Link")); - corpoEmail += aCapo + aCapo; - // compongo la programmazione settimanale utente... EVENTUALMENTE CON GIORNI VUOTI!!! - - progSett = getAgendDip(idxDipendente, anno, settimana); - - corpoEmail += progSett; - corpoEmail += "" + utils.obj.confReadString("emailBaz_body_Firma") + ""; - try + /// + /// calcola se una commessa sia attiva (da idxFase) + /// + /// + /// + public bool commessaAttiva(int idxFase) { - // invio email con link + resoconto breve impegno settimanale - utils.gestEmail.geAuth.mandaEmail(fromEmail, toEmail, oggettoEmail, corpoEmail); - inviate++; + bool answ = false; + try + { + answ = taAF.getByIdx(idxFase)[0].Attivo; + } + catch + { } + return answ; } - catch - { } - if (utils.obj.confReadBool("testMode") && inviate > 5) + /// + /// effettua export su GPW dei singoli dipendenti delle ore programmate x la settimana indicata + /// + /// anno + /// num settimana 1-53 + /// Utente che congela la settimana + /// + public bool esportaBazaarSuGPW(int anno, int settimana, string UsernameAD) { - answ = true; - return answ; + bool answ = false; + try + { + taBaz.copy2GPW(anno, settimana, UsernameAD); + answ = true; + } + catch + { } + return answ; } - } - answ = inviate > 0; // controlla che ALMENO 1 email sia stata inviata... - return answ; + /// + /// invia email ai singoli dipendenti delle ore programmate x la settimana indicata con link a bazaar + /// + /// anno + /// num settimana 1-53 + /// + public bool inviaEmailBazaar(int anno, int settimana) + { + bool answ = false; + int inviate = 0; + string oggettoEmail = utils.obj.confReadString("emailBaz_subject"); + string fromEmail = utils.obj.confReadString("_fromEmail"); + string toEmail = ""; + string aCapo = "
"; + string corpoEmail = ""; + string progSett = ""; + int idxDipendente = 0; + // leggo tutte commesse ed i dipendenti... + tabComm = DataProxy_ProjEts.DP.taSelCom.GetData(); + tabDip = DataProxy_ProjEts.DP.taDip.GetData(); + tabD2ATR = DataProxy_ProjEts.DP.taD2ATR.getBazOrd(); + Ds_ProjEts.DipendentiRow rigaDip; + + // ciclo su TUTTI i dipendenti inseriti come risorse in bazaar + foreach (Ds_ProjEts.Dip2ATRRow riga in tabD2ATR) + { + idxDipendente = riga.idxDipendente; + rigaDip = (Ds_ProjEts.DipendentiRow)tabDip.Select(string.Format("idxDipendente={0}", idxDipendente))[0]; + + // se sono in testing resetto email a mia... + if (utils.obj.confReadBool("testMode")) + { + toEmail = utils.obj.confReadString("stdEmail"); + } + else + { + toEmail = rigaDip.email; + } + + corpoEmail = "
PROJ-ETS
"; + corpoEmail += string.Format(utils.obj.confReadString("emailBaz_body_Head") + " {1:00}/{0} - {2} {3}", anno, settimana, rigaDip.Cognome, rigaDip.Nome) + aCapo + aCapo; + corpoEmail += string.Format(@"{1}", utils.obj.confReadString("baseUrl"), utils.obj.confReadString("emailBaz_body_Link")); + corpoEmail += aCapo + aCapo; + // compongo la programmazione settimanale utente... EVENTUALMENTE CON GIORNI VUOTI!!! + + progSett = getAgendDip(idxDipendente, anno, settimana); + + corpoEmail += progSett; + corpoEmail += "" + utils.obj.confReadString("emailBaz_body_Firma") + ""; + try + { + // invio email con link + resoconto breve impegno settimanale + utils.gestEmail.geAuth.mandaEmail(fromEmail, toEmail, oggettoEmail, corpoEmail); + inviate++; + } + catch + { } + + if (utils.obj.confReadBool("testMode") && inviate > 5) + { + answ = true; + return answ; + } + } + + answ = inviate > 0; // controlla che ALMENO 1 email sia stata inviata... + return answ; + } + + #endregion Public Methods } - protected Ds_ProjEts.DipendentiDataTable tabDip = new Ds_ProjEts.DipendentiDataTable(); - protected Ds_ProjEts.Dip2ATRDataTable tabD2ATR = new Ds_ProjEts.Dip2ATRDataTable(); - protected Ds_ProjEts.BazaarRisorseDataTable tabBazSingle = new Ds_ProjEts.BazaarRisorseDataTable(); - protected DS_utilsProjEts.v_selCommesseDataTable tabComm = new DS_utilsProjEts.v_selCommesseDataTable(); - /// - /// Formatta blocco impegni del dipendente x la settimana indicata - /// - /// identificativo dipendente - /// anno di riferimento - /// settimana desiderata - /// - protected string getAgendDip(int idxDipendente, int anno, int sett) - { - //default - string answ = ""; - // inizio a comporre tabella utente - answ += ""; - // recupero i dati x il dipendente corrente... - tabBazSingle = DataProxy_ProjEts.DP.taBaz.getByAnnoSettDip(anno, sett, idxDipendente); - // compongo la settimana a partire dalla data richiesta... - for (int i = 0; i < 5; i++) - { - answ += getAgendByDate(idxDipendente, anno, sett, i); - } - answ += "
"; - // restituisco risultato - return answ; - } - /// - /// Formatta blocco impegno x dipendente x una specifica data - /// - /// identificativo dipendente - /// anno di riferimento - /// settimana desiderata - /// shift (add) da applicare con base lunedì (0..4) - /// - protected string getAgendByDate(int idxDipendente, int anno, int sett, int shiftDay) - { - // variabili - string answ = ""; - DS_utilsProjEts.v_selCommesseRow rigaComm; - - // parto dal lunedì della sett indicata! - DateTime dataRif = datario.FirstDateOfWeekISO8601(anno, sett); - dataRif = dataRif.AddDays(shiftDay); - - // inserisco intestazione con data - answ += string.Format("{0:dd.MM.yyyy} {0:dddd}", dataRif).ToUpper(); - - // recupero tutte le assegnazioni x la giornata indicata (cerco alla posizione shiftDay se è != 0) - Ds_ProjEts.BazaarRisorseRow[] commGG = (Ds_ProjEts.BazaarRisorseRow[])tabBazSingle.Select(string.Format("SUBSTRING(SchemaWeek, {0}, 1) <> 0", shiftDay + 1)); - foreach (Ds_ProjEts.BazaarRisorseRow riga in commGG) - { - // recupero dati commessa... - rigaComm = (DS_utilsProjEts.v_selCommesseRow)tabComm.Select(string.Format("value = {0}", riga.idxFase))[0]; - answ += string.Format("{0} {1}", utils.trimChar(rigaComm.label, utils.obj.confReadInt("maxCharNomeComm")), riga.SchemaWeek); - } - // aggiungo spaziatura - answ += "

"; - - return answ; - } - - #endregion - } -} +} \ No newline at end of file diff --git a/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx b/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx index 02f7434..94d64bb 100644 --- a/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx +++ b/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx @@ -32,8 +32,23 @@ --%> - - + + + + + + + + + + + <%----%> + + + + + + @@ -53,4 +68,6 @@ - \ No newline at end of file + + + \ No newline at end of file diff --git a/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx.designer.cs b/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx.designer.cs index 70aa616..d7c4d06 100644 --- a/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx.designer.cs +++ b/PROJ-ETS/PROJ-ETS/WebUserControls/mod_Dip2Atr.ascx.designer.cs @@ -40,5 +40,23 @@ namespace PROJ_ETS.WebUserControls /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.HiddenField hfGruppo; + + /// + /// odsTipoRis control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsTipoRis; + + /// + /// odsGruppo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.ObjectDataSource odsGruppo; } } diff --git a/PROJ-ETS/PROJ-ETS/bin/ETS_Data.dll b/PROJ-ETS/PROJ-ETS/bin/ETS_Data.dll index 1c077a4107cfef2fcdd2e9a434fd62550d178b88..83b717daf4d70050dd5c6eac2e6b8d9c7a5fa59d 100644 GIT binary patch delta 4131 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 delta 22214 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