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(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); foreach (oProductOrder oItem in ProductOrderLines) { orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); orderITemsBuilder.Append(""); } orderITemsBuilder.Append("
NamePriceQtyTotal
" + oItem.name + "" + oItem.priceDisplay + "" + oItem.qty + "" + oItem.totalDisplay + "
"); 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 }