using SteamWare; using System; namespace MoonPro.WebUserControls { public partial class mod_periodoAnalisi : System.Web.UI.UserControl { #region area protected protected intervalloDate _intervallo; protected override void OnInit(EventArgs e) { base.OnInit(e); setIntervallo(); setDurataMin(); } /// /// 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; default: break; } if ((intervalloAnalisi.inizio != _intervallo.inizio) || (intervalloAnalisi.fine != _intervallo.fine)) { verificaCoerenzaDate(); aggiornaDateMostrate(false); // 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"); } private void setIntervallo() { intervalloDate _intervallo; try { _intervallo = (intervalloDate)Session["_intervallo"]; } catch { _intervallo = new intervalloDate(); _intervallo.inizio = DateTime.Now.AddDays(-7); _intervallo.fine = DateTime.Now; Session["_intervallo"] = _intervallo; Session["_inizio"] = _intervallo.inizio; Session["_fine"] = _intervallo.fine; } scriviDate(); } 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"; } 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) { // imposto il selettore a discesa... setPeriodoFree(); // mostro btn update btnUpdate.Visible = true; } /// /// evento cambio testo data fine /// /// /// protected void txtFine_TextChanged(object sender, EventArgs e) { // imposto il selettore a discesa... setPeriodoFree(); // mostro btn update btnUpdate.Visible = true; } /// /// in questo caso faccio udpate periodo mostrato /// /// /// protected void btnUpdate_Click(object sender, EventArgs e) { 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 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() { DropDownList1.SelectedIndex = 0; } #region gestione eventi public event EventHandler eh_doUpdate; #endregion /// /// effettua uno zoom 2 X sulle date attuali /// public void dateZoom() { // calcolo zoom 2X double intervMinutiOrig = intervalloAnalisi.fine.Subtract(intervalloAnalisi.inizio).TotalMinutes; // leggo data in cui lo zoom era centrato... DateTime centroZoom = Convert.ToDateTime(memLayer.ML.objSessionObj("zoomCenter")); // calcolo posizione relativa zoom... double posizioneZoom = centroZoom.Subtract(intervalloAnalisi.inizio).TotalMinutes / intervMinutiOrig; // init! _intervallo = intervalloAnalisi; // verifico che azione fare if (posizioneZoom < 0.25) // se è nel 1/4 lascio zoom inalterato e "vado a sx" di 1/2 intervallo { if (intervMinutiOrig > 120) { _intervallo.inizio = _intervallo.inizio.AddMinutes(-intervMinutiOrig / 2.0); _intervallo.fine = _intervallo.fine.AddMinutes(-intervMinutiOrig / 2.0); } else { _intervallo.inizio = _intervallo.inizio.AddMinutes(-60); _intervallo.fine = _intervallo.fine.AddMinutes(-60); } } else if (posizioneZoom > 0.75) // se è nel 3/4 lascio zoom inalterato e "vado a dx" { // mi imposto al max tra spostamento di 1/2 e l'ultimo dato disponibile... if (intervMinutiOrig > 120) { _intervallo.fine = _intervallo.fine.AddMinutes(intervMinutiOrig / 2.0); if (_intervallo.fine > DateTime.Now) { _intervallo.fine = DateTime.Now; } _intervallo.inizio = _intervallo.fine.AddMinutes(-intervMinutiOrig); } else { _intervallo.inizio = _intervallo.inizio.AddMinutes(60); _intervallo.fine = _intervallo.fine.AddMinutes(60); } } else // zoom!!! { if (intervMinutiOrig > 120) { _intervallo.inizio = _intervallo.inizio.AddMinutes(intervMinutiOrig / 4.0); _intervallo.fine = _intervallo.fine.AddMinutes(-intervMinutiOrig / 4.0); } else // 1 ora di zoom! { _intervallo.inizio = _intervallo.inizio.Date.AddHours(_intervallo.inizio.TimeOfDay.Hours); _intervallo.fine = _intervallo.inizio.AddHours(1); } } // arrotondo all'ora... _intervallo.inizio = _intervallo.inizio.Date.AddHours(_intervallo.inizio.TimeOfDay.Hours); _intervallo.fine = _intervallo.fine.Date.AddHours(_intervallo.fine.TimeOfDay.Hours); // aggiorno in sessione intervalloAnalisi = _intervallo; Response.Redirect("~/DettaglioMacchina.aspx"); } #endregion } }