Files
MoonPro.net/MP-DASH/WebUserControls/mod_periodoAnalisi.ascx.cs
T
2018-06-08 09:48:15 +02:00

316 lines
11 KiB
C#

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();
}
/// <summary>
/// gestione del selettore rapido dell'intervallo temporale...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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;
}
}
/// <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>
/// 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.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();
}
/// <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);
}
/// <summary>
/// evento cambio testo data inizio
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtInizio_TextChanged(object sender, EventArgs e)
{
// imposto il selettore a discesa...
setPeriodoFree();
// mostro btn update
btnUpdate.Visible = true;
}
/// <summary>
/// evento cambio testo data fine
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtFine_TextChanged(object sender, EventArgs e)
{
// imposto il selettore a discesa...
setPeriodoFree();
// mostro btn update
btnUpdate.Visible = true;
}
/// <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)
{
aggiornaPeriodo();
// nascondo btn update
btnUpdate.Visible = false;
}
/// <summary>
/// riporta aggiornamento a controller
/// </summary>
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;
}
}
/// <summary>
/// effettua update
/// </summary>
/// <param name="doReportUpdate"></param>
public void doUpdate(bool doReportUpdate)
{
aggiornaDateMostrate(doReportUpdate);
}
/// <summary>
/// imposta periodo libero di selezione
/// </summary>
public void setPeriodoFree()
{
DropDownList1.SelectedIndex = 0;
}
#region gestione eventi
public event EventHandler eh_doUpdate;
#endregion
/// <summary>
/// effettua uno zoom 2 X sulle date attuali
/// </summary>
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
}
}