Files
ETS/ETS_Data/DataProxy_ProjEts.cs
2021-11-15 17:51:40 +01:00

348 lines
16 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ETS_Data
{
/// <summary>
/// classe proxy dati x PROJ-ETS
/// </summary>
public class DataProxy_ProjEts
{
/* Ds_ProjEts */
#region Protected Fields
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();
#endregion Protected Fields
#region Public Fields
/// <summary>
/// Singleton accesso a DataProxy
/// </summary>
public static DataProxy_ProjEts DP = new DataProxy_ProjEts();
public Ds_ProjEtsTableAdapters.AnagCommFasiTableAdapter taACF;
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.TimbratureExplTableAdapter taTE;
public Ds_ProjEtsTableAdapters.TLockBazRATableAdapter taTLB;
public Ds_ProjEtsTableAdapters.v_CommessaTableAdapter taVComm;
#endregion Public Fields
/* DS_utilsProjEts */
#region Protected Constructors
protected DataProxy_ProjEts()
{
initTA();
setupConnectionStringBase();
}
#endregion Protected Constructors
#region Public Properties
/// <summary>
/// idxDipendente in sessione
/// </summary>
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
/// <summary>
/// Formatta blocco impegno x dipendente x una specifica data
/// </summary>
/// <param name="idxDipendente">identificativo dipendente</param>
/// <param name="anno">anno di riferimento</param>
/// <param name="sett">settimana desiderata</param>
/// <param name="shiftDay">shift (add) da applicare con base lunedì (0..4)</param>
/// <returns></returns>
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("<tr><td colspan=\"2\" style=\"border-bottom: 1px solid black; font-size: 1.2em;\">{0:dd.MM.yyyy} <b>{0:dddd}</b></td><td></td></tr>", 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("<tr><td>{0}</td><td>&nbsp;<b>{1}</b></td></tr>", utils.trimChar(rigaComm.label, utils.obj.confReadInt("maxCharNomeComm")), riga.SchemaWeek);
}
// aggiungo spaziatura
answ += "<br/><br/>";
return answ;
}
/// <summary>
/// Formatta blocco impegni del dipendente x la settimana indicata
/// </summary>
/// <param name="idxDipendente">identificativo dipendente</param>
/// <param name="anno">anno di riferimento</param>
/// <param name="sett">settimana desiderata</param>
/// <returns></returns>
protected string getAgendDip(int idxDipendente, int anno, int sett)
{
//default
string answ = "";
// inizio a comporre tabella utente
answ += "<table style=\"width: 100%;\">";
// 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 += "</table>";
// restituisco risultato
return answ;
}
/// <summary>
/// init dei table adapters
/// </summary>
protected void initTA()
{
taACF = new Ds_ProjEtsTableAdapters.AnagCommFasiTableAdapter();
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();
taTE = new Ds_ProjEtsTableAdapters.TimbratureExplTableAdapter();
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();
}
/// <summary>
/// effettua setup dei connection strings da web.config delal singola applicazione
/// </summary>
protected virtual void setupConnectionStringBase()
{
// connections del db
taACF.Connection.ConnectionString = utils.obj.confReadString("ETS_PROJConnectionString");
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");
taTE.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
{
DS_Applicazione.DipendentiRow rigaDip = taDipendenti.getByIdx(idxDip)[0];
answ = string.Format("{0} {1}", rigaDip.Cognome, rigaDip.Nome);
}
catch
{ }
#endif
return answ;
}
/// <summary>
/// calcola se una commessa sia attiva (da idxFase)
/// </summary>
/// <param name="idxFase"></param>
/// <returns></returns>
public bool commessaAttiva(int idxFase)
{
bool answ = false;
try
{
answ = taAF.getByIdx(idxFase)[0].Attivo;
}
catch
{ }
return answ;
}
/// <summary>
/// effettua export su GPW dei singoli dipendenti delle ore programmate x la settimana indicata
/// </summary>
/// <param name="anno">anno</param>
/// <param name="settimana">num settimana 1-53</param>
/// <param name="UsernameAD">Utente che congela la settimana</param>
/// <returns></returns>
public bool esportaBazaarSuGPW(int anno, int settimana, string UsernameAD)
{
bool answ = false;
try
{
taBaz.copy2GPW(anno, settimana, UsernameAD);
answ = true;
}
catch
{ }
return answ;
}
/// <summary>
/// invia email ai singoli dipendenti delle ore programmate x la settimana indicata con link a bazaar
/// </summary>
/// <param name="anno">anno</param>
/// <param name="settimana">num settimana 1-53</param>
/// <returns></returns>
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 = "<br />";
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(true);
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 = "<div style=\"background-color: #0A64A4; margin-bottom: 0.2em; color: #FDFDFD; text-align: center; font-size: 2em; font-weight: bold; width: 100%;\">PROJ-ETS</div>";
corpoEmail += string.Format(utils.obj.confReadString("emailBaz_body_Head") + " <b>{1:00}/{0}</b> - {2} {3}", anno, settimana, rigaDip.Cognome, rigaDip.Nome) + aCapo + aCapo;
corpoEmail += string.Format(@"<a href='{0}/Bazaar'>{1}</a>", 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 += "<i style=\"color: #696969;\">" + utils.obj.confReadString("emailBaz_body_Firma") + "</i>";
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
}
}