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 SteamWare; public partial class mod_periodoAnalisi : System.Web.UI.UserControl { #region Protected Fields protected intervalloDate _intervallo; #endregion Protected Fields #region Public Events public event EventHandler eh_doUpdate; #endregion Public Events #region Protected Properties /// /// definisce se sia da mostrare il selettore delle ore nel controllo /// protected bool mostraSelOra { get { bool answ = false; if (memLayer.ML.isInSessionObject("mostraSelOra")) { answ = memLayer.ML.BoolSessionObj("mostraSelOra"); } else { // leggo da sessione e salvo... try { answ = memLayer.ML.confReadBool("mostraSelOra"); } catch { } memLayer.ML.setSessionVal("mostraSelOra", answ); } return answ; } } #endregion Protected Properties #region Public Properties public intervalloDate intervalloAnalisi { get { intervalloDate answ = new intervalloDate(); if (memLayer.ML.isInSessionObject("_intervallo")) { answ = (intervalloDate)Session["_intervallo"]; } return answ; } set { intervalloDate interv = value; Session["_intervallo"] = interv; Session["_inizio"] = interv.inizio; Session["_fine"] = interv.fine; aggiornaDateMostrate(false); } } /// /// imposta realtime update (non mostra button am fa subito update) /// public bool realtimeUpdate { get { return memLayer.ML.BoolSessionObj("rltUpdatePeriodo"); } set { memLayer.ML.setSessionVal("rltUpdatePeriodo", value); } } public string uid { get { return this.UniqueID.Replace("$", "_").Replace("-", "_"); } } #endregion Public Properties #region Private Methods /// /// effettua update delle date mostrate da intervallo analisi (ed eventualmente riporta update...) /// /// private void aggiornaDateMostrate(bool doReportUpdate) { scriviDate(); if (doReportUpdate) { reportUpdate(); } } private void aggiornaPeriodo() { _intervallo = new intervalloDate(); // calcolo tempi arrotondati int oraInizio = 0; int oraFine = 0; if (mostraSelOra) { oraInizio = Convert.ToInt32(ddlOraInizio.SelectedValue); oraFine = Convert.ToInt32(ddlOraFine.SelectedValue); } _intervallo.inizio = Convert.ToDateTime(txtInizio.Text).AddHours(oraInizio); _intervallo.fine = Convert.ToDateTime(txtFine.Text).AddHours(oraFine).AddDays(1); verificaCoerenzaDate(); int _durataMin; _durataMin = Convert.ToInt32(txtDurataMin.Text); Session["_durataMin"] = _durataMin; reportUpdate(); } /// /// controlla se aggiornare subito o mostrare update (a seconda del valore di realtime update...) /// private void checkIfUpdate() { // se richiesto realtime if (realtimeUpdate) { aggiornaPeriodo(); // nascondo btn update btnUpdate.Visible = false; } else { // altrimenti mostro btn update btnUpdate.Visible = true; } } /// /// 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 durata minima /// private void setDurataMin() { int _durataMin = 0; try { if (memLayer.ML.isInSessionObject("_intervallo")) { _durataMin = memLayer.ML.IntSessionObj("_durataMin"); } } catch { _durataMin = 0; Session["_durataMin"] = _durataMin; } txtDurataMin.Text = _durataMin.ToString(); } /// /// imposta intervallo da sessione o di default /// private void setIntervallo() { intervalloDate _intervallo; try { if (memLayer.ML.isInSessionObject("_intervallo")) { _intervallo = (intervalloDate)Session["_intervallo"]; } } catch { _intervallo = new intervalloDate(); _intervallo.inizio = DateTime.Now.AddDays(memLayer.ML.confReadInt("defDayFrom")); _intervallo.fine = DateTime.Now.AddDays(1); Session["_intervallo"] = _intervallo; Session["_inizio"] = _intervallo.inizio; Session["_fine"] = _intervallo.fine; } scriviDate(); } /// /// 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.fine = _intervallo.inizio.AddDays(1); } //intervalloAnalisi = _intervallo; aggiornaDateMostrate(false); } #endregion Private Methods #region Protected Methods /// /// in questo caso faccio udpate periodo mostrato /// /// /// protected void btnUpdate_Click(object sender, EventArgs e) { aggiornaPeriodo(); // nascondo btn update btnUpdate.Visible = false; } /// /// gestione del selettore rapido dell'intervallo temporale... /// /// /// protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { // verifico cosa sia cambiato ed imposto date... datario _datario = new datario(); switch (DropDownList1.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 "mese precedente": _intervallo = _datario.mesePrecedente(DateTime.Now); break; case "questo anno": _intervallo = _datario.estremiAnno(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(realtimeUpdate); // mostro btn update btnUpdate.Visible = !realtimeUpdate; } } /// /// avvio componente /// /// protected override void OnInit(EventArgs e) { base.OnInit(e); setIntervallo(); setDurataMin(); } protected void Page_Load(object sender, EventArgs e) { lblPeriodo.Text = "Periodo"; 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"; } /// /// 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()); } } /// /// evento cambio testo data fine /// /// /// protected void txtFine_TextChanged(object sender, EventArgs e) { // imposto il selettore a discesa... setPeriodoFree(); checkIfUpdate(); } /// /// evento cambio testo data inizio /// /// /// protected void txtInizio_TextChanged(object sender, EventArgs e) { // imposto il selettore a discesa... setPeriodoFree(); checkIfUpdate(); } #endregion Protected Methods #region Public Methods /// /// effettua update /// /// public void doUpdate(bool doReportUpdate) { aggiornaDateMostrate(doReportUpdate); } /// /// imposta periodo libero di selezione /// public void setPeriodoFree() { DropDownList1.SelectedIndex = 0; } #endregion Public Methods }