using framework_business; using framework_library; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class controls_admin_surfacecodes : System.Web.UI.UserControl { #region methods /// /// Method to Bind Code Data /// private void BindCodeData() { try { DataTable codeTable = SurfaceCodeSource; if (codeTable.Rows.Count == 0) codeTable.Rows.Add(codeTable.NewRow()); grvSurfaceCodes.DataSource = codeTable; grvSurfaceCodes.DataBind(); } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region events /// /// Page Load Event /// /// /// protected void Page_Load(object sender, EventArgs e) { try { if (!Page.IsPostBack) { Session["surfaceCodeSource"] = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceItemCode), "", "", ""); BindCodeData(); } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// New surfaceItemCode Click /// /// /// protected void btnNewSurfaceCode_Click(object sender, EventArgs e) { try { pnlResult.Visible = false; int rowIndex = 0; if (Session["surfaceCodeSource"] != null) { DataTable dtCurrentTable = (DataTable)Session["surfaceCodeSource"]; DataRow drCurrentRow = null; if (dtCurrentTable.Rows.Count > 0) { for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) { DropDownList ddlCode = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[1].FindControl("ddlCode"); DropDownList ddlUser = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[0].FindControl("ddlUser"); TextBox txtRangeStart = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[2].FindControl("txtRangeStart"); TextBox txtRangeEnd = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[3].FindControl("txtRangeEnd"); Label lblLastUsed = (Label)grvSurfaceCodes.Rows[rowIndex].Cells[4].FindControl("lblLastUsed"); DropDownList ddlStatus = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[5].FindControl("ddlStatus"); dtCurrentTable.Rows[i - 1]["userId"] = ddlUser.SelectedValue; dtCurrentTable.Rows[i - 1]["code"] = ddlCode.SelectedValue; dtCurrentTable.Rows[i - 1]["rangeStart"] = txtRangeStart.Text; dtCurrentTable.Rows[i - 1]["rangeEnd"] = txtRangeEnd.Text; dtCurrentTable.Rows[i - 1]["lastUsed"] = lblLastUsed.Text; dtCurrentTable.Rows[i - 1]["status"] = ddlStatus.SelectedValue; rowIndex++; } drCurrentRow = dtCurrentTable.NewRow(); dtCurrentTable.Rows.Add(drCurrentRow); Session["surfaceCodeSource"] = dtCurrentTable; grvSurfaceCodes.DataSource = dtCurrentTable; grvSurfaceCodes.DataBind(); } } //Set Previous Data on Postbacks SetPreviousData(); } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } private void SetPreviousData() { try { int rowIndex = 0; if (Session["surfaceCodeSource"] != null) { DataTable dt = (DataTable)Session["surfaceCodeSource"]; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { DropDownList ddlCode = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[1].FindControl("ddlCode"); DropDownList ddlUser = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[0].FindControl("ddlUser"); TextBox txtRangeStart = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[2].FindControl("txtRangeStart"); TextBox txtRangeEnd = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[3].FindControl("txtRangeEnd"); Label lblLastUsed = (Label)grvSurfaceCodes.Rows[rowIndex].Cells[4].FindControl("lblLastUsed"); DropDownList ddlStatus = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[5].FindControl("ddlStatus"); ddlUser.SelectedValue = dt.Rows[i]["code"].ToString(); ddlCode.SelectedValue = dt.Rows[i]["userId"].ToString(); txtRangeStart.Text = dt.Rows[i]["rangeStart"].ToString() == "" ? "0" : dt.Rows[i]["rangeStart"].ToString(); txtRangeEnd.Text = dt.Rows[i]["rangeEnd"].ToString() == "" ? "0" : dt.Rows[i]["rangeEnd"].ToString(); lblLastUsed.Text = dt.Rows[i]["lastUsed"].ToString() == "" ? "0" : dt.Rows[i]["lastUsed"].ToString(); ddlStatus.SelectedValue = dt.Rows[i]["status"].ToString(); rowIndex++; } } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Cancel /// /// /// protected void btnCancel_Click(object sender, EventArgs e) { try { } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Click /// /// /// protected void btnSave_Click(object sender, EventArgs e) { try { pnlResult.Visible = false; if (ValidateData()) { int rowIndex = 0; if (Session["surfaceCodeSource"] != null) { DataTable dtCurrentTable = (DataTable)Session["surfaceCodeSource"]; if (dtCurrentTable.Rows.Count > 0) { for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) { DropDownList ddlCode = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[1].FindControl("ddlCode"); DropDownList ddlUser = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[0].FindControl("ddlUser"); TextBox txtRangeStart = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[2].FindControl("txtRangeStart"); TextBox txtRangeEnd = (TextBox)grvSurfaceCodes.Rows[rowIndex].Cells[3].FindControl("txtRangeEnd"); Label lblLastUsed = (Label)grvSurfaceCodes.Rows[rowIndex].Cells[4].FindControl("lblLastUsed"); DropDownList ddlStatus = (DropDownList)grvSurfaceCodes.Rows[rowIndex].Cells[5].FindControl("ddlStatus"); dtCurrentTable.Rows[i - 1]["userId"] = ddlUser.SelectedValue; dtCurrentTable.Rows[i - 1]["code"] = ddlCode.SelectedValue; dtCurrentTable.Rows[i - 1]["rangeStart"] = txtRangeStart.Text; dtCurrentTable.Rows[i - 1]["rangeEnd"] = txtRangeEnd.Text; dtCurrentTable.Rows[i - 1]["lastUsed"] = lblLastUsed.Text; dtCurrentTable.Rows[i - 1]["status"] = ddlStatus.SelectedValue; string recId = dtCurrentTable.Rows[i - 1]["recId"].ToString(); if (recId == "") recId = "0"; oSurfaceItemCode surfaceItemCode = new oSurfaceItemCode(); surfaceItemCode.recId = Convert.ToInt32(recId); surfaceItemCode.userId = Convert.ToInt32(dtCurrentTable.Rows[i - 1]["userId"].ToString()); surfaceItemCode.code = dtCurrentTable.Rows[i - 1]["code"].ToString(); surfaceItemCode.rangeStart = Convert.ToInt32(dtCurrentTable.Rows[i - 1]["rangeStart"].ToString()); surfaceItemCode.rangeEnd = Convert.ToInt32(dtCurrentTable.Rows[i - 1]["rangeEnd"].ToString()); surfaceItemCode.lastUsed = Convert.ToInt32(dtCurrentTable.Rows[i - 1]["lastUsed"].ToString()); surfaceItemCode.status = dtCurrentTable.Rows[i - 1]["status"].ToString(); if (surfaceItemCode.recId == 0) { surfaceItemCode.recId = xData.SaveTyped("recId", typeof(oSurfaceItemCode), surfaceItemCode); } else { xData.UpdateTyped("recId", surfaceItemCode.recId.ToString(), typeof(oSurfaceItemCode), surfaceItemCode); } rowIndex++; } Session["surfaceCodeSource"] = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceItemCode), "", "", ""); DataTable codeTable = SurfaceCodeSource; if (codeTable.Rows.Count == 0) codeTable.Rows.Add(codeTable.NewRow()); grvSurfaceCodes.DataSource = codeTable; grvSurfaceCodes.DataBind(); lblResult.Text = "save successful"; pnlResult.Visible = true; } } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } private bool ValidateData() { bool isValid =true; try { foreach (GridViewRow row in grvSurfaceCodes.Rows) { if (row.RowType == DataControlRowType.DataRow) { DropDownList ddluser = (DropDownList)row.FindControl("ddlUser"); if (ddluser.SelectedIndex == 0) { lblResult.Text = "make sure all users are selected"; pnlResult.Visible = true; isValid = false; } DropDownList ddlCode = (DropDownList)row.FindControl("ddlCode"); string rowCode = ddlCode.SelectedValue; //todo: validate ranges switch (rowCode) { case "A": break; case "B": break; default: break; } } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return isValid; } /// /// row databound /// /// /// protected void grvSurfaceCodes_RowDataBound(object sender, GridViewRowEventArgs e) { try { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView rowView = (DataRowView)e.Row.DataItem; DropDownList ddlUser = (DropDownList)e.Row.FindControl("ddlUser"); ddlUser.DataSource = UserSource; ddlUser.DataTextField = "userDisplay"; ddlUser.DataValueField = "recId"; ddlUser.DataBind(); ddlUser.Items.Insert(0, new ListItem("select user", "0")); if (ddlUser.Items.FindByValue(rowView["userId"].ToString()) != null) ddlUser.SelectedValue = rowView["userId"].ToString(); DropDownList ddlCode = (DropDownList)e.Row.FindControl("ddlCode"); if (ddlCode.Items.FindByValue(rowView["code"].ToString()) != null) ddlCode.SelectedValue = rowView["code"].ToString(); TextBox txtRangeStart = (TextBox)e.Row.FindControl("txtRangeStart"); txtRangeStart.Text = rowView["rangeStart"].ToString(); TextBox txtRangeEnd = (TextBox)e.Row.FindControl("txtRangeEnd"); txtRangeEnd.Text = rowView["rangeEnd"].ToString(); Label lblLastUsed = (Label)e.Row.FindControl("lblLastUsed"); lblLastUsed.Text = rowView["lastUsed"].ToString(); DropDownList ddlStatus = (DropDownList)e.Row.FindControl("ddlStatus"); if (ddlStatus.Items.FindByValue(rowView["status"].ToString()) != null) ddlStatus.SelectedValue = rowView["status"].ToString(); if (rowView["recId"].ToString() == "") { txtRangeStart.Text = "0"; txtRangeEnd.Text = "0"; lblLastUsed.Text = "0"; } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region properties public DataTable SurfaceCodeSource { get { if (Session["surfaceCodeSource"] != null) { return (DataTable)Session["surfaceCodeSource"]; } else { Session["surfaceCodeSource"] = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceItemCode), "", "", ""); return (DataTable)Session["surfaceCodeSource"]; } } set { Session["surfaceCodeSource"] = value; } } public ArrayList UserSource { get { if (ViewState["userSource"] != null) { return (ArrayList)ViewState["userSource"]; } else { string customer = handler.ReturnSetup().code.ToString(); return xData.GetTypedByCriteriaSpecific("recId", typeof(ovUserShared), "customerCode,userType", customer + "," + pNums.UserType.WebsiteUser.GetHashCode().ToString()); } } set { ViewState["userSource"] = value; } } #endregion protected void txtRangeStart_TextChanged(object sender, EventArgs e) { GridViewRow row = (GridViewRow)((Control)sender).NamingContainer; DropDownList ddlCode = (DropDownList)row.FindControl("ddlCode"); string code = ddlCode.SelectedValue; pnlResult.Visible = false; btnSave.Enabled = true; TextBox txtStartRange = (TextBox)sender; int startRange = Convert.ToInt32(txtStartRange.Text); if (startRange <= MaxUsed(code)) { lblResult.Text = "start of range must be higher that maximum end of range"; pnlResult.Visible = true; txtStartRange.Focus(); btnSave.Enabled = false; } } private int MaxUsed(string code) { int maxNum = 0; try { foreach (GridViewRow row in grvSurfaceCodes.Rows) { if (row.RowType == DataControlRowType.DataRow) { DropDownList ddlCode = (DropDownList)row.FindControl("ddlCode"); string rowCode = ddlCode.SelectedValue; if (rowCode == code) { int rangeEnd = Convert.ToInt32(((TextBox)row.FindControl("txtRangeEnd")).Text); if (rangeEnd > maxNum) maxNum = rangeEnd; } } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return maxNum; } protected void txtRangeEnd_TextChanged(object sender, EventArgs e) { GridViewRow row = (GridViewRow)((Control)sender).NamingContainer; DropDownList ddlCode = (DropDownList)row.FindControl("ddlCode"); TextBox txtStartRange = (TextBox)row.FindControl("txtRangeStart"); string code = ddlCode.SelectedValue; pnlResult.Visible = false; btnSave.Enabled = true; TextBox txtEndRange = (TextBox)sender; int endRange = Convert.ToInt32(txtEndRange.Text); int startRange = Convert.ToInt32(txtStartRange.Text); if (endRange <= MinUsed(code)) { lblResult.Text = "end of range must be lower that minimum start of range"; pnlResult.Visible = true; txtEndRange.Focus(); btnSave.Enabled = false; } if (endRange < startRange) { lblResult.Text = "end of range must be higher than start of range"; pnlResult.Visible = true; txtEndRange.Focus(); btnSave.Enabled = false; } } private int MinUsed(string code) { int minNum = MaxUsed(code); try { foreach (GridViewRow row in grvSurfaceCodes.Rows) { if (row.RowType == DataControlRowType.DataRow) { DropDownList ddlCode = (DropDownList)row.FindControl("ddlCode"); string rowCode = ddlCode.SelectedValue; if (rowCode == code) { int rangeStart = Convert.ToInt32(((TextBox)row.FindControl("txtRangeStart")).Text); if (rangeStart < minNum) minNum = rangeStart; } } } } catch (Exception ex) { exception.HandleException("surfaceItemCodes:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return minNum; } }