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.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class controls_admin_loyaltymembers : System.Web.UI.UserControl { private int _rowCount; private int _take = 20; private int _skip = 0; #region methods /// /// Method to Bind Member Data /// private void BindMemberData(int skip = 0) { try { bool filterStatus = ddStatusFilter.SelectedIndex > 0; bool statusFilter = ddStatusFilter.SelectedValue == "1"; string groupFilter = ddGroupFilter.SelectedValue; int storeFilter = Convert.ToInt32(ddStoreFilter.SelectedValue); string searchString = txtSearch.Value.ToLower(); IEnumerable query = from s in LoyaltyTable.AsEnumerable() where (storeFilter == 0 || s.Field("storeId") == storeFilter) && (groupFilter == "" || s.Field("groupName") == groupFilter) && (!filterStatus || (filterStatus && s.Field("isActive") == statusFilter)) && (searchString == "" || (searchString != "" && ((s.Field("storeCode") != null && s.Field("storeCode").ToLower().Contains(searchString)) || (s.Field("storeName") != null && s.Field("storeName").ToLower().Contains(searchString)) || (s.Field("groupCode") != null && s.Field("groupCode").ToLower().Contains(searchString)) || (s.Field("groupName") != null && s.Field("groupName").ToLower().Contains(searchString)) || (s.Field("name") != null && s.Field("name").ToLower().Contains(searchString)) || (s.Field("surname") != null && s.Field("surname").ToLower().Contains(searchString)) || (s.Field("idNumber") != null && s.Field("idNumber").ToLower().Contains(searchString)) || (s.Field("mobileNo") != null && s.Field("mobileNo").ToLower().Contains(searchString)) || (s.Field("email") != null && s.Field("email").ToLower().Contains(searchString)) || (s.Field("loyaltyNumber") != null && s.Field("loyaltyNumber").ToLower().Contains(searchString))) )) select new ovLoyaltyDetail { recId = s.Field("recId"), storeId = s.Field("storeId"), storeCode = s.Field("storeCode"), storeName = s.Field("storeName"), groupId = s.Field("groupId"), groupCode = s.Field("groupCode"), groupName = s.Field("groupName"), name = s.Field("name"), surname = s.Field("surname"), idNumber = s.Field("idNumber"), mobileNo = s.Field("mobileNo"), email = s.Field("email"), loyaltyNumber = s.Field("loyaltyNumber"), optIn = s.Field("optIn"), isActive = s.Field("isActive"), dateCreated = s.Field("dateCreated"), dateUpdated = s.Field("dateUpdated") }; query = query.Skip(skip); PagedDataSource page = new PagedDataSource(); page.AllowCustomPaging = true; page.AllowPaging = true; page.DataSource = query; page.PageSize = _take; rptLoyaltyMembers.DataSource = page; rptLoyaltyMembers.DataBind(); _rowCount = query.Count(); SetPagingControl(); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// set paging details /// private void SetPagingControl() { if ((_rowCount / _take).ToString().Contains(".")) { lblPageCount.Text = (int.Parse((((_rowCount / _take) + 1)).ToString().Substring(0, (((_rowCount / _take) + 1)).ToString().IndexOf("."))) + 2).ToString(); } else { lblPageCount.Text = ((_rowCount / _take) + 1).ToString(); } if (lblPageCount.Text == "1") { btnPageBack.Enabled = false; btnPageNext.Enabled = false; txbPageNumber.Disabled = true; } else { btnPageBack.Enabled = true; btnPageNext.Enabled = true; txbPageNumber.Disabled = false; } lblCount.Text = _rowCount.ToString(); int pageIndex = 1; if (txbPageNumber.Value != String.Empty) int.TryParse(txbPageNumber.Value, out pageIndex); if (pageIndex > int.Parse(lblPageCount.Text)) pageIndex = int.Parse(lblPageCount.Text); if (pageIndex > 0) _skip = (pageIndex - 1) * _take; else _skip = 0 * _take; //set the display fields if (pageIndex > 0) txbPageNumber.Value = (pageIndex).ToString(); else txbPageNumber.Value = "1"; } /// /// Bind stores /// private void BindLoyaltyStores() { ArrayList stores = new ArrayList(); try { stores = xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyStore), "isActive", "1"); ddStore.DataSource = stores; ddStore.DataTextField = "storeName"; ddStore.DataValueField = "recId"; ddStore.DataBind(); ddStore.Items.Insert(0, new ListItem("Select a Store", "0")); ddStoreFilter.DataSource = stores; ddStoreFilter.DataTextField = "storeName"; ddStoreFilter.DataValueField = "recId"; ddStoreFilter.DataBind(); ddStoreFilter.Items.Insert(0, new ListItem("All", "0")); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("Error.aspx", false); } } /// /// bind status filter /// private void BindLoyaltyStatus() { try { ddStatusFilter.Items.Clear(); ddStatusFilter.Items.Insert(0, new ListItem("All", "-1")); ddStatusFilter.Items.Insert(1, new ListItem("Active", "1")); ddStatusFilter.Items.Insert(2, new ListItem("In-Active", "0")); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("Error.aspx", false); } } /// /// Bind groups /// private void BindLoyaltyGroups() { ArrayList groups = new ArrayList(); ArrayList groupsFilter = new ArrayList(); try { groups = xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyGroup), "isActive,loyaltyStoreId", "1," + ddStore.SelectedValue); ddGroup.DataSource = groups; ddGroup.DataTextField = "groupName"; ddGroup.DataValueField = "recId"; ddGroup.DataBind(); ddGroup.Items.Insert(0, new ListItem("Select a Group", "0")); if (ddStoreFilter.SelectedValue != "0") groupsFilter = xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyGroup), "isActive,loyaltyStoreId", "1," + ddStoreFilter.SelectedValue); else groupsFilter = xData.GetTypedByCriteriaDistinct("recId", typeof(oLoyaltyGroup), "isActive", "1", "groupName"); ddGroupFilter.DataSource = groupsFilter; ddGroupFilter.DataTextField = "groupName"; ddGroupFilter.DataValueField = "groupName"; ddGroupFilter.DataBind(); ddGroupFilter.Items.Insert(0, new ListItem("All", "")); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("Error.aspx", false); } } /// /// Populate Form Values /// /// private void PopulatePageFormValues(ref oLoyaltyMember _member) { try { txtName.Value = _member.name; txtSurname.Value = _member.surname; txtIdNumber.Text = _member.idNumber; txtMobileNumber.Value = _member.mobileNo; txtEmail.Value = _member.email; txtLoyaltyNumber.Value = _member.loyaltyNumber; if (ddStore.Items.FindByValue(_member.loyaltyStoreId.ToString()) != null) { ddStore.SelectedValue = _member.loyaltyStoreId.ToString(); BindLoyaltyGroups(); } if (ddGroup.Items.FindByValue(_member.loyaltyGroupId.ToString()) != null) ddGroup.SelectedValue = _member.loyaltyGroupId.ToString(); chkActive.Checked = _member.isActive; chkOptIn.Checked = _member.optIn; } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Form Values /// /// private void SavePageFormValues(ref oLoyaltyMember _member) { try { _member.loyaltyStoreId = Convert.ToInt32(ddStore.SelectedValue); _member.loyaltyGroupId = Convert.ToInt32(ddGroup.SelectedValue); _member.name = txtName.Value; _member.surname = txtSurname.Value; _member.idNumber = txtIdNumber.Text; _member.mobileNo = txtMobileNumber.Value.Replace(" ", ""); _member.email = txtEmail.Value; _member.isActive = chkActive.Checked; _member.optIn = chkOptIn.Checked; if (txtLoyaltyNumber.Value == "") _member.loyaltyNumber = GetLoyaltyNumber(_member.loyaltyStoreId.ToString(), _member.loyaltyGroupId.ToString()); else _member.loyaltyNumber = txtLoyaltyNumber.Value; } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// get loyalty number /// /// /// /// private string GetLoyaltyNumber(string storeId, string groupId) { string returnValue = string.Empty; try { int storeCode = 0, groupCode = 0, nextSequence = 0; foreach (oLoyaltyStore store in xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyStore), "recId", storeId.ToString())) { storeCode = Convert.ToInt32(store.storeCode); } foreach (oLoyaltyGroup group in xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyGroup), "recId", groupId.ToString())) { groupCode = Convert.ToInt32(group.groupCode); nextSequence = group.nextSequence; } string loyaltyNumber = storeCode.ToString() + groupCode.ToString() + nextSequence.ToString(); loyaltyNumber = loyaltyNumber + utils.GetValidationCheckDigit(loyaltyNumber).ToString(); returnValue = loyaltyNumber; } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return returnValue; } /// /// Method to Toggle Panels /// /// private void TogglePanels(string panelName) { switch (panelName) { case "pnlMemberPage": pnlMemberPage.Visible = true; pnlMemberList.Visible = pnlFilters.Visible = false; break; case "pnlMemberList": pnlMemberPage.Visible = false; pnlMemberList.Visible = pnlFilters.Visible = true; break; } //clear result pnlResult.Visible = false; } /// /// set enabled /// /// private void SetEnabled(bool enabled) { try { txtName.Disabled = !enabled; txtSurname.Disabled = !enabled; txtIdNumber.Enabled = enabled; txtMobileNumber.Disabled = !enabled; txtEmail.Disabled = !enabled; txtLoyaltyNumber.Disabled = !enabled; ddStore.Enabled = enabled; ddGroup.Enabled = enabled; if (enabled) { chkActiveLabel.Attributes["onclick"] = ""; chkOptInLabel.Attributes["onclick"] = ""; } else { chkActiveLabel.Attributes.Add("onclick", "return false;"); chkOptInLabel.Attributes.Add("onclick", "return false;"); } btnSave.Visible = enabled; btnEdit.Visible = !enabled; } catch (Exception ex) { exception.HandleException("loyaltyMembers:", 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) { utils.disposeSession("loyaltyTable"); BindLoyaltyStores(); BindLoyaltyGroups(); BindLoyaltyStatus(); BindMemberData(); } } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// New member Click /// /// /// protected void btnNewMember_Click(object sender, EventArgs e) { try { //show Content Specific TogglePanels("pnlMemberPage"); Session["memberId"] = 0; utils.disposeSession("member"); oLoyaltyMember member = new oLoyaltyMember(); member.isActive = true; member.optIn = true; PopulatePageFormValues(ref member); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Edit the member page /// /// /// protected void lnkEdit_Click(object sender, EventArgs e) { oLoyaltyMember _member = new oLoyaltyMember(); ArrayList memberList = new ArrayList(); try { if (sender.GetType() == typeof(LinkButton)) { int recId = int.Parse(((LinkButton)sender).CommandArgument); if (recId > 0) { Session["memberId"] = recId; //get member memberList = xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyMember), "recId", recId.ToString()); //enumerate list foreach (oLoyaltyMember member in memberList) { //assign object _member = member; //populate page form PopulatePageFormValues(ref _member); Session["member"] = _member; break; } //show member Form TogglePanels("pnlMemberPage"); SetEnabled(true); } } } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Remove the Member /// /// /// protected void lnkRemove_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { int recId = int.Parse(((LinkButton)sender).CommandArgument); //Delete member if (xData.DeleteTyped("recId", recId.ToString(), typeof(oLoyaltyMember))) { //rebind pages grid BindMemberData(); pnlResult.Visible = true; //display successful result lblResult.Text = "the selected member was deleted successfully."; } } } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Cancel /// /// /// protected void btnCancel_Click(object sender, EventArgs e) { try { Session["memberId"] = 0; utils.disposeSession("member"); BindMemberData(); //show member list TogglePanels("pnlMemberList"); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Click /// /// /// protected void btnSave_Click(object sender, EventArgs e) { oLoyaltyMember member = new oLoyaltyMember(); try { if (utils.verifySession("member"))//update mode { member = (oLoyaltyMember)Session["member"]; //save form values SavePageFormValues(ref member); member.dateUpdated = DateTime.Now; if (xData.UpdateTyped("recId", member.recId.ToString(), typeof(oLoyaltyMember), member)) { Session["memberId"] = member.recId; Session["member"] = member; BindMemberData(); pnlResult.Visible = true; lblResult.Text = "your changes were updated successfully."; } } else { //if (!xData.VerifyExists("recId", typeof(oLoyaltyMember), "idNumber", txtIdNumber.Text)) //{ member.isActive = true; //save form values SavePageFormValues(ref member); member.dateCreated = member.dateUpdated = DateTime.Now; member.recId = xData.SaveTyped("recId", typeof(oLoyaltyMember), member); if (member.recId > 0) { Session["memberId"] = member.recId; Session["member"] = member; BindMemberData(); pnlResult.Visible = true; lblResult.Text = "your member was created successfully."; } //} //else //{ // pnlResult.Visible = true; // lblResult.Text = "A Member with this ID Number already exists on the system"; //} } if (member.loyaltyNumber != string.Empty && member.loyaltyNumber.Length > 7) { int sequenceNo = Convert.ToInt32(member.loyaltyNumber.Substring(7, 5)); foreach (oLoyaltyGroup group in xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyGroup), "recId", member.loyaltyGroupId.ToString())) { if (sequenceNo >= group.nextSequence) { group.nextSequence = sequenceNo + 1; xData.UpdateTyped("recId", group.recId.ToString(), typeof(oLoyaltyGroup), group); } } } //call cancel button event to go back to grid btnCancel_Click(null, null); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Back Button /// /// /// protected void btnBack_Click(object sender, EventArgs e) { try { LoyaltyTable = xData.GetTypedByCriteriaSpecificTable("recId", typeof(ovLoyaltyDetail), "", ""); BindMemberData(); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); } } /// /// store index change /// /// /// protected void ddStore_SelectedIndexChanged(object sender, EventArgs e) { BindLoyaltyGroups(); } /// /// group index change /// /// /// protected void ddGroup_SelectedIndexChanged(object sender, EventArgs e) { if (txtIdNumber.Text != string.Empty) txtLoyaltyNumber.Value = GetLoyaltyNumber(ddStore.SelectedValue.ToString(), ddGroup.SelectedValue.ToString()); } /// /// id number text change /// /// /// protected void txtIdNumber_TextChanged(object sender, EventArgs e) { try { string idNumber = txtIdNumber.Text; //string idValidation = utils.ValidateIDNumber(idNumber); //if (idValidation != string.Empty) //{ // pnlResult.Visible = true; // lblResult.Text = idValidation; //} //else //{ pnlResult.Visible = false; lblResult.Text = ""; foreach (oLoyaltyMember member in xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyMember), "idNumber", idNumber)) { RequiredFieldValidator1.Enabled = false; RequiredFieldValidator2.Enabled = false; RequiredFieldValidator3.Enabled = false; Session["existingMember"] = member; txtLoyaltyNumber.Value = member.loyaltyNumber; lblExistingMember.Text = member.name + " " + member.surname + " (" + member.loyaltyNumber + ")"; upExisting.Update(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showExistingMember", "$('#modExisting').modal();", true); } if (txtLoyaltyNumber.Value == string.Empty) { txtLoyaltyNumber.Value = GetLoyaltyNumber(ddStore.SelectedValue.ToString(), ddGroup.SelectedValue.ToString()); } //} } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// edit existing /// /// /// protected void btnEditExisting_Click(object sender, EventArgs e) { if (utils.verifySession("existingMember")) { oLoyaltyMember _member = (oLoyaltyMember)Session["existingMember"]; PopulatePageFormValues(ref _member); Session["memberId"] = _member.recId; Session["member"] = _member; upLoyaltyMember.Update(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showExistingMember", "$('#modExisting').modal('toggle');", true); } } /// /// create new /// /// /// protected void btnCreateNew_Click(object sender, EventArgs e) { txtLoyaltyNumber.Value = GetLoyaltyNumber(ddStore.SelectedValue.ToString(), ddGroup.SelectedValue.ToString()); upLoyaltyMember.Update(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showExistingMember", "$('#modExisting').modal('toggle');", true); } /// /// view /// /// /// protected void lnkView_Click(object sender, EventArgs e) { oLoyaltyMember _member = new oLoyaltyMember(); ArrayList memberList = new ArrayList(); try { if (sender.GetType() == typeof(LinkButton)) { int recId = int.Parse(((LinkButton)sender).CommandArgument); if (recId > 0) { Session["memberId"] = recId; //get member memberList = xData.GetTypedByCriteriaSpecific("recId", typeof(oLoyaltyMember), "recId", recId.ToString()); //enumerate list foreach (oLoyaltyMember member in memberList) { //assign object _member = member; //populate page form PopulatePageFormValues(ref _member); SetEnabled(false); Session["member"] = _member; break; } //show member Form TogglePanels("pnlMemberPage"); } } } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// edit button /// /// /// protected void btnEdit_Click(object sender, EventArgs e) { SetEnabled(true); } /// /// used for all filter events /// /// /// protected void btnSearch_Click(object sender, EventArgs e) { try { BindMemberData(); } catch (Exception ex) { exception.HandleException("loyaltyMembers:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// previous page /// /// /// protected void btnPageBack_Click(object sender, EventArgs e) { int pageIndex = 0; int.TryParse(txbPageNumber.Value, out pageIndex); if (pageIndex > 1) { txbPageNumber.Value = (pageIndex - 1).ToString(); BindMemberData((pageIndex - 2) * _take); } } /// /// next page /// /// /// protected void btnPageNext_Click(object sender, EventArgs e) { int pageIndex = 0; int.TryParse(txbPageNumber.Value, out pageIndex); int totalRecords = 0; int.TryParse(lblCount.Text, out totalRecords); if (totalRecords > 0) { if (pageIndex > 1) { if ((pageIndex - 1) < totalRecords / _take) { txbPageNumber.Value = (pageIndex + 1).ToString(); BindMemberData(pageIndex * _take); } } else { if (pageIndex < totalRecords / _take) { txbPageNumber.Value = (pageIndex + 1).ToString(); BindMemberData(pageIndex * _take); } } } } #endregion #region properties public DataTable LoyaltyTable { get { if (utils.verifySession("loyaltyTable")) { return (DataTable)Session["loyaltyTable"]; } else { return xData.GetTypedByCriteriaSpecificTable("recId", typeof(ovLoyaltyDetail), "", ""); } } set { Session["loyaltyTable"] = value; } } #endregion }