Esempio n. 1
0
        public async Task <IActionResult> Checkout(CheckoutVm checkout)
        {
            var currentUser = await _userManager.GetUserAsync(HttpContext.User);

            await _cartService.Checkout(HttpContext.Session, checkout, currentUser);

            return(View());
        }
Esempio n. 2
0
        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);
        }