public int CreateOrder(Order order) { decimal orderTotal = 0; var cartItems = GetCartItems(); //Iterate the items in the cart foreach (var cartItem in cartItems) { OrderItem orderItem = new OrderItem() { ProductId = cartItem.ProductId, OrderId = order.Id, Quantities=cartItem.Count }; Product product = dbContext.Products.FirstOrDefault(p => p.Id == cartItem.ProductId); product.Stock -= cartItem.Count; dbContext.OrderItems.Add(orderItem); orderTotal += (cartItem.Count * cartItem.Product.ProductUnitPrice); } dbContext.SaveChanges(); //Empty the shopping cart EmptyCart(); return order.Id; }
private void SendConfirmationEmail(Order order) { var callbackUrl = Url.Action("OrderHistory", "Manage", new{area=""}, protocol: Request.Url.Scheme); string body = "Thank you for your order! you can view order details by click <a href=\"" + callbackUrl + "\">here</a>"; string subject = "Order Confirmation: " + order.OrderNumber; string recipient = User.Identity.Name; string mailFrom = "*****@*****.**"; string mailPass = "******"; var mailService = new OutlookMail(mailFrom, mailPass); mailService.SendMail(recipient, subject, body); }
public ActionResult PlaceOrder() { CheckoutModel checkoutModel = GetCheckoutModel(); ShoppingCart cart = ShoppingCart.GetCart(this.HttpContext); Order order = new Order(); if (checkoutModel.Step1 == null) { return RedirectToAction("CheckoutStep1"); } if (checkoutModel.Step2 == null) { return RedirectToAction("CheckoutStep2"); } if (checkoutModel.Step3 == null) { return RedirectToAction("CheckoutStep3"); } order.UserName = User.Identity.Name; order.OrderDate = DateTime.Now.Date; order.OrderNumber = CreateOrderNumber(); order.OrderStatus = "Received"; order.CustomerBillingAddress = dbContext.CustomerAddresses.FirstOrDefault(a => a.Id == checkoutModel.Step1.BillingAddressId); order.CustomerShippingAddress = dbContext.CustomerAddresses.FirstOrDefault(a => a.Id == checkoutModel.Step2.ShippingAddressId); dbContext.Orders.Add(order); foreach (var cartItem in cart.GetCartItems()) { if (!CheckStock(cartItem.ProductId, cartItem.Count)) { TempData["message"] = "Requested quantity not available for Item: " + cartItem.Product.ProductName; return RedirectToAction("Index"); } } try { dbContext.SaveChanges(); } catch { return View("error", new string[] { "Database Error!" }); } Order orderCreated = dbContext.Orders.FirstOrDefault(o => o.OrderNumber == order.OrderNumber); PaymentInfo paymentInfo = new PaymentInfo() { Order=orderCreated, Name=checkoutModel.Step3.Name, CreditCardNumber=checkoutModel.Step3.CreditCardNumber, ExpiredDate=checkoutModel.Step3.ExpiredDate, SecurityCode=checkoutModel.Step3.SecurityCode }; dbContext.PaymentInfoes.Add(paymentInfo); var cartItems = cart.GetCartItems(); foreach (var cartItem in cartItems) { OrderItem orderItem = new OrderItem() { ProductId = cartItem.ProductId, OrderId = orderCreated.Id, Quantities = cartItem.Count }; Product product = dbContext.Products.FirstOrDefault(p => p.Id == cartItem.ProductId); product.Stock -= cartItem.Count; dbContext.Entry(product).State = EntityState.Modified; dbContext.OrderItems.Add(orderItem); } try { dbContext.SaveChanges(); } catch { dbContext.DeleteOrder(orderCreated.Id); return View("error", new string[] { "Database Error!" }); } cart.EmptyCart(); Session.Remove("Checkout"); try { SendConfirmationEmail(orderCreated); } catch { return View("error", new string[] { "Sorry, we have problem to send confirmation email to you, please log into My Account to Track your order." }); } return RedirectToAction("OrderConfirmation", new { id = orderCreated.Id }); }