using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using SteamWare; using GPW_data; using System.Globalization; namespace GPW.WebUserControls { public partial class mod_mancTimb : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { // salvo data corrente x filtraggi... if (!Page.IsPostBack) { memLayer.ML.setSessionVal("today", DateTime.Now.ToShortDateString()); // imposto entrata rblEntrata.SelectedIndex = 0; // imposto valori selezionati a metà DateTime adesso = DateTime.Now; ddlOra.SelectedValue = adesso.Hour.ToString(); ddlMin.SelectedValue = "30"; chkShowAll.Visible = userCanApprove; } checkFixOds(); } public event EventHandler ev_reqUpdate; /// /// registro timbratura NON APPROVATA /// /// /// private void registraTimbraturaNonApp(bool isEntrata, DateTime dataOra) { // salvo evento entrata... string IPv4 = ""; bool approvata = false; // è una richiesta!!!! if (DataProxy.idxDipendente > 0) { // recupero IP IPv4 = Request.UserHostName; DataProxy.DP.taTimb.stp_insTimbMan(DataProxy.idxDipendente, dataOra, isEntrata, IPv4, "NoTim", approvata); logger.lg.scriviLog(string.Format("Richiesta timbratura per il dipendente:{0} in data:{1} isEntrata:{2}", DataProxy.idxDipendente, dataOra, isEntrata), tipoLog.INFO); } else { logger.lg.scriviLog("IdxDipendente non trovato! inserimento timbratura mancante impossibile", tipoLog.INFO); } } /// /// salvo richiesta /// /// /// protected void btnRichMT_Click(object sender, EventArgs e) { logger.lg.scriviLog("Richiesta registrazione timbratura manuale", tipoLog.INFO); // salva una richiesta di timbratura (ovvero approvata = FALSE!!!) DateTime richiesta = DateTime.Now; try { CultureInfo ita = new CultureInfo("it-IT"); logger.lg.scriviLog(string.Format("Data: {0}", ddlData.SelectedValue)); richiesta = Convert.ToDateTime(ddlData.SelectedValue, ita); double ora = Convert.ToDouble(ddlOra.SelectedValue); double minuto = Convert.ToDouble(ddlMin.SelectedValue); richiesta = richiesta.AddHours(ora).AddMinutes(minuto); bool isEntrata = Convert.ToBoolean(rblEntrata.SelectedValue); registraTimbraturaNonApp(isEntrata, richiesta); // aggiorno gridview grView.DataBind(); } catch { logger.lg.scriviLog("Errore conversione datetime!"); } // sollevo evento ev_reqUpdate?.Invoke(this, new EventArgs()); } /// /// inverte valore booleano /// /// /// public bool invBool(object valore) { bool answ = true; try { answ = !Convert.ToBoolean(valore); } catch { } return answ; } /// /// verifica se l'utente possa approvare la modifica oraria /// public bool userCanApprove { get { bool answ = false; try { answ = DataProxy.DP.taDip2Ruoli.getByDipRuolo(DataProxy.idxDipendente, "AppMancTimb").Rows.Count > 0; } catch { } return answ; } } /// /// calcola cognome-nome da idx /// /// /// public string cognomeNome(object idxDip) { string answ = ""; try { DS_Applicazione.DipendentiRow rigaDip = DataProxy.DP.taDipendenti.getByIdx(Convert.ToInt32(idxDip))[0]; answ = string.Format("{0} {1}", rigaDip.Cognome, rigaDip.Nome); } catch { } return answ; } /// /// cambia tipo di visualizzaizone /// /// /// protected void chkShowAll_CheckedChanged(object sender, EventArgs e) { checkFixOds(); } /// /// effettua fix dell'ods /// private void checkFixOds() { if (chkShowAll.Checked) { ods.SelectMethod = "getNonAppr"; } else { ods.SelectMethod = "getNonApprByDip"; } grView.DataBind(); } /// /// wrapper x salvare approvazioni /// /// /// protected void grView_SelectedIndexChanged(object sender, EventArgs e) { // salvo approvazione DateTime dataOra = DateTime.Now; int idxDip = 0; try { dataOra = Convert.ToDateTime(grView.SelectedDataKey["dataOra"].ToString()); idxDip = Convert.ToInt32(grView.SelectedDataKey["idxDipendente"].ToString()); logger.lg.scriviLog(string.Format("Approvazione per dip {0} in data/ora {1}", idxDip, dataOra), tipoLog.INFO); // recupero tab timbr non approvate x dip DS_Applicazione.TimbratureRow rigaTimb = DataProxy.DP.taTimb.getByDipDataOra(idxDip, dataOra)[0]; // effettua arrotondamento (aggiunge/toglie) int minOrig = dataOra.Minute; int secOrig = dataOra.Second; int minArr = 0; int step = Convert.ToInt32(txtArrot.Text); if (rigaTimb.entrata) { minArr = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(minOrig / step))) * step; } else { minArr = Convert.ToInt32(Math.Floor(Convert.ToDouble(minOrig / step))) * step; } // modifico data del record DataProxy.DP.taTimb.stp_Timbr_modifica(idxDip, dataOra, dataOra.AddMinutes(minArr - minOrig).AddSeconds(-secOrig)); // approvo con data modificata DataProxy.DP.taTimb.stp_Timbr_Approva(idxDip, dataOra.AddMinutes(minArr - minOrig).AddSeconds(-secOrig)); } catch { } // update! grView.SelectedIndex = -1; grView.DataBind(); // sollevo evento ev_reqUpdate?.Invoke(this, new EventArgs()); } /// /// sistemo post eliminazione /// /// /// protected void grView_RowUpdated(object sender, GridViewUpdatedEventArgs e) { chkShowAll.Checked = true; checkFixOds(); // sollevo evento ev_reqUpdate?.Invoke(this, new EventArgs()); } protected void grView_RowDeleted(object sender, GridViewDeletedEventArgs e) { // sollevo evento ev_reqUpdate?.Invoke(this, new EventArgs()); } } }