using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using SteamWare; using GPW_data; namespace GPW.WebUserControls { public partial class mod_adminProgetti : System.Web.UI.UserControl { #region area standard (non modificare) #region gestione eventi public event EventHandler eh_resetSelezione; public event EventHandler eh_nuovoValore; public event EventHandler eh_selValore; #endregion /// /// effettua traduzione del lemma /// /// /// public string traduci(string lemma) { return user_std.UtSn.Traduci(lemma); } /// /// resetta la selezione dei valori in caso di modifiche su altri controlli /// public void resetSelezione() { grView.SelectedIndex = -1; grView.DataBind(); mod_dettaglioProgetto1.Visible = false; if (eh_resetSelezione != null) { eh_resetSelezione(this, new EventArgs()); } } /// /// reset della selezione /// /// /// protected void btnReset_Click(object sender, EventArgs e) { resetSelezione(); } /// /// gestione evento richiesta nuovo valore (mostra footer, ...) /// /// /// protected void btnNew_Click(object sender, EventArgs e) { // reset selezione... resetSelezione(); // mostro il footer oppure la riga dei dettagli x nuovo... if (grView.FooterRow != null) { grView.FooterRow.Visible = true; } // sollevo evento nuovo valore... if (eh_nuovoValore != null) { eh_nuovoValore(this, new EventArgs()); } } /// /// inserisce nuovo valore da footer /// /// /// protected void lblIns_click(object sender, EventArgs e) { // click su inserimento, chiamo il metodo insert dell'ObjectDataSource ods.Insert(); } /// /// annulla inserimento nuovo valore da footer /// /// /// protected void lblCanc_click(object sender, EventArgs e) { // annullo inserimento: nascondo footer, bind controlli... grView.FooterRow.Visible = false; } /// /// traduce gli header delle colonne /// /// /// protected void grView_DataBound(object sender, EventArgs e) { if (grView.Rows.Count > 0) { LinkButton lb; // aggiorno gli headers foreach (TableCell cella in grView.HeaderRow.Cells) { try { lb = (LinkButton)cella.Controls[0]; lb.Text = traduci(lb.Text); } catch { } } int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1); lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord); } else { lblNumRec.Text = ""; } } #endregion #region area CUSTOM (da modificare) /// /// pagina corrente (URL finale) /// public string _paginaCorrente { get; set; } /// /// determina se siano da visualizzare i progetti già chiusi /// public bool showChiusi { get { return memLayer.ML.BoolSessionObj("showPrjArch"); } set { memLayer.ML.setSessionVal("showPrjArch", value); } } /// /// determina se siano visibili progetti "vuoti" con zero ore caricate quindi /// public bool showVuoti { get { return memLayer.ML.BoolSessionObj("showPrjZeroH"); } set { memLayer.ML.setSessionVal("showPrjZeroH", value); } } /// /// determina se siano visibili SOLO progetti "Starred" /// public bool showOnlyStarred { get { return memLayer.ML.BoolSessionObj("showPrjStar"); } set { memLayer.ML.setSessionVal("showPrjStar", value); } } /// /// caricamento /// /// /// protected void Page_Load(object sender, EventArgs e) { grView.PageSize = utils.pageSize; if (!Page.IsPostBack) { // imposto intervallo date...10 anni... intervalloDate date = new intervalloDate(); date.fine = DateTime.Now.Date.AddDays(1); date.inizio = date.fine.AddYears(-10); mod_periodoAnalisi1.intervalloAnalisi = date; // svuoto variabili sessione memLayer.ML.emptySessionVal("idxProgetto_sel"); memLayer.ML.emptySessionVal("idxCli_sel"); filtroCli.ods = odsClienti; filtroCli.reselFirst(); filtroCli.isChecked = false; showChiusi = false; showVuoti = true; mod_dettaglioProgetto1.Visible = false; } filtroCli.eh_selValore += new EventHandler(filtroCli_eh_selValore); mod_dettaglioProgetto1.eh_nuovoValore += new EventHandler(mod_dettaglioProgetto1_eh_nuovoValore); } /// /// salva in variabile pagina il nome della pagina corrente /// protected void PagCorrente() { Uri MyUrl = Request.Url; string delimStr = "/"; char[] delimiter = delimStr.ToCharArray(); string[] finalUrl = MyUrl.LocalPath.ToString().Split(delimiter); int n = finalUrl.Length; _paginaCorrente = finalUrl[n - 1].ToString(); } /// /// cambiati dati dettaglio (attivo/inattivo) /// /// /// void mod_dettaglioProgetto1_eh_nuovoValore(object sender, EventArgs e) { doUpdate(); } /// /// selezionato valore, filtro! /// /// /// void filtroCli_eh_selValore(object sender, EventArgs e) { if (filtroCli.isChecked) { memLayer.ML.setSessionVal("idxCli_sel", filtroCli.valoreInt); } else { memLayer.ML.setSessionVal("idxCli_sel", 0); } grView.DataBind(); } /// /// elenco colonne del datagrid /// /// protected DataColumnCollection colonneObj() { DS_Applicazione.AnagProgettiDataTable tabella = new DS_Applicazione.AnagProgettiDataTable(); DataColumnCollection colonne = tabella.Columns; return colonne; } /// /// determina se sia eliminabile il record (=non usato) /// /// /// public bool delEnabled(object idxObj) { bool answ = isWritable(); // solo se ha diritti scrittura controllo if (answ) { int trovati = 0; // !!!FARE!!! #if false // controllo se ci siano tipo celle associate trovati = MagClass.magazzino.taTipoCella.getByCodMag(memLayer.ML.StringSessionObj("CodCS"), idxObj.ToString()).Rows.Count; // controllo se ci siano blocchi associati trovati = trovati + MagClass.magazzino.taBlocchi.getByCodMag(memLayer.ML.StringSessionObj("CodCS"), idxObj.ToString()).Rows.Count; #endif // controllo se ci sono record correlati... if (trovati > 0) { answ = false; } } return answ; } /// /// evento selezione! /// /// /// protected void grView_SelectedIndexChanged(object sender, EventArgs e) { memLayer.ML.setSessionVal("idxProgetto_sel", grView.SelectedDataKey["idxProgetto"]); mod_dettaglioProgetto1.Visible = true; if (eh_selValore != null) { eh_selValore(this, new EventArgs()); } } /// /// determina se mostrare i progetti archiviati /// /// /// protected void chkShowChiusi_CheckedChanged(object sender, EventArgs e) { showChiusi = chkShowChiusi.Checked; grView.DataBind(); } /// /// salvo in session che il prox comando è clonare... /// /// /// protected void imgDettFasi_Click(object sender, ImageClickEventArgs e) { SteamWare.memLayer.ML.setSessionVal("nextObjCommand", "dettFasi"); } /// /// intercetto eventuale update fittizio x rimandare a pagina dett fasi /// /// /// protected void grView_RowUpdating(object sender, GridViewUpdateEventArgs e) { // salvo progetto sel memLayer.ML.setSessionVal("idxProgetto_sel", e.Keys["idxProgetto"]); // quale comando? string _comando = ""; if (SteamWare.memLayer.ML.isInSessionObject("nextObjCommand")) { _comando = SteamWare.memLayer.ML.StringSessionObj("nextObjCommand"); SteamWare.memLayer.ML.emptySessionVal("nextObjCommand"); } // verifico il tipo di richiesta (clona o update normale) switch (_comando) { case "dettFasi": // salvo idxCli... int idxCli = 0; try { idxCli = DataProxy.DP.taAP.getByIdxPrj(memLayer.ML.IntSessionObj("idxProgetto_sel"))[0].idxCliente; } catch { } memLayer.ML.setSessionVal("idxCli_sel", idxCli); Response.Redirect("fasi.aspx"); // blocco update! e.Cancel = true; break; default: // faccio update! break; } } /// /// effettua update controllo /// public void doUpdate() { resetSelezione(); } /// /// inverte valore booleano /// /// /// public bool invBool(object valore) { bool answ = true; try { answ = !Convert.ToBoolean(valore); } catch { } return answ; } /// /// restituisce una classe css a seconda dei valori passati: /// green: bdgt > real /// orange: real > bdgt*warning /// red: real > bdgt /// std: errore... /// /// /// /// public string colorByVal(object real, object bdgt) { string answ = "badgeStd"; try { double valoreReal = Convert.ToDouble(real); double valoreBdget = Convert.ToDouble(bdgt); double valoreWarn = Convert.ToDouble(bdgt) * Convert.ToDouble(memLayer.ML.confReadString("warningRatioPerc")) / 100; if (valoreReal >= valoreBdget) { answ = "badgeRosso"; } else if (valoreReal >= valoreWarn) { answ = "badgeArancio"; } else { answ = "badgeVerde"; } } catch { } return "ui-corner-all " + answ; } /// /// cambia impsotazione show/hide progetti con ore a zero... /// /// /// protected void chkShowVuoti_CheckedChanged(object sender, EventArgs e) { showVuoti = chkShowVuoti.Checked; grView.DataBind(); } protected void chkShowOnlyStarred_CheckedChanged(object sender, EventArgs e) { showOnlyStarred = chkShowOnlyStarred.Checked; grView.DataBind(); } /// /// risponde alla domanda se l'utente abbia permesso tipo writable (S) nel permessi2funzione /// /// public bool isWritable() { bool answ = false; if (_paginaCorrente == null) { PagCorrente(); } answ = user_std.UtSn.isPageWriteEnabled(_paginaCorrente) && chkLicOk; return answ; } /// /// controllo stato licenze! /// public bool chkLicOk { get { return (licenzeGPW.utentiAttivi < licenzeGPW.licenzeAttive); } } /// /// recupera i dati di un nuovo record contenuti nel footer di un gridView; /// questi devono esses opportunamente nominati (es: txt{0}, dl{0}, ...) /// /// /// protected void recuperaFooter(object sender, ObjectDataSourceMethodEventArgs e) { if (chkLicOk) { //recupero la riga footer... DataColumnCollection colonne = colonneObj(); string nomeCol; string tipoColonna = ""; foreach (DataColumn colonna in colonne) { nomeCol = colonna.ColumnName; // cerco un textbox o quello che sia... if (grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol)) != null) { tipoColonna = "textBox"; } else if (grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol)) != null) { tipoColonna = "dropDownList"; } else if (grView.FooterRow.FindControl(string.Format("chk{0}", nomeCol)) != null) { tipoColonna = "checkBox"; } // in base al tipo salvo negli inputparameters dell'ODS switch (tipoColonna) { case "textBox": e.InputParameters[nomeCol] = ((TextBox)grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol))).Text; break; case "dropDownList": e.InputParameters[nomeCol] = ((DropDownList)grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol))).SelectedValue; break; case "checkBox": e.InputParameters[nomeCol] = ((CheckBox)grView.FooterRow.FindControl(string.Format("chk{0}", nomeCol))).Checked; break; default: break; } tipoColonna = ""; } } else { // annullo insert se licenze sforate... e.Cancel = true; grView.DataBind(); } } /// /// check licenze in fase di update... /// /// /// protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e) { if (!licenzeGPW.checkLicenze) { // annullo insert se licenze sforate... e.Cancel = true; grView.EditIndex = -1; grView.DataBind(); } } #endregion } }