diff --git a/ETS-WS/ETS-WS.suo b/ETS-WS/ETS-WS.suo index 8c03ddd..b89c718 100644 Binary files a/ETS-WS/ETS-WS.suo and b/ETS-WS/ETS-WS.suo differ diff --git a/ETS-WS/ETS-WS/ETS-WS.csproj b/ETS-WS/ETS-WS/ETS-WS.csproj index c9f0b14..ee224fe 100644 --- a/ETS-WS/ETS-WS/ETS-WS.csproj +++ b/ETS-WS/ETS-WS/ETS-WS.csproj @@ -303,6 +303,7 @@ + @@ -478,6 +479,13 @@ mod_myTempFile.ascx + + mod_periodoAnalisi.ascx + ASPXCodeBehind + + + mod_periodoAnalisi.ascx + mod_testata.ascx ASPXCodeBehind diff --git a/ETS-WS/ETS-WS/Web.config b/ETS-WS/ETS-WS/Web.config index f776d51..7abe747 100644 --- a/ETS-WS/ETS-WS/Web.config +++ b/ETS-WS/ETS-WS/Web.config @@ -4,55 +4,57 @@ http://go.microsoft.com/fwlink/?LinkId=169433 --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx b/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx index 4d9408f..d15fc09 100644 --- a/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx +++ b/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx @@ -2,6 +2,7 @@ Inherits="ETS_WS.WebUserControls.mod_filtroRicerca" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> <%@ Register Src="mod_textAutocomplete.ascx" TagName="mod_textAutocomplete" TagPrefix="uc1" %> +<%@ Register Src="mod_periodoAnalisi.ascx" TagName="mod_periodoAnalisi" TagPrefix="uc2" %> <% if (false) { %> @@ -13,7 +14,7 @@
-
+
<%--area dx: update + scelta dim pagina--%>

@@ -39,9 +40,7 @@
<%--Area sx: filtri--%>
-
- +
+
+
+ +
diff --git a/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx.designer.cs b/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx.designer.cs index 3e8ed80..cc5d7a7 100644 --- a/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx.designer.cs +++ b/ETS-WS/ETS-WS/WebUserControls/mod_filtroRicerca.ascx.designer.cs @@ -49,22 +49,13 @@ namespace ETS_WS.WebUserControls { protected global::System.Web.UI.UpdateProgress updtRicerca; /// - /// lblCerca control. + /// mod_periodoAnalisi1 control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.Label lblCerca; - - /// - /// txtSearchAll control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox txtSearchAll; + protected global::mod_periodoAnalisi mod_periodoAnalisi1; /// /// chkCommessa control. @@ -146,5 +137,23 @@ namespace ETS_WS.WebUserControls { /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.Button btnUpdate; + + /// + /// lblCerca control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblCerca; + + /// + /// txtSearchAll control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtSearchAll; } } diff --git a/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx new file mode 100644 index 0000000..a04d923 --- /dev/null +++ b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx @@ -0,0 +1,95 @@ +<%@ Control Language="C#" AutoEventWireup="true" Inherits="mod_periodoAnalisi" + CodeBehind="mod_periodoAnalisi.ascx.cs" %> +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + +
+ +   + + selezione + oggi + ieri + questa settimana + ultimi 7gg + questo mese + ultimi 30gg + 1 anno + +
+ + + 00 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + + + +  →  + + + 00 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + + + +   + +
+ +    + +
diff --git a/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.cs b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.cs new file mode 100644 index 0000000..7142c81 --- /dev/null +++ b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.cs @@ -0,0 +1,349 @@ +using System; +using System.Data; +using System.Configuration; +using System.Collections; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using ETS_Data; + + +public partial class mod_periodoAnalisi : System.Web.UI.UserControl +{ + #region area protected + + protected intervalloDate _intervallo; + + /// + /// avvio componente + /// + /// + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + setIntervallo(); + setDurataMin(); + } + /// + /// definisce se sia da mostrare il selettore delle ore nel controllo + /// + protected bool mostraSelOra + { + get + { + bool answ = false; + if (utils.obj.isInSessionObject("mostraSelOra")) + { + answ = utils.obj.BoolSessionObj("mostraSelOra"); + } + else + { + // leggo da sessione e salvo... + try + { + answ = utils.obj.confReadBool("mostraSelOra"); + } + catch + { } + utils.obj.setSessionVal("mostraSelOra", answ); + } + return answ; + } + } + + /// + /// gestione del selettore rapido dell'intervallo temporale... + /// + /// + /// + protected void DddlTipoPeriodo_SelectedIndexChanged(object sender, EventArgs e) + { + // verifico cosa sia cambiato ed imposto date... + datario _datario = new datario(); + switch (ddlTipoPeriodo.SelectedValue) + { + case "oggi": + _intervallo = _datario.giornata(DateTime.Now); + break; + case "ieri": + _intervallo = _datario.giornata(DateTime.Now.AddDays(-1)); + break; + case "ultimi 7gg": + _intervallo = _datario.ultimiGiorni(DateTime.Now, 7); + break; + case "questa settimana": + _intervallo = _datario.questaSett(DateTime.Now); + break; + case "ultimi 30gg": + _intervallo = _datario.ultimiGiorni(DateTime.Now, 30); + break; + case "questo mese": + _intervallo = _datario.questoMese(DateTime.Now); + break; + case "1 anno": + _intervallo = _datario.ultimiGiorni(DateTime.Now, 366); + break; + default: + break; + } + if ((intervalloAnalisi.inizio != _intervallo.inizio) || (intervalloAnalisi.fine != _intervallo.fine)) + { + verificaCoerenzaDate(); + aggiornaDateMostrate(false); + if (realtimeUpdate) + { + esegueUpdate(); + } + else + { + // mostro btn update + btnUpdate.Visible = true; + } + } + } + /// + /// effettua update delle date mostrate da intervallo analisi (ed eventualmente riporta update...) + /// + /// + private void aggiornaDateMostrate(bool doReportUpdate) + { + scriviDate(); + if (doReportUpdate) + { + reportUpdate(); + } + } + /// + /// scrive nuove date in controllo + /// + private void scriviDate() + { + // se intervallo non è valorizzato leggo da sessione... + if (!_intervallo.isValid) + { + _intervallo = intervalloAnalisi; + } + txtInizio.Text = _intervallo.inizio.ToShortDateString(); + ddlOraInizio.SelectedValue = _intervallo.inizio.Hour.ToString("00"); + txtFine.Text = _intervallo.fine.ToShortDateString(); + ddlOraFine.SelectedValue = _intervallo.fine.Hour.ToString("00"); + if (mostraSelOra) + { + ddlOraInizio.Visible = true; + ddlOraFine.Visible = true; + } + else + { + ddlOraInizio.Visible = false; + ddlOraFine.Visible = false; + } + } + /// + /// imposta intervallo da sessione o di default + /// + private void setIntervallo() + { + intervalloDate _intervallo; + try + { + _intervallo = (intervalloDate)Session["_intervallo"]; + } + catch + { + _intervallo = new intervalloDate(); + _intervallo.inizio = DateTime.Now.AddDays(utils.obj.confReadInt("defDayFrom")); + _intervallo.fine = DateTime.Now.AddDays(1); + Session["_intervallo"] = _intervallo; + Session["_inizio"] = _intervallo.inizio; + Session["_fine"] = _intervallo.fine; + } + scriviDate(); + } + /// + /// imposta durata minima + /// + private void setDurataMin() + { + int _durataMin; + try + { + _durataMin = (int)Session["_durataMin"]; + } + catch + { + _durataMin = 0; + Session["_durataMin"] = _durataMin; + } + txtDurataMin.Text = _durataMin.ToString(); + } + protected void Page_Load(object sender, EventArgs e) + { + txtInizio.ToolTip = "inizio periodo di riferimento per i dati mostrati"; + txtFine.ToolTip = "fine periodo di riferimento per i dati mostrati"; + lblDurataMin.Text = "Visualizza eventi con durata superiore a"; + } + + /// + /// salva in memoria le info + /// + private void aggiornaPeriodo() + { + _intervallo = new intervalloDate(); + // calcolo tempi arrotondati + int oraInizio = Convert.ToInt32(ddlOraInizio.SelectedValue); + int oraFine = Convert.ToInt32(ddlOraFine.SelectedValue); + _intervallo.inizio = Convert.ToDateTime(txtInizio.Text).AddHours(oraInizio); + _intervallo.fine = Convert.ToDateTime(txtFine.Text).AddHours(oraFine); + verificaCoerenzaDate(); + int _durataMin; + _durataMin = Convert.ToInt32(txtDurataMin.Text); + Session["_durataMin"] = _durataMin; + reportUpdate(); + + } + /// + /// verifica che le date dell'intervallo siano coerenti (inizio < fine) + /// + private void verificaCoerenzaDate() + { + // controllo date siano coerenti (fine > inizio)... + if (_intervallo.inizio >= _intervallo.fine) + { + // controllo non siano date successive ad oggi... + if (_intervallo.fine > DateTime.Now) + { + _intervallo.fine = DateTime.Now; + } + _intervallo.inizio = _intervallo.fine.AddDays(-1); + } + //intervalloAnalisi = _intervallo; + aggiornaDateMostrate(false); + } + /// + /// evento cambio testo data inizio + /// + /// + /// + protected void txtInizio_TextChanged(object sender, EventArgs e) + { + salvaModifica(); + } + /// + /// evento cambio testo data fine + /// + /// + /// + protected void txtFine_TextChanged(object sender, EventArgs e) + { + salvaModifica(); + } + /// + /// salva modifica datetime + /// + private void salvaModifica() + { + // imposto il selettore a discesa... + setPeriodoFree(); + if (realtimeUpdate) + { + esegueUpdate(); + } + else + { + // mostro btn update + btnUpdate.Visible = true; + } + } + /// + /// in questo caso faccio udpate periodo mostrato + /// + /// + /// + protected void btnUpdate_Click(object sender, EventArgs e) + { + esegueUpdate(); + } + /// + /// salva dato periodo e nasconde button update + /// + private void esegueUpdate() + { + aggiornaPeriodo(); + // nascondo btn update + btnUpdate.Visible = false; + } + /// + /// riporta aggiornamento a controller + /// + protected void reportUpdate() + { + intervalloAnalisi = _intervallo; + // alzo l'evento d update/inserimento e ricarico cache... + if (eh_doUpdate != null) + { + eh_doUpdate(this, new EventArgs()); + } + } + + #endregion + + #region area public + + /// + /// accesso dati intervallo in session + /// + public intervalloDate intervalloAnalisi + { + get + { + return (intervalloDate)Session["_intervallo"]; + } + set + { + intervalloDate interv = value; + Session["_intervallo"] = interv; + Session["_inizio"] = interv.inizio; + Session["_fine"] = interv.fine; + } + } + /// + /// effettua update + /// + /// + public void doUpdate(bool doReportUpdate) + { + aggiornaDateMostrate(doReportUpdate); + } + /// + /// imposta periodo libero di selezione + /// + public void setPeriodoFree() + { + ddlTipoPeriodo.SelectedIndex = 0; + } + /// + /// determina se sia abilitato il realtime update (o se si deve vedere button update + /// + public bool realtimeUpdate + { + get + { + return utils.obj.BoolSessionObj("periodoRtUpd"); + } + set + { + utils.obj.setSessionVal("periodoRtUpd", value); + } + } + + #region gestione eventi + + public event EventHandler eh_doUpdate; + + #endregion + + #endregion +} diff --git a/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.designer.cs b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.designer.cs new file mode 100644 index 0000000..cae38e8 --- /dev/null +++ b/ETS-WS/ETS-WS/WebUserControls/mod_periodoAnalisi.ascx.designer.cs @@ -0,0 +1,112 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + + +public partial class mod_periodoAnalisi { + + /// + /// lblPeriodo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblPeriodo; + + /// + /// ddlTipoPeriodo control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlTipoPeriodo; + + /// + /// txtInizio control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtInizio; + + /// + /// ddlOraInizio control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlOraInizio; + + /// + /// CalendarExtender1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::AjaxControlToolkit.CalendarExtender CalendarExtender1; + + /// + /// txtFine control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtFine; + + /// + /// ddlOraFine control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.DropDownList ddlOraFine; + + /// + /// CalendarExtender2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::AjaxControlToolkit.CalendarExtender CalendarExtender2; + + /// + /// btnUpdate control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnUpdate; + + /// + /// lblDurataMin control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label lblDurataMin; + + /// + /// txtDurataMin control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.TextBox txtDurataMin; +} diff --git a/ETS-WS/ETS-WS/bin/ETS-WS.dll b/ETS-WS/ETS-WS/bin/ETS-WS.dll index 67ee99d..88fc344 100644 Binary files a/ETS-WS/ETS-WS/bin/ETS-WS.dll and b/ETS-WS/ETS-WS/bin/ETS-WS.dll differ diff --git a/ETS-WS/ETS-WS/bin/ETS_Data.dll b/ETS-WS/ETS-WS/bin/ETS_Data.dll index 8791928..3c4a5ad 100644 Binary files a/ETS-WS/ETS-WS/bin/ETS_Data.dll and b/ETS-WS/ETS-WS/bin/ETS_Data.dll differ diff --git a/ETS_Data/utils.cs b/ETS_Data/utils.cs index 3fd9b62..1d1ff9d 100644 --- a/ETS_Data/utils.cs +++ b/ETS_Data/utils.cs @@ -362,4 +362,245 @@ namespace ETS_Data #endregion } + /// + /// definisce un intervalo di 2 date + /// + public struct intervalloDate + { + /// + /// data inizio + /// + public DateTime inizio; + /// + /// data fine + /// + public DateTime fine; + /// + /// indica se sia valido il dato, ovvero inizio e fine > 0 e FINE >= INIZIO + /// + public bool isValid + { + get + { + bool cond1 = false; + bool cond2 = false; + bool cond3 = false; + try + { + cond1 = inizio > Convert.ToDateTime("01/01/0001"); + } + catch + { } + try + { + cond2 = fine > Convert.ToDateTime("01/01/0001"); + } + catch + { } + try + { + cond3 = (fine.Subtract(inizio).TotalHours > 0); + } + catch + { } + return (cond1 && cond2 && cond3); + } + } + } + /// + /// classe di funzioni inerenti le date + /// + public class datario + { + /// + /// inizializzazione empty + /// + public datario() + { + } + /// + /// costruisce un oggetto intervallo date + /// + /// + /// + /// + public intervalloDate setIntervallo(DateTime inizio, DateTime fine) + { + intervalloDate periodo = new intervalloDate(); + periodo.inizio = inizio; + periodo.fine = fine; + return periodo; + } + /// + /// effettua l'operazione di intersezione tra 2 intervali di date restituendo ulteriore intervallo: NB se sono intervali disgiunti restituisce 9/9/9999 x inizio e fine + /// + /// + /// + /// + public intervalloDate intersecaIntervalli(intervalloDate interv1, intervalloDate interv2) + { + intervalloDate interv3; + // verifico non siano disgiunti... + if (interv1.fine < interv2.inizio || interv2.fine < interv1.inizio) + { + interv3.inizio = Convert.ToDateTime("9/9/9999"); + interv3.fine = Convert.ToDateTime("9/9/9999"); + } + else + { + interv3 = interv1; + if (interv2.inizio > interv1.inizio) + { + interv3.inizio = interv2.inizio; + } + if (interv2.fine < interv1.fine) + { + interv3.fine = interv2.fine; + } + } + return interv3; + } + /// + /// oggetto mese precedente alla dataLilmite + /// + /// + public intervalloDate mesePrecedente(DateTime dataLimite) + { + intervalloDate interv = new intervalloDate(); + interv.inizio = dataLimite.AddMonths(-1).AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); + interv.fine = dataLimite.AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); + return interv; + } + /// + /// oggetto mese corrente fino alla dataLilmite + /// + /// + public intervalloDate meseCorrente(DateTime dataLimite) + { + intervalloDate interv = new intervalloDate(); + interv.inizio = dataLimite.AddDays(-(dataLimite.Day - 1)).Subtract(dataLimite.TimeOfDay); + interv.fine = dataLimite.Subtract(dataLimite.TimeOfDay); + return interv; + } + /// + /// confronta le date e restituisce true se le date sono nello stesso mese + /// + /// + /// + /// + public bool stessoMese(DateTime data1, DateTime data2) + { + bool stessoMese = false; + if ((data1.Year == data2.Year) && (data1.Month == data2.Month)) + { + stessoMese = true; + } + return stessoMese; + } + /// + /// restituisce l'intervallo del giorno completo che comprende la data indicata + /// + /// + /// + public intervalloDate giornata(DateTime data) + { + intervalloDate interv = new intervalloDate(); + interv.inizio = data.Subtract(data.TimeOfDay); + interv.fine = interv.inizio.AddDays(1); + return interv; + } + /// + /// restituisce l'intervallo di N giorni fino alla data indicata + /// + /// + /// + /// + public intervalloDate ultimiGiorni(DateTime data, int numGiorniPrima) + { + intervalloDate interv = new intervalloDate(); + interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); + interv.inizio = interv.fine.AddDays(-numGiorniPrima); + return interv; + } + /// + /// restituisce l'intervallo della settimana corrente per la data indicata + /// + /// + /// + public intervalloDate questaSett(DateTime data) + { + intervalloDate interv = new intervalloDate(); + interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); + DayOfWeek giorno = data.DayOfWeek; + int numGG = 0; + switch (giorno) + { + case DayOfWeek.Monday: + numGG = 1; + break; + case DayOfWeek.Tuesday: + numGG = 2; + break; + case DayOfWeek.Wednesday: + numGG = 3; + break; + case DayOfWeek.Thursday: + numGG = 4; + break; + case DayOfWeek.Friday: + numGG = 5; + break; + case DayOfWeek.Saturday: + numGG = 6; + break; + case DayOfWeek.Sunday: + numGG = 7; + break; + default: + break; + } + interv.inizio = interv.fine.AddDays(-numGG); + return interv; + } + /// + /// restituisce l'intervallo del mese corrente per la data indicata (dal giorno 1 all'indomani delal data indicata) + /// + /// + /// + public intervalloDate questoMese(DateTime data) + { + intervalloDate interv = new intervalloDate(); + interv.fine = data.Subtract(data.TimeOfDay).AddDays(1); + interv.inizio = interv.fine.AddDays(-data.Day); + return interv; + } + /// + /// restituisce l'intervallo del mese che comprende la data indicata (dal primo all'ultimo giorno) + /// + /// + /// + public intervalloDate estremiMese(DateTime data) + { + intervalloDate interv = new intervalloDate(); + interv.inizio = data.AddDays(-(data.Day - 1)).Subtract(data.TimeOfDay); + interv.fine = interv.inizio.AddMonths(1); + return interv; + } + /// + /// restituisce l'intervallo dell'anno corrente per la data indicata + /// + /// + /// + public intervalloDate estremiAnno(DateTime data) + { + intervalloDate interv = new intervalloDate(); + interv.inizio = data.AddDays(-(data.Day - 1)).AddMonths(-(data.Month - 1)).Subtract(data.TimeOfDay); + interv.fine = interv.inizio.AddMonths(12); + return interv; + } + /// + /// oggetto singleton + /// + public static datario mngr = new datario(); + } }