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
}