using framework_business;
using framework_library;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
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_module_cart : System.Web.UI.UserControl
{
#region methods
///
/// Refresh Order
///
///
private void RefreshOrder(int orderId)
{
try
{
//get order
foreach (oOrder currentorder in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrder), "recId", orderId.ToString()))
{
if (!currentorder.orderSent)
{
decimal orderTotal = 0;
//fetch all orderITems and calculate order Totla
foreach (oOrderItems prodItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrderItems), "orderId", orderId.ToString()))
{
//increment total
orderTotal += (prodItem.unitPrice * prodItem.qty);
}
currentorder.orderTotal = orderTotal;
xData.UpdateTyped("recId", currentorder.recId.ToString(), typeof(oOrder), currentorder);
//set order Total
lblTotal.Text = utils.returnFormattedDecimal(Convert.ToString(orderTotal));
Session["order"] = currentorder;
//bind products
BindProducts();
}
else
{
rptOrder.DataSource = null;
rptOrder.DataBind();
lblTotal.Text = "0.00";
}
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Bind the products
///
private void BindProducts()
{
try
{
if (utils.verifySession("order"))
{
oOrder myOrder = (oOrder)Session["order"];
rptOrder.DataSource = xData.FetchProductOrderItems(myOrder.recId);
rptOrder.DataBind();
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Populate user values
///
///
private void PopulateUserValues(ref oUser _user)
{
try
{
txbCartEmail.Text = _user.email;
txbCartLastName.Text = _user.surname;
txbCartName.Text = _user.name;
txbCartTelephone.Text = _user.tel;
if (_user.cookieId != String.Empty)
chkCartRememberMe.Checked = true;
if (_user.isTermsAccepted)
{
chkTerms.Checked = true;
btnSubmit.Enabled = true;
btnSubmit.CssClass = "btn btn-success";
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Populate user values
///
///
private void SaveUserValues(ref oUser _user)
{
try
{
_user.email = txbCartEmail.Text;
_user.surname = txbCartLastName.Text;
_user.name = txbCartName.Text;
_user.tel = txbCartTelephone.Text;
if (chkCartRememberMe.Checked)
_user.cookieId = Request.AnonymousID;
_user.isTermsAccepted = chkTerms.Checked;
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
#endregion
#region events
///
/// Page Load Event
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
oUser user = new oUser();
try
{
if (!utils.verifySession("user"))
{
if (Request.AnonymousID != null)
{
oSetup _setup = handler.ReturnSetup();
//request cookie from the browser
string cookie = Request.AnonymousID;
//verify we have a user with this cookie
foreach (oUser usr in xData.GetTypedByCriteriaSpecific("recId", typeof(oUser), "cookieId,customerCode", cookie + "," + _setup.code, "", "pal_",true))
{
user = usr;
break;
}
if (user.recId == 0)
{
//first time create the user
user.cookieId = cookie;
user.dateCreated = DateTime.Now;
user.customerCode = _setup.code;
user.recId = xData.SaveTyped("recId", typeof(oUser), user, "pal_", true);
}
Session["user"] = user;
}
}
if (!Page.IsPostBack)
{
if (Request.UrlReferrer != null)
{
if (Request.UrlReferrer.AbsoluteUri != Request.Url.AbsoluteUri)
Session["page"] = Request.UrlReferrer;
}
//lblProfileBanner.Text = generic.ReturnBanners(0);
if (Request.UrlReferrer != null)
{
if (Request.UrlReferrer.AbsoluteUri != Request.Url.AbsoluteUri)
Session["page"] = Request.UrlReferrer;
}
if (utils.verifySession("user"))
{
user = (oUser)Session["user"];
if (user.recId > 0)
{
oOrder currentorder = new oOrder();
//get order for user if there is one
foreach (oOrder order in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrder), "userId,orderSent", user.recId + ",0"))
{ currentorder = order; break; }
//create new order if not yet created
if (currentorder.recId == 0)
{
currentorder.userId = user.recId;
currentorder.recId = xData.SaveTyped("recId", typeof(oOrder), currentorder);
}
//verify we have an order
if (currentorder.recId > 0)
{
//refresh Order
RefreshOrder(currentorder.recId);
}
//populate user fields
PopulateUserValues(ref user);
}
}
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Update
///
///
///
protected void btnUpdate_Click(object sender, EventArgs e)
{
int qty = 1;
TextBox txbQty = new TextBox();
oOrderItems Order_Item = new oOrderItems();
try
{
int OrderItemId = int.Parse(((Button)sender).CommandArgument);
if (OrderItemId > 0)
{
//enumerate items to find quantity value
foreach (RepeaterItem item in rptOrder.Items)
{
//fetch image button
Button btnUpdate = (Button)item.FindControl("btnUpdate");
if (OrderItemId == int.Parse(btnUpdate.CommandArgument))
{
//retrieve textbox
txbQty = (TextBox)item.FindControl("txbQty");
int.TryParse(txbQty.Text, out qty);
break;
}
}
foreach (oOrderItems orderItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrderItems), "recId", OrderItemId.ToString()))
{
Order_Item = orderItem;
break;
}
//set new quantity
Order_Item.qty = qty;
if (xData.UpdateTyped("recId", Order_Item.recId.ToString(), typeof(oOrderItems), Order_Item))
{
RefreshOrder(Order_Item.orderId);
upCart.Update();
}
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Remove Item
///
///
///
protected void lnkRemove_Click(object sender, EventArgs e)
{
oOrderItems Order_Item = new oOrderItems();
try
{
int OrderItemId = int.Parse(((LinkButton)sender).CommandArgument);
if (OrderItemId > 0)
{
foreach (oOrderItems orderItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrderItems), "recId", OrderItemId.ToString()))
{
Order_Item = orderItem;
break;
}
//remove item
if (xData.DeleteTyped("recId", Order_Item.recId.ToString(), typeof(oOrderItems)))
{
RefreshOrder(Order_Item.orderId);
upCart.Update();
Response.Redirect("/my-cart", false);
}
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Continue Shopping
///
///
///
protected void btnContinue_Click(object sender, EventArgs e)
{
try
{
if (utils.verifySession("page"))
{
Response.Redirect(Session["page"].ToString(), false);
}
else
{
Response.Redirect("/home", false);
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Item Data Bound event
///
///
///
protected void rptOrder_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page);
Repeater rpt = (Repeater)sender;
RepeaterItem item = e.Item;
Button lnkUpdate = e.Item.FindControl("lnkUpdate") as Button;
LinkButton lnkRemove = e.Item.FindControl("lnkRemove") as LinkButton;
if (lnkUpdate != null)
{
lnkUpdate.Click += btnUpdate_Click;
scriptMan.RegisterAsyncPostBackControl(lnkUpdate);
}
if (lnkRemove != null)
{
lnkRemove.Click += lnkRemove_Click;
scriptMan.RegisterPostBackControl(lnkRemove);
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Submit Quote Request
///
///
///
protected void btnSubmit_Click(object sender, EventArgs e)
{
oUser user = new oUser();
StringBuilder orderITemsBuilder = new StringBuilder();
bool internalSent = false;
bool outboundSent = false;
try
{
if (utils.verifySession("user"))
{
user = (oUser)Session["user"];
SaveUserValues(ref user);
if (xData.UpdateTyped("recId", user.recId.ToString(), typeof(oUser), user, "pal_", true))
{
string code = handler.ReturnSetup().code;
oOrder myOrder = new oOrder();
//get order for user if there is one
foreach (oOrder order in xData.GetTypedByCriteriaSpecific("recId", typeof(oOrder), "userId,orderSent", user.recId + ",0"))
{ myOrder = order; break; }
ArrayList userOrders = xData.GetTypedByCriteriaSpecific("recId", typeof(oOrder), "userId", user.recId.ToString());
myOrder.orderRef = code + ":" + DateTime.Now.ToString("yyyy-MM-dd") + "." + user.recId.ToString() + "." + (userOrders.Count + 1).ToString();
ArrayList ProductOrderLines = xData.FetchProductOrderItems(myOrder.recId);
if (ProductOrderLines.Count > 0)
{
//buld up orderItems
orderITemsBuilder.Append("
");
orderITemsBuilder.Append("");
orderITemsBuilder.Append(" | ");
orderITemsBuilder.Append("Name | ");
orderITemsBuilder.Append("Price | ");
orderITemsBuilder.Append("Qty | ");
orderITemsBuilder.Append("Total | ");
orderITemsBuilder.Append("
");
foreach (oProductOrder oItem in ProductOrderLines)
{
orderITemsBuilder.Append("");
orderITemsBuilder.Append(" | ");
orderITemsBuilder.Append("" + oItem.name + " | ");
orderITemsBuilder.Append("" + oItem.priceDisplay + " | ");
orderITemsBuilder.Append("" + oItem.qty + " | ");
orderITemsBuilder.Append("" + oItem.totalDisplay + " | ");
orderITemsBuilder.Append("
");
}
orderITemsBuilder.Append("
");
oEmail email = new oEmail();
string internalbody = String.Empty;
string Subjectinternal = String.Empty;
foreach (oTemplate qTemplate in xData.GetTypedByCriteriaSpecific("recId", typeof(oTemplate), "templateTypeId", pNums.TemplateType.InternalResponse.GetHashCode().ToString()))
{
if (qTemplate.templateName.ToLower().Contains("quote"))
{
internalbody = qTemplate.templateContent;
Subjectinternal = qTemplate.templateName;
break;
}
}
//merge user values
utils.MergeHTMData(ref internalbody, utils.BuildFieldCodeList(user));
utils.MergeHTMData(ref internalbody, utils.BuildFieldCodeList(myOrder));
internalbody = internalbody.Replace("{orderItems}", orderITemsBuilder.ToString());
internalbody = internalbody.Replace("src=\"/images", "src=\"" + ConfigurationManager.AppSettings["WebAddy"] + "/images");
internalbody = internalbody.Replace("src=\"/upload", "src=\"" + ConfigurationManager.AppSettings["WebAddy"] + "/upload");
internalbody = internalbody.Replace("{WebAddress}", ConfigurationManager.AppSettings["WebAddy"]);
email = new oEmail();
email.fromAddress = ConfigurationManager.AppSettings["from"];
email.bccAddress = ConfigurationManager.AppSettings["bcc"];
//email.ccAddress = ConfigurationManager.AppSettings["cc"];
email.toAddress = ConfigurationManager.AppSettings["admin"];
email.Subject = code + "- Quote Request [" + myOrder.orderRef + "]";
email.Body = internalbody;
//send internal notification
internalSent = communication.SendAnEmail(email);
if (internalSent)
{
email = new oEmail();
string outboundbody = String.Empty;
string Subject = String.Empty;
foreach (oTemplate qTemplate in xData.GetTypedByCriteriaSpecific("recId", typeof(oTemplate), "templateTypeId", pNums.TemplateType.OutboundResponse.GetHashCode().ToString()))
{
if (qTemplate.templateName.ToLower().Contains("quote"))
{
outboundbody = qTemplate.templateContent;
Subject = qTemplate.templateName;
break;
}
}
// =========================send quote request to recipient
utils.MergeHTMData(ref outboundbody, utils.BuildFieldCodeList(user));
utils.MergeHTMData(ref outboundbody, utils.BuildFieldCodeList(myOrder));
outboundbody = outboundbody.Replace("{orderItems}", orderITemsBuilder.ToString());
outboundbody = outboundbody.Replace("src=\"/images", "src=\"" + ConfigurationManager.AppSettings["WebAddy"] + "/images");
internalbody = internalbody.Replace("src=\"/upload", "src=\"" + ConfigurationManager.AppSettings["WebAddy"] + "/upload");
outboundbody = outboundbody.Replace("{WebAddress}", ConfigurationManager.AppSettings["WebAddy"]);
email.fromAddress = ConfigurationManager.AppSettings["from"];
email.bccAddress = ConfigurationManager.AppSettings["bcc"];
//email.ccAddress = ConfigurationManager.AppSettings["cc"];
email.toAddress = user.email;
email.Subject = code + "- Quote Request [" + myOrder.orderRef + "]";
email.Body = outboundbody;
//send email notification to customer
outboundSent = communication.SendAnEmail(email);
//===========================================================
//send confirmation of order to customer
myOrder.orderSent = true;
myOrder.dateSent = DateTime.Now;
if (xData.UpdateTyped("recId", myOrder.recId.ToString(), typeof(oOrder), myOrder))
{
RefreshOrder(myOrder.recId);
upCart.Update();
pnlResultOrder.Visible = true;
upCart.Update();
}
}
else
{
lblCartResult.Visible = true;
lblCartResult.Text = "Quote Request failed to email.";
}
}
else
{
lblCartResult.Visible = true;
lblCartResult.Text = "You need items in your cart to request a quote.";
}
}
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
///
/// Checked Terms Event
///
///
///
protected void chkTerms_CheckedChanged(object sender, EventArgs e)
{
try
{
if (chkTerms.Checked)
{
btnSubmit.Enabled = true;
btnSubmit.CssClass = "btn btn-success";
}
else
{
btnSubmit.Enabled = false;
btnSubmit.CssClass = "btn";
}
}
catch (Exception ex)
{
exception.HandleException("cart:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]);
Response.Redirect("/error", false);
}
}
#endregion
}