예제 #1
0
        public async Task <int> SaveOrderAsync(int customerId, string cartId, int shippingId, int taxId)
        {
            customerId.ThrowArgumentExceptionIfLessThanOne(nameof(customerId));
            cartId.ThrowArgumentNullIfNullOrEmpty(nameof(cartId));
            shippingId.ThrowArgumentExceptionIfLessThanOne(nameof(shippingId));
            taxId.ThrowArgumentExceptionIfLessThanOne(nameof(taxId));

            var order = new Orders
            {
                TotalAmount = await _shoppingCartService.GetCartTotalAmountAsync(cartId),
                Status      = 0,
                ShippingId  = shippingId,
                TaxId       = taxId,
                CustomerId  = customerId,
                CreatedOn   = DateTime.Now
            };

            await _orderRepository.Insert(order);

            // Line items
            var cartItems = await _shoppingCartService.GetShoppingCartByIdAsync(cartId);

            var orderDetails = new List <OrderDetail>();

            foreach (var cartItem in cartItems)
            {
                var orderDetail = new OrderDetail
                {
                    OrderId     = order.OrderId,
                    ItemId      = cartItem.ItemId,
                    ProductId   = cartItem.ProductId,
                    Attributes  = cartItem.Attributes,
                    Quantity    = cartItem.Quantity,
                    ProductName = cartItem.Name,
                    UnitCost    = decimal.Parse(cartItem.Price)
                };
                orderDetails.Add(orderDetail);
            }
            await _orderRepository.AddDetails(orderDetails);

            //Clear the cart
            await _shoppingCartService.EmptyCartAsync(cartId);

            return(order.OrderId);
        }