コード例 #1
0
        /// <summary>
        /// Important method to handle checkout process. It saves form data to the three different data tables.
        /// </summary>
        /// <param name="checkoutViewModel"></param>
        public void ProcessCheckout(CheckoutViewModel checkoutViewModel)
        {
            var customer = new Customer
            {
                FirstName = checkoutViewModel.FirstName,
                LastName  = checkoutViewModel.LastName,
                Email     = checkoutViewModel.EmailAddress,
                IsDeleted = false
            };

            _customerRepository.SaveCustomer(customer);

            var shipment = new Shipment
            {
                Name         = checkoutViewModel.FirstName + " " + checkoutViewModel.LastName,
                AddressLine1 = checkoutViewModel.AddressLine1,
                AddressLine2 = checkoutViewModel.AddressLine2,
                City         = checkoutViewModel.City,
                Province     = checkoutViewModel.Province,
                Country      = checkoutViewModel.Country,
                PostalCode   = checkoutViewModel.PostalCode,
                IsDeleted    = false
            };

            _shipmentRepository.SaveShipment(shipment);

            var cart = _cartService.GetCart();

            if (cart != null)
            {
                IEnumerable <CartDetail> cartItems = _cartItemRepository.FindCartItemsByCartId(cart.Id).ToList();
                var     cartTotal      = _cartService.GetCartTotal();
                decimal shippingCharge = 0;
                var     orderTotal     = cartTotal * 1.13m + shippingCharge;

                var order = new Order
                {
                    CreateDate     = DateTime.Now,
                    ModifiedDate   = DateTime.Now,
                    OrderTotal     = orderTotal,
                    OrderItemTotal = cartTotal,
                    ShippingCost   = shippingCharge,
                    ShipmentId     = shipment.Id,
                    ShipmentInfo   = shipment,
                    CustomerId     = customer.Id,
                    Customer       = customer,
                    OrderStatus    = OrderStatus.Submitted
                };

                _orderRepository.SaveOrder(order);

                foreach (var cartItem in cartItems)
                {
                    var orderItem = new OrderDetails
                    {
                        Order        = order,
                        OrderId      = order.Id,
                        Product      = cartItem.Product,
                        ProductId    = cartItem.ProductId,
                        Quantity     = cartItem.Quantity,
                        CreateDate   = DateTime.Now,
                        ModifiedDate = DateTime.Now
                    };

                    _orderItemRepository.SaveOrderItem(orderItem);
                }

                _cartRepository.DeleteCart(cart);
            }
        }