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
}
}