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("
| ");
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(" |