using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using System.Net.Mail; public partial class PlaceOrder : WebBlockPage { public OrderInfo OrderInfo { get { return (OrderInfo)Session["OrderInfo"]; } } private string _ErrorText = ""; public string ErrorText { get { return _ErrorText; } } protected override void OnInit(EventArgs e) { if (ShoppingCart.GrandTotal == 0 || OrderInfo == null) Response.Redirect("Cart.aspx"); SecurePage = true; base.OnInit(e); } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { PlaceOrderFunc(); } } private void PlaceOrderFunc() { OrderInfo oi = OrderInfo; // first step is to add all of the information to the database #region Add Order Info Initially // addresses first int OrderBillingAddressID = Database.OrderAddresses_AddByAddressID(oi.BillingAddressID); int OrderShippingAddressID = Database.OrderAddresses_AddByAddressID(oi.ShippingAddressID); // now the order string CardName = (oi.CardName == null ? "" : oi.CardName); string LastFour = (oi.CardNumber == null ? "" : oi.CardNumber.Substring(oi.CardNumber.Length - 4)); string PONumber = (oi.PurchaseOrderNumber == null ? "" : oi.PurchaseOrderNumber); int OrderID = Database.Orders_Add(CustomerInfo.CustomerID, OrderBillingAddressID, OrderShippingAddressID, ShoppingCart.ShippingCost, ShoppingCart.ShippingName, ShoppingCart.SalesTax, ShoppingCart.GrandTotal, Request.UserHostAddress, oi.PaymentMethod, CardName, LastFour, PONumber, oi.Comments, ""); // now the discounts if (ShoppingCart.DiscountList != null) { foreach (SingleDiscount sd in ShoppingCart.DiscountList) { Database.OrderDiscounts_Add(OrderID, sd.DiscountTitle, sd.DiscountAmount); } } // now the items foreach (ShoppingCartItem sci in ShoppingCart) Database.OrderItems_Add(OrderID, sci.ItemID, sci.Quantity, sci.CustomizedPrice, sci.CustomizationText); oi.OrderID = OrderID; oi.OrderBillingAddressID = OrderBillingAddressID; oi.OrderShippingAddressID = OrderShippingAddressID; #endregion Gateways.GatewayBase gateway = Gateways.GatewayBase.GetGateway(Configuration.Get("Gateways.PaymentGateway")); if (gateway.AuthorizeFunds(OrderID, oi.CardNumber, oi.ExpMonth + "/" + oi.ExpYear, oi.SecurityCode)) { // successfully authorized if (Configuration.Get("AuthorizeAndCapture").ToLower().Equals("on")) { if (!gateway.CaptureFunds(OrderID)) throwSuccess(OrderID, ShoppingCart.SubTotal); else throwError(OrderID); } throwSuccess(OrderID, ShoppingCart.SubTotal); } else { throwError(OrderID); } } private void throwSuccess(int OrderID, decimal SubTotal) { // update order status to "Received" Database.Orders_UpdateForProcessing(OrderID, null, null, 1, null, null); // send order confirmation email TemplatedEmail email = new TemplatedEmail(this, "~/EmailTemplates/OrderConfirmation.html"); email.From = new MailAddress(Configuration.Get("Emails.ReplyEmail"), Configuration.Get("Emails.FromName")); email.To.Add(new MailAddress(CustomerInfo.EmailAddress)); DataRow dr = Database.OrderAddresses_GetByOrderAddressID(OrderInfo.OrderBillingAddressID); if (dr != null) { email.TemplateVariables.Add("[[OrderID]]", OrderID.ToString()); email.TemplateVariables.Add("[[BillingFirstName]]", (string)dr["FirstName"]); email.TemplateVariables.Add("[[BillingLastName]]", (string)dr["LastName"]); email.TemplateVariables.Add("[[BillingAddress]]", (string)dr["Address"]); email.TemplateVariables.Add("[[BillingCity]]", (string)dr["City"]); email.TemplateVariables.Add("[[BillingState]]", (string)dr["State"]); email.TemplateVariables.Add("[[BillingZipCode]]", (string)dr["ZipCode"]); email.TemplateVariables.Add("[[BillingCountry]]", (string)dr["Country"]); email.TemplateVariables.Add("[[BillingPhone]]", (string)dr["Phone"]); } dr = Database.OrderAddresses_GetByOrderAddressID(OrderInfo.OrderShippingAddressID); if (dr != null) { email.TemplateVariables.Add("[[ShippingFirstName]]", (string)dr["FirstName"]); email.TemplateVariables.Add("[[ShippingLastName]]", (string)dr["LastName"]); email.TemplateVariables.Add("[[ShippingAddress]]", (string)dr["Address"]); email.TemplateVariables.Add("[[ShippingCity]]", (string)dr["City"]); email.TemplateVariables.Add("[[ShippingState]]", (string)dr["State"]); email.TemplateVariables.Add("[[ShippingZipCode]]", (string)dr["ZipCode"]); email.TemplateVariables.Add("[[ShippingCountry]]", (string)dr["Country"]); } #region construct the item list StringBuilder sb = new StringBuilder(); sb.Append("\r\n"); foreach (ShoppingCartItem sci in ShoppingCart) { sb.Append(""); } sb.Append(""); sb.Append(""); sb.Append(""); if (ShoppingCart.DiscountList != null) { foreach (SingleDiscount sd in ShoppingCart.DiscountList) { sb.Append(""); } } sb.Append(""); sb.Append("
"); sb.Append(sci.Quantity); sb.Append(" "); sb.Append(sci.Name); if (sci.SKU.Length > 0) { sb.Append("("); sb.Append(sci.SKU); sb.Append(")"); } sb.Append("
"); sb.Append(sci.CustomizationText); sb.Append("
@$"); sb.Append(sci.Price.ToString()); sb.Append(" = "); sb.Append(String.Format("{0:C}", sci.ItemTotal)); sb.Append("
Sub Total:"); sb.Append(String.Format("{0:C}", ShoppingCart.SubTotal)); sb.Append("
Sales Tax:"); sb.Append(String.Format("{0:C}", ShoppingCart.SalesTax)); sb.Append("
Shipping ("); sb.Append(ShoppingCart.ShippingName); sb.Append("):"); sb.Append(String.Format("{0:C}", ShoppingCart.ShippingCost)); sb.Append("
Discount ("); sb.Append(sd.DiscountTitle); sb.Append("):"); sb.Append(String.Format("{0:C}", sd.DiscountAmount)); sb.Append("
Grand Total:"); sb.Append(String.Format("{0:C}", ShoppingCart.GrandTotal)); sb.Append("
"); #endregion email.TemplateVariables.Add("[[ShoppingCart]]", sb.ToString()); email.TemplateVariables.Add("[[Comments]]", OrderInfo.Comments); email.Send(); email.To.Clear(); email.To.Add(new MailAddress(Configuration.Get("Emails.OrderAdmin"))); email.Send(); StringBuilder str = new StringBuilder(); // decrement inventories if inventory control is on for each product foreach (ShoppingCartItem sci in ShoppingCart) { Database.Items_DecrementInventory(sci.ItemID, sci.Quantity); // check to see if we have to send out a low inventory reminder DataRow drItem = Database.Items_Get(sci.ItemID); if (drItem != null && drItem["LowInventory"] != DBNull.Value && (int)drItem["LowInventory"] != -1 && (int)drItem["Inventory"] != -1) { if ((int)drItem["Inventory"] < (int)drItem["LowInventory"]) { str.Append("" + sci.Name + " Inventory Remaining (" + drItem["Inventory"].ToString() + ")"); } } } if (str.Length != 0) { TemplatedEmail lowInventoryEmail = new TemplatedEmail(this, "~/EmailTemplates/LowInventory.html"); lowInventoryEmail.TemplateVariables.Add("[[LowInventory]]", str.ToString()); lowInventoryEmail.From = new MailAddress(Configuration.Get("Emails.ReplyEmail"), Configuration.Get("Emails.FromName")); lowInventoryEmail.To.Add(new MailAddress(Configuration.Get("Emails.OrderAdmin"))); lowInventoryEmail.Send(); } Session["SuccessfulOrderCart"] = Session["ShoppingCart"]; Session.Remove("OrderInfo"); Session.Remove("ShoppingCart"); if (CustomerInfo.OneTimeCustomer) Session.Remove("CustomerInfo"); Session["SuccessfulOrderID"] = OrderID; Session["SuccessfulOrderAmount"] = SubTotal; Response.Redirect("ThankYou.aspx", true); } private void throwError(int OrderID) { // update order status to "Billing Error" Database.Orders_UpdateForProcessing(OrderID, null, null, 8, null, null); DataRow dr = Database.Orders_GetByOrderID(OrderID); if (dr["LastResponseText"] != DBNull.Value) _ErrorText = "Your transaction was not approved for the following reason:
" + (string)dr["LastResponseText"] + ""; else _ErrorText = "Your transaction was not approved."; } }