diff --git a/C2P/Scripts/jSteamware.js b/C2P/Scripts/jSteamware.js
new file mode 100644
index 0000000..cc9f6f0
--- /dev/null
+++ b/C2P/Scripts/jSteamware.js
@@ -0,0 +1,34 @@
+/*
+* Utility JS Steamware
+*
+* Steamware 2014+
+*
+*/
+
+
+// Gestione oggetti datepicker (globale)
+function fixDatePicker()
+{
+ $.datepicker.setDefaults($.datepicker.regional["it"]);
+ $(".datepicker").datepicker({
+ //showOtherMonths: true,
+ //selectOtherMonths: true,
+ showButtonPanel: true,
+ changeMonth: true,
+ changeYear: true,
+ dateFormat: "dd/mm/yy"
+ });
+}
+
+
+// richiamo quando il DOM della pagina è ok...
+$(function () {
+ fixDatePicker();
+});
+
+// oggetto da legare all'update parziale ajax x sistemare script vari
+var prm = Sys.WebForms.PageRequestManager.getInstance();
+prm.add_endRequest(function () {
+ // re-bind post eventi here
+ fixDatePicker();
+});
\ No newline at end of file
diff --git a/C2P/WebUserControls/mod_selPeriodo.ascx b/C2P/WebUserControls/mod_selPeriodo.ascx
new file mode 100644
index 0000000..afa2a2a
--- /dev/null
+++ b/C2P/WebUserControls/mod_selPeriodo.ascx
@@ -0,0 +1,109 @@
+<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="mod_selPeriodo.ascx.cs" Inherits="C2P.WebUserControls.mod_selPeriodo" %>
+
+<%----%>
+
+
+
+
+
+ 00
+ 01
+ 02
+ 03
+ 04
+ 05
+ 06
+ 07
+ 08
+ 09
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+
+
+ →
+
+
+ 00
+ 01
+ 02
+ 03
+ 04
+ 05
+ 06
+ 07
+ 08
+ 09
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+
+
+
+ selezione
+ oggi
+ ieri
+ questa settimana
+ ultimi 7gg
+ questo mese
+ ultimi 30gg
+ 1 anno
+
+
+
+
+
+
+
+
diff --git a/C2P/WebUserControls/mod_selPeriodo.ascx.cs b/C2P/WebUserControls/mod_selPeriodo.ascx.cs
new file mode 100644
index 0000000..f160d35
--- /dev/null
+++ b/C2P/WebUserControls/mod_selPeriodo.ascx.cs
@@ -0,0 +1,313 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using SteamWare;
+
+
+namespace C2P.WebUserControls
+{
+ public partial class mod_selPeriodo : System.Web.UI.UserControl
+ {
+ #region area protected
+
+ protected intervalloDate _intervallo;
+
+ ///
+ /// avvio componente
+ ///
+ ///
+ protected override void OnInit(EventArgs e)
+ {
+ base.OnInit(e);
+ setIntervallo();
+ setDurataMin();
+ }
+ ///
+ /// 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 "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;
+ case "1 anno":
+ _intervallo = _datario.ultimiGiorni(DateTime.Now, 366);
+ 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");
+ if (mostraSelOra)
+ {
+ ddlOraInizio.Visible = true;
+ ddlOraFine.Visible = true;
+ }
+ else
+ {
+ ddlOraInizio.Visible = false;
+ ddlOraFine.Visible = false;
+ }
+ }
+ ///
+ /// 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();
+ }
+ ///
+ /// imposta durata minima
+ ///
+ private void setDurataMin()
+ {
+ int _durataMin;
+ try
+ {
+ _durataMin = (int)Session["_durataMin"];
+ }
+ catch
+ {
+ _durataMin = 0;
+ Session["_durataMin"] = _durataMin;
+ }
+ txtDurataMin.Text = _durataMin.ToString();
+ }
+ ///
+ /// caricamento pagina
+ ///
+ ///
+ ///
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ lblPeriodo.Text = "Periodo di riferimento: ";
+ 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;
+ _intervallo = interv;
+ aggiornaDateMostrate(false);
+ }
+ }
+ ///
+ /// effettua update
+ ///
+ ///
+ public void doUpdate(bool doReportUpdate)
+ {
+ aggiornaDateMostrate(doReportUpdate);
+ }
+ ///
+ /// imposta periodo libero di selezione
+ ///
+ public void setPeriodoFree()
+ {
+ ddlSelPeriodo.SelectedIndex = 0;
+ }
+
+ #region gestione eventi
+
+ public event EventHandler eh_doUpdate;
+
+ #endregion
+
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/C2P/WebUserControls/mod_selPeriodo.ascx.designer.cs b/C2P/WebUserControls/mod_selPeriodo.ascx.designer.cs
new file mode 100644
index 0000000..efe24cb
--- /dev/null
+++ b/C2P/WebUserControls/mod_selPeriodo.ascx.designer.cs
@@ -0,0 +1,96 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace C2P.WebUserControls {
+
+
+ public partial class mod_selPeriodo {
+
+ ///
+ /// lblPeriodo control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Label lblPeriodo;
+
+ ///
+ /// txtInizio control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.TextBox txtInizio;
+
+ ///
+ /// ddlOraInizio control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlOraInizio;
+
+ ///
+ /// txtFine control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.TextBox txtFine;
+
+ ///
+ /// ddlOraFine control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlOraFine;
+
+ ///
+ /// ddlSelPeriodo control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlSelPeriodo;
+
+ ///
+ /// btnUpdate control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Button btnUpdate;
+
+ ///
+ /// lblDurataMin control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Label lblDurataMin;
+
+ ///
+ /// txtDurataMin control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.TextBox txtDurataMin;
+ }
+}