// // GET: /Checkout/AddressAndPayment public ActionResult AddressAndPayment() { ViewBag.CreditCardTypes = CreditCardTypes; var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); var user = userManager.FindById(User.Identity.GetUserId()); var previousOrder = storeDB.Orders.FirstOrDefault(x => x.Username == User.Identity.Name); CheckoutViewModel checkoutViewModel = new CheckoutViewModel { User = user, Order = previousOrder }; if (previousOrder != null || user != null) return View(checkoutViewModel); else return View(); }
public async Task<ActionResult> AddressAndPayment(FormCollection values) { ViewBag.CreditCardTypes = CreditCardTypes; string result = values[9]; string deliveryType = values[10]; var checkoutViewModel = new CheckoutViewModel(); TryUpdateModel(checkoutViewModel); checkoutViewModel.Order.CreditCard = result; checkoutViewModel.Order.DeliveryOption = Convert.ToInt32(deliveryType) == 0 ? Common.DeliveryOption.Pickup : Common.DeliveryOption.Delivery; try { checkoutViewModel.Order.Username = User.Identity.Name; checkoutViewModel.Order.Email = User.Identity.Name; checkoutViewModel.Order.OrderDate = DateTime.Now; /* * Alot of repition but just added this to make saving to db work coz without it its throwing exception * errors for required fields */ checkoutViewModel.Order.Address = checkoutViewModel.Order.Address; checkoutViewModel.Order.City = checkoutViewModel.Order.City; checkoutViewModel.Order.Country = checkoutViewModel.Order.Country; checkoutViewModel.Order.State = checkoutViewModel.Order.State; checkoutViewModel.Order.Phone = checkoutViewModel.Order.Phone; checkoutViewModel.Order.PostalCode = checkoutViewModel.Order.PostalCode; checkoutViewModel.Order.FirstName = checkoutViewModel.Order.FirstName; checkoutViewModel.Order.LastName = checkoutViewModel.Order.LastName; checkoutViewModel.Order.Total = (decimal) HttpContext.Session["CartTotal"]; //var currentUserId = User.Identity.GetUserId(); //if (checkoutViewModel.Order.SaveInfo && !checkoutViewModel.Order.Username.Equals("*****@*****.**")) //{ // var manager = // new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); // var store = new UserStore<ApplicationUser>(new ApplicationDbContext()); // var ctx = store.Context; // var currentUser = manager.FindById(User.Identity.GetUserId()); // currentUser.Address = checkoutViewModel.Order.Address; // currentUser.City = checkoutViewModel.Order.City; // currentUser.Country = checkoutViewModel.Order.Country; // currentUser.State = checkoutViewModel.Order.State; // currentUser.Phone = checkoutViewModel.Order.Phone; // currentUser.PostalCode = checkoutViewModel.Order.PostalCode; // currentUser.FirstName = checkoutViewModel.Order.FirstName; // currentUser.LastName = checkoutViewModel.Order.LastName; // //Save this back // //http://stackoverflow.com/questions/20444022/updating-user-data-asp-net-identity // //var result = await UserManager.UpdateAsync(currentUser); // await ctx.SaveChangesAsync(); // await storeDB.SaveChangesAsync(); //} //Save Order storeDB.Orders.Add(checkoutViewModel.Order); await storeDB.SaveChangesAsync(); //Process the order var cart = ShoppingCart.GetCart(this.HttpContext); checkoutViewModel.Order = cart.CreateOrder(checkoutViewModel.Order); CheckoutController.SendOrderMessage(checkoutViewModel.Order.FirstName, "New Order: " + checkoutViewModel.Order.OrderId, checkoutViewModel.Order.ToString(checkoutViewModel.Order), appConfig.OrderEmail); return RedirectToAction("Complete", new {id = checkoutViewModel.Order.OrderId}); } catch (Exception ex) { if (ex is System.Data.Entity.Validation.DbEntityValidationException) { // Retrieve the error messages as a list of strings. var errorMessages = (ex as System.Data.Entity.Validation.DbEntityValidationException) .EntityValidationErrors .SelectMany(x => x.ValidationErrors) .Select(x => x.ErrorMessage); // Join the list to a single string. var fullErrorMessage = string.Join("; ", errorMessages); // Combine the original exception message with the new one. var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); } //Invalid - redisplay with errors return View(checkoutViewModel); } }