using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using SteamWare; namespace MoonProTablet.WebUserControls { public partial class mod_selPeriodo : System.Web.UI.UserControl { protected intervalloDate _intervallo; /// /// caricamento pagina /// /// /// protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { txtInizio.ToolTip = "inizio periodo di riferimento per i dati mostrati"; txtFine.ToolTip = "fine periodo di riferimento per i dati mostrati"; } } /// /// avvio componente /// /// protected override void OnInit(EventArgs e) { base.OnInit(e); txtInizio.ToolTip = "inizio periodo di riferimento per i dati mostrati"; txtFine.ToolTip = "fine periodo di riferimento per i dati mostrati"; setIntervallo(); } /// /// 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; } } /// /// gestione del selettore rapido dell'intervallo temporale... /// /// /// protected void ddlSelPeriodo_SelectedIndexChanged(object sender, EventArgs e) { // verifico cosa sia cambiato ed imposto date... datario _datario = new datario(); switch (ddlSelPeriodo.SelectedValue) { case "1": // selezione libera break; case "2": // oggi _intervallo = _datario.giornata(DateTime.Now); break; case "3": // ieri _intervallo = _datario.giornata(DateTime.Now.AddDays(-1)); break; case "4": _intervallo = _datario.questaSett(DateTime.Now); break; case "5": _intervallo = _datario.ultimiGiorni(DateTime.Now, 7); break; case "6": _intervallo = _datario.questoMese(DateTime.Now); break; case "7": _intervallo = _datario.ultimiGiorni(DateTime.Now, 30); break; case "8": _intervallo = _datario.ultimiGiorni(DateTime.Now, 366); break; case "9": _intervallo = _datario.estremiAnno(DateTime.Now); break; case "10": _intervallo = _datario.estremiAnno(DateTime.Now.AddYears(-1)); break; case "11": _intervallo = _datario.ultimiGiorni(DateTime.Now, 36600); break; default: break; } if ((intervalloAnalisi.inizio != _intervallo.inizio) || (intervalloAnalisi.fine != _intervallo.fine)) { verificaCoerenzaDate(); aggiornaDateMostrate(false); // mostro btn update btnUpdate.Visible = true; if (autoUpdate) { forceUpdate(); } } } /// /// 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.ToString("yyyy-MM-dd"); txtFine.Text = _intervallo.fine.ToString("yyyy-MM-dd"); } /// /// 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(memLayer.ML.confReadInt("defDayFrom")); _intervallo.fine = DateTime.Now.AddDays(1); Session["_intervallo"] = _intervallo; Session["_inizio"] = _intervallo.inizio; Session["_fine"] = _intervallo.fine; } scriviDate(); } /// /// update periodo /// private void aggiornaPeriodo() { _intervallo = new intervalloDate(); // calcolo tempi arrotondati _intervallo.inizio = Convert.ToDateTime(txtInizio.Text); _intervallo.fine = Convert.ToDateTime(txtFine.Text); verificaCoerenzaDate(); 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) { procDateMod(); } /// /// verifica la modifica delle date.. /// private void procDateMod() { // imposto il selettore a discesa... setPeriodoFree(); // mostro btn update btnUpdate.Visible = true; if (autoUpdate) { forceUpdate(); } } /// /// evento cambio testo data fine /// /// /// protected void txtFine_TextChanged(object sender, EventArgs e) { procDateMod(); } /// /// in questo caso faccio udpate periodo mostrato /// /// /// protected void btnUpdate_Click(object sender, EventArgs e) { forceUpdate(); } /// /// forza update /// private void forceUpdate() { 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()); } } public intervalloDate intervalloAnalisi { get { return (intervalloDate)Session["_intervallo"]; } set { intervalloDate interv = value; Session["_intervallo"] = interv; Session["_inizio"] = interv.inizio; Session["_fine"] = interv.fine; _intervallo = interv; aggiornaDateMostrate(false); } } public DateTime inizio { get { return intervalloAnalisi.inizio; } } public DateTime fine { get { return intervalloAnalisi.fine; } } /// /// effettua update /// /// public void doUpdate(bool doReportUpdate) { aggiornaDateMostrate(doReportUpdate); } /// /// imposta periodo libero di selezione /// public void setPeriodoFree() { ddlSelPeriodo.SelectedIndex = 0; } /// /// indica se il controllo debba fare update in automatico o attendere pressione button update da utente /// public bool autoUpdate { get; set; } /// /// wrapper traduzione /// /// /// public string traduci(object lemma) { return user_std.UtSn.Traduci(lemma.ToString()); } #region gestione eventi public event EventHandler eh_doUpdate; #endregion } }