Files
2020-11-26 10:33:37 +01:00

362 lines
10 KiB
C#

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 : BaseUserControl
{
#region Protected Fields
protected intervalloDate _intervallo;
#endregion Protected Fields
#region Protected Properties
/// <summary>
/// definisce se sia da mostrare il selettore delle ore nel controllo
/// </summary>
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.CRB("mostraSelOra");
}
catch
{ }
memLayer.ML.setSessionVal("mostraSelOra", answ);
}
return answ;
}
}
#endregion Protected Properties
#region Public Properties
/// <summary>
/// indica se il controllo debba fare update in automatico o attendere pressione button update da utente
/// </summary>
public bool autoUpdate { get; set; }
public DateTime fine
{
get
{
return intervalloAnalisi.fine;
}
}
public DateTime inizio
{
get
{
return intervalloAnalisi.inizio;
}
}
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);
}
}
#endregion Public Properties
#region Private Methods
/// <summary>
/// effettua update delle date mostrate da intervallo analisi (ed eventualmente riporta update...)
/// </summary>
/// <param name="doReportUpdate"></param>
private void aggiornaDateMostrate(bool doReportUpdate)
{
scriviDate();
if (doReportUpdate)
{
reportUpdate();
}
}
/// <summary>
/// update periodo
/// </summary>
private void aggiornaPeriodo()
{
_intervallo = new intervalloDate();
// calcolo tempi arrotondati
_intervallo.inizio = Convert.ToDateTime(txtInizio.Text);
_intervallo.fine = Convert.ToDateTime(txtFine.Text);
verificaCoerenzaDate();
reportUpdate();
}
/// <summary>
/// forza update
/// </summary>
private void forceUpdate()
{
aggiornaPeriodo();
// nascondo btn update
btnUpdate.Visible = false;
}
/// <summary>
/// verifica la modifica delle date..
/// </summary>
private void procDateMod()
{
// imposto il selettore a discesa...
setPeriodoFree();
// mostro btn update
btnUpdate.Visible = true;
if (autoUpdate)
{
forceUpdate();
}
}
/// <summary>
/// scrive nuove date in controllo
/// </summary>
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");
}
/// <summary>
/// imposta intervallo da sessione o di default
/// </summary>
private void setIntervallo()
{
intervalloDate _intervallo;
try
{
_intervallo = (intervalloDate)Session["_intervallo"];
}
catch
{
_intervallo = new intervalloDate();
_intervallo.inizio = DateTime.Now.AddDays(memLayer.ML.CRI("defDayFrom"));
_intervallo.fine = DateTime.Now.AddDays(1);
Session["_intervallo"] = _intervallo;
Session["_inizio"] = _intervallo.inizio;
Session["_fine"] = _intervallo.fine;
}
scriviDate();
}
/// <summary>
/// verifica che le date dell'intervallo siano coerenti (inizio < fine)
/// </summary>
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);
}
#endregion Private Methods
#region Protected Methods
/// <summary>
/// in questo caso faccio udpate periodo mostrato
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpdate_Click(object sender, EventArgs e)
{
forceUpdate();
}
/// <summary>
/// gestione del selettore rapido dell'intervallo temporale...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
}
/// <summary>
/// avvio componente
/// </summary>
/// <param name="e"></param>
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();
}
/// <summary>
/// caricamento pagina
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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";
}
}
/// <summary>
/// evento cambio testo data fine
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtFine_TextChanged(object sender, EventArgs e)
{
procDateMod();
}
/// <summary>
/// evento cambio testo data inizio
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtInizio_TextChanged(object sender, EventArgs e)
{
procDateMod();
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// effettua update
/// </summary>
/// <param name="doReportUpdate"></param>
public void doUpdate(bool doReportUpdate)
{
aggiornaDateMostrate(doReportUpdate);
}
/// <summary>
/// riporta aggiornamento a controller
/// </summary>
public override void reportUpdate()
{
intervalloAnalisi = _intervallo;
base.reportUpdate();
}
/// <summary>
/// imposta periodo libero di selezione
/// </summary>
public void setPeriodoFree()
{
ddlSelPeriodo.SelectedIndex = 0;
}
#endregion Public Methods
}
}