public async Task <IActionResult> Checkout(CheckoutVm checkout) { var currentUser = await _userManager.GetUserAsync(HttpContext.User); await _cartService.Checkout(HttpContext.Session, checkout, currentUser); return(View()); }
public async Task <int> Checkout(ISession session, CheckoutVm checkout, ApplicationUser customer) { var sessionData = this.GetSessionCartData(session); var item = sessionData.Products.Select(x => new CartDetailsItemSessionVm { Id = x.Id, ProductId = x.ProductId, Price = x.Price, Quantity = x.Quantity }); var ids = sessionData.Products.Select(x => x.Id); var products = await _productRepository.GetAllQuery().Where(x => ids.Contains(x.Id)).ToListAsync(); var order = new Order(); var orderItems = new List <OrderItem>(); foreach (var sessionProduct in sessionData.Products) { var product = products.FirstOrDefault(x => x.Id == sessionProduct.Id); var orderItem = orderItems.FirstOrDefault(x => x.Product.Id == product.Id); if (orderItem == default) { orderItem = new OrderItem { Product = product, Order = order, Price = product.Price * item.FirstOrDefault(x => x.Id == product.Id).Quantity, }; orderItems.Add(orderItem); } } var delivery = new Delivery { FirstName = checkout.FirstName, LastName = checkout.LastName, City = checkout.City, Region = checkout.Region, Address = checkout.Address, Email = checkout.Email, Phone = checkout.Phone, Comment = checkout.Comment }; order.OrderItems = orderItems; order.Delivery = delivery; order.Customer = customer; order.Price = order.OrderItems.Sum(x => x.Price); var checkoutId = (await _orderRepository.AddAsync(order)).Id; order.Id = checkoutId; this.ClearSessionCartData(session); return(1); }