-
+
<%--area dx: update + scelta dim pagina--%>
<%--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();
+ }
}