Beispiel #1
0
        public ActionResult Checkout()
        {
            //pagina onbereikbaar als niet ingelogd of winkelkar bestaat niet/ is leeg
            if (Session["cart"] == null || Session["customer"] == null)
            {
                return(RedirectToAction("Index", "Product"));
            }
            List <CartItem> cart = Session["cart"] as List <CartItem>;

            if (cart.Count == 0)
            {
                return(RedirectToAction("Index", "Product"));
            }

            //anders nieuw order/orderdetails aanmaken (zie ook ProductService)
            else
            {
                var cartitems = Session["cart"] as List <CartItem>;

                //session leegmaken
                Session["cart"] = null;

                var customer = Session["customer"] as Customer;
                var order    = service.CreateNewOrder(customer, cartitems);
                var summary  = new OrderSummaryViewModel(customer, order);


                return(View(summary));
            }
        }
Beispiel #2
0
        public void TestCreditLimit()
        {
            using (var context = new AyerLechonContext())
            {
                var service = new PaymentService(context);

                var summary = new OrderSummaryViewModel()
                {
                    Amount          = 500,
                    DeliveryAddress = "delivery address",
                    Notes           = "notes",
                    PaymentOptionId = PaymentOptionEnum.CreditLine,
                    PhoneNumber     = "Phone Number",
                    OrderDate       = DateTime.Now.ToEpochTime(),
                    RegionId        = null,
                    CustomerId      = 1,
                    OrderDetails    = new List <OrderDetailViewModel>()
                    {
                        new OrderDetailViewModel
                        {
                            Quantity = 1,
                            ItemId   = 1,
                        }
                    }
                };
                service.Create(summary);
            }
        }
Beispiel #3
0
        public ActionResult OrderSummary()
        {
            var orderForm = _cartService.GetOrderForms();

            OrderSummaryViewModel viewModel = new OrderSummaryViewModel
            {
                SubTotal              = _cartService.GetSubTotal(),
                CartTotal             = _cartService.GetTotal(),
                ShippingTotal         = _cartService.GetShippingTotal(),
                ShippingSubtotal      = _cartService.GetShippingSubTotal(),
                OrderDiscountTotal    = _cartService.GetOrderDiscountTotal(),
                ShippingDiscountTotal = _cartService.GetShippingDiscountTotal(),
                ShippingTaxTotal      = _cartService.GetShippingTaxTotal(),
                TaxTotal              = _cartService.GetTaxTotal(),
                OrderDiscounts        = orderForm.SelectMany(x => x.Discounts.Cast <OrderFormDiscount>()).Select(x => new OrderDiscountModel
                {
                    Discount    = _cartService.ConvertToMoney(x.DiscountValue),
                    Displayname = x.DisplayMessage
                }),
                ShippingDiscounts = orderForm.SelectMany(x => x.Shipments).SelectMany(x => x.Discounts.Cast <ShipmentDiscount>()).Select(x => new OrderDiscountModel
                {
                    Discount    = _cartService.ConvertToMoney(x.DiscountValue),
                    Displayname = x.DisplayMessage
                }),
            };

            return(PartialView(viewModel));
        }
        public IActionResult Summary()
        {
            Order  order = this.ordersService.GetLastOrder(this.User.Identity.Name);
            UMUser user  = this.usersService.GetUser(this.User.Identity.Name);

            if (order.OrderStatus == OrderStatus.Unfinished)
            {
                ViewData["OrderId"] = order.Id;

                return(this.View("Pay"));
            }

            OrderSummaryViewModel model = new OrderSummaryViewModel
            {
                Address       = this.addressesService.GetAddress(order.DeliveryAddressId),
                DeliveryPrice = order.DeliveryPrice,
                DeliveryType  = order.DeliveryType,
                OrderId       = order.Id,
                PaymentType   = order.PaymentType,
                Phone         = user.PhoneNumber,
                FullName      = user.FirstName + " " + user.LastName,
                CartMovies    = this.ordersService.GetOrderMovies(order.Id).Select(x => new CartMovieViewModel
                {
                    Id        = x.MovieId,
                    Price     = x.Price,
                    Quantity  = x.Quantity,
                    Name      = this.moviesService.GetMovie(x.MovieId).Name,
                    PosterUrl = this.moviesService.GetMovie(x.MovieId).PosterUrl
                }).ToList()
            };

            return(this.View(model));
        }
        public ActionResult OrderLines(int id)
        {
            // locate the order by ID via repository
            var order = this.repository.Find(id);

            // get the corresponding orderlines
            var orderLines = this.repository.OrderLines(order.Id);

            // initialize the calculation values
            double total         = 0d;
            double taxRate       = order.TaxRate / 100;
            double taxMultiplier = 1 + taxRate;

            // run through the list and just summarize conditionally if taxable or not
            foreach (var lineItem in orderLines)
            {
                if (lineItem.IsTaxable)
                {
                    total += lineItem.Quantity * lineItem.UnitCost * taxMultiplier;
                }
                else
                {
                    total += lineItem.Quantity * lineItem.UnitCost;
                }
            }

            // make the view model and set its properties
            var viewModel = new OrderSummaryViewModel();

            viewModel.Order      = order;
            viewModel.OrderLines = orderLines.ToList();
            viewModel.Total      = total;

            return(this.View(viewModel));
        }
Beispiel #6
0
        public virtual void MapShipmentAdditionalFees(Shipment shipment, OrderSummaryViewModel viewModel, CultureInfo cultureInfo)
        {
            var shipmentAdditionalFees = GetShipmentAdditionalFees(shipment.AdditionalFees, cultureInfo).ToList();

            viewModel.ShipmentAdditionalFeeAmount      = shipment.AdditionalFeeAmount.ToString();
            viewModel.ShipmentAdditionalFeeSummaryList = GetShipmentAdditionalFeeSummary(shipmentAdditionalFees, cultureInfo);
        }
        public ActionResult OrderLines(int id)
        {
            // replace this with code from Code 24
            var viewModel = new OrderSummaryViewModel();

            return(this.View(viewModel));
            // replace this with code from Code 24
        }
Beispiel #8
0
        private void SendEmailOnOrderSaved(object sender, EventArgs e)
        {
            OrderSummaryViewModel orderSummaryVm = sender as OrderSummaryViewModel;

            if (orderSummaryVm != null)
            {
                orderSummaryVm.TrySendEmail(PassBox.SecurePassword);
            }
        }
        public OrderSummary(Order order, user user)
        {
            InitializeComponent();
            OrderSummaryViewModel osvm = new OrderSummaryViewModel();

            osvm.SetUser(user);
            osvm.SetOrder(order);
            this.DataContext = osvm;
        }
        public ActionResult CreateOrder(OrderSummaryViewModel model)
        {
            var     userId     = User.Identity.GetUserId();
            decimal totalPrice = 0;
            var     address    = model.Address;
            var     dailyDeal  = db.DailyDeals.FirstOrDefault(d => d.Start <DateTime.Now && d.End> DateTime.Now);

            var shoppingCart = db.ShoppingCarts.Include(d => d.Product).Where(d => d.ApplicationUserId == userId);


            foreach (var item in shoppingCart)
            {
                totalPrice += (dailyDeal?.ProductId == item.ProductId) ? (dailyDeal.NewPrice * item.Quantity): (item.Product.Price * item.Quantity);
            }

            if (!db.Addresses.Any(d => d.ApplicationUserId == userId))
            {
                address.ApplicationUserId = userId;
            }

            db.Addresses.Add(address);
            db.SaveChanges();

            var order = new Order()
            {
                AddressId         = address.Id,
                ApplicationUserId = userId,
                Message           = model.Message,
                TotalPrice        = totalPrice,
                OrderDate         = DateTime.Now
            };

            db.Orders.Add(order);
            db.SaveChanges();

            var orderDetails = new List <OrderDetails>();

            foreach (var cart in shoppingCart)
            {
                orderDetails.Add(new OrderDetails()
                {
                    OrderId      = order.OrderId,
                    ProductId    = cart.ProductId,
                    IsCompleted  = false,
                    Quantity     = cart.Quantity,
                    PricePerItem = (dailyDeal?.ProductId == cart.ProductId) ? dailyDeal.NewPrice : cart.Product.Price
                });
            }

            db.OrderDetails.AddRange(orderDetails);

            db.ShoppingCarts.RemoveRange(shoppingCart);
            db.SaveChanges();

            return(RedirectToAction("OrderCompleted", "Orders"));
        }
Beispiel #11
0
        public ViewResult OrderSummary(string returnUrl = "/")
        {
            var model = new OrderSummaryViewModel
            {
                Cart      = cart,
                ReturnUrl = returnUrl
            };

            return(View(model));
        }
Beispiel #12
0
        // GET: OrderSummaryCart
        public ActionResult Index()
        {
            OrderSummary thesummary = new OrderSummary();

            thesummary = OrderSummary.GetOrder(this.HttpContext);

            OrderSummaryViewModel vm = new OrderSummaryViewModel()
            {
                OrderItems = thesummary.GetOrderItems()
            };

            return(View(vm));
        }
Beispiel #13
0
        public HttpResponseMessage Post(OrderSummaryViewModel model)
        {
            ResponseViewModel <object> response;

            if (!ModelState.IsValid)
            {
                response = new ResponseViewModel <object>()
                {
                    Status = new Status()
                    {
                        Type          = "Error",
                        FieldMessages = ModelState.ToErrorResponse()
                    },
                    Data = null
                };
                return(Request.CreateResponse(HttpStatusCode.BadRequest, response));
            }


            using (var ctx = new AyerLechonContext())
            {
                try
                {
                    var service = new PaymentService(ctx);
                    service.Create(model);
                    response = new ResponseViewModel <object>()
                    {
                        Status = new Status()
                        {
                            Type    = "Success",
                            Message = "The order has been created successfully."
                        },
                        Data = null
                    };
                    return(Request.CreateResponse(HttpStatusCode.OK, response));
                }
                catch (ApplicationException ae)
                {
                    response = new ResponseViewModel <object>()
                    {
                        Status = new Status()
                        {
                            Type    = "Error",
                            Message = ae.Message
                        },
                        Data = null
                    };
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, response));
                }
            }
        }
Beispiel #14
0
        protected override void OnLoad(EventArgs e)
        {
            if (!this.DesignMode)
            {
                TranslateLabels();

                // Create a collection of pages
                this.pages = new List <OrderDetailsPage>(this.panelControl.Controls.Count);
                this.pages.Add(this.orderInformationPage);
                this.pages.Add(this.customerInformationPage);
                this.pages.Add(this.itemDetailsPage);
                this.pages.Add(this.deliveryInformationPage);
                this.pages.Add(this.paymentHistoryPage);
                this.pages.Add(this.cancellationChargePage);
                this.pages.Add(this.summaryPage);

                // Create a collection of view models
                pageViewModels               = new List <PageViewModel>();
                orderDetailsViewModel        = new OrderDetailsViewModel(this.transaction, this.mode);
                orderSummaryViewModel        = new OrderSummaryViewModel(this.transaction);
                customerInformationViewModel = new CustomerInformationViewModel(this.transaction);
                paymentHistoryViewModel      = new PaymentHistoryViewModel(this.transaction);
                itemDetailsViewModel         = new ItemDetailsViewModel(this.transaction);

                this.pageViewModels.Add(orderDetailsViewModel);
                this.pageViewModels.Add(orderSummaryViewModel);
                this.pageViewModels.Add(customerInformationViewModel);
                this.pageViewModels.Add(paymentHistoryViewModel);
                this.pageViewModels.Add(itemDetailsViewModel);

                // Listen to the property changed event on each view model
                this.pageViewModels.ForEach(vm => vm.PropertyChanged += new PropertyChangedEventHandler(OnPageViewModel_PropertyChanged));

                // Set on each page
                this.bindingSource.Add(orderDetailsViewModel);
                this.orderDetailsNavBar.SetViewModel(this.ViewModel);
                this.orderInformationPage.SetViewModel(this.ViewModel);
                this.itemDetailsPage.SetViewModel(itemDetailsViewModel);
                this.deliveryInformationPage.SetViewModel(this.ViewModel);
                this.customerInformationPage.SetViewModel(customerInformationViewModel);
                this.paymentHistoryPage.SetViewModel(paymentHistoryViewModel);
                this.cancellationChargePage.SetViewModel(this.ViewModel);
                this.summaryPage.SetViewModel(orderSummaryViewModel);

                this.ViewModel.SelectedPageIndex = GetStartPageIndex();
                this.ViewModel.SelectedPageTitle = this.pages[this.ViewModel.SelectedPageIndex].Text;
            }

            base.OnLoad(e);
        }
Beispiel #15
0
        public ActionResult GoToMyTickets()
        {
            //OrderSummary thesummary = new OrderSummary();
            //thesummary = OrderSummary.GetOrder(this.HttpContext);

            OrderSummary ordersOfUser = OrderSummary.GetOrder(this.HttpContext);


            OrderSummaryViewModel vm = new OrderSummaryViewModel()
            {
                OrderItems = ordersOfUser.GetOrderItems()
            };

            return(View(vm));
        }
Beispiel #16
0
        public IActionResult OrderSummary()
        {
            var            cart     = _session.Get <List <ShoppingCartItemViewModel> >(Constants.Cart);
            var            checkout = _session.Get <CheckoutViewModel>(Constants.Checkout);
            ShippingMethod method   = _storeRepository.GetShippingMethodById(Guid.Parse(checkout.ShippingMethodId));
            var            summary  = new OrderSummaryViewModel
            {
                ShoppingCartItems = cart,
                ShippingDetails   = checkout.City + ", " + checkout.PostalCode + ", " + checkout.Street,
                ShippingMethod    = method.Title,
                Subtotal          = cart.Sum(a => a.UnitPrice * a.Quantity),
                Total             = cart.Sum(a => a.UnitPrice * a.Quantity) + method.Price
            };

            return(View(summary));
        }
Beispiel #17
0
        public ActionResult Register(int id)
        {
            Event @event = db.Events.Find(id);

            if (@event == null)
            {
                return(HttpNotFound());
            }

            OrderSummaryViewModel vm = new OrderSummaryViewModel();

            vm.@event  = db.Events.Find(id);
            vm.EventId = id;

            return(View(vm));
        }
Beispiel #18
0
        public ActionResult AddOrder(OrderSummaryViewModel vm)
        {
            OrderCart order = OrderCart.GetCart(this.HttpContext);

            int q = vm.SelectedOrderTicketQuantity;

            if (q > 0)
            {
                //adds to cart and gets order number
                int oNumber = order.AddToCart(vm.EventId, q);
                if (oNumber > 0)
                {
                    return(RedirectToAction("OrderSummary", new { orderNumber = oNumber }));
                }
            }
            return(Redirect("Index"));
        }
Beispiel #19
0
        //GET Checkout
        //receives int id only at this point

        public ActionResult Checkout(int id)
        {
            OrderSummary order = OrderSummary.GetOrder(this.HttpContext);

            order.AddOrder(id);

            /*
             * SingleOrderViewModel vm = new SingleOrderViewModel()
             * {
             *  SingleOrder = order.GetSingleOrder()
             * };
             */
            OrderSummaryViewModel vm = new OrderSummaryViewModel()
            {
                OrderItems = order.GetOrderItems()
            };

            return(View(vm));
        }
Beispiel #20
0
        public void SendEmail(OrderSummaryViewModel orderSummaryVm, string emailBodyInHtml, SecureString pass)
        {
            MailMessage email = new MailMessage(orderSummaryVm.Sender, orderSummaryVm.Recipent);

            email.IsBodyHtml = true;
            email.Body       = emailBodyInHtml;
            email.Subject    = EMAIL_SUBJECT;

            SmtpClient smtpClient = new SmtpClient(GMAIL_SMTP_HOST, GMAIL_SMTP_PORT);

            if (orderSummaryVm.Sender != null && pass != null)
            {
                smtpClient.UseDefaultCredentials = true;
                smtpClient.Credentials           = new NetworkCredential(orderSummaryVm.Sender, pass);
            }
            smtpClient.EnableSsl = true;
            smtpClient.Timeout   = 10000;
            smtpClient.Send(email);
        }
        public ActionResult MostExpensiveOrder()
        {
            var order = db.Orders.OrderByDescending(o => o.OrderRows.Sum(r => r.Price)).FirstOrDefault();

            if (order == null)
            {
                return(PartialView("_SingleOrderSummaryPartial", new OrderSummaryViewModel()));
            }

            var model = new OrderSummaryViewModel
            {
                OrderDate  = order.OrderDate,
                TotalCost  = order.OrderRows.Sum(r => r.Price),
                MovieCount = order.OrderRows.Count(),
                Name       = $"{order.Customer.Firstname} {order.Customer.Lastname}"
            };

            return(PartialView("_SingleOrderSummaryPartial", model));
        }
Beispiel #22
0
        public IEnumerable <OrderSummaryViewModel> OrderSummary(DateTime fromDate, DateTime toDate)
        {
            var reportData = new OrderSummaryViewModel();

            var queryOrderDetail = (from order in DataContext.Orders
                                    join orderDetail in DataContext.OrderDetails on order.Id equals orderDetail.OrderId
                                    where order.Date >= fromDate && order.Date <= toDate && !order.VoidWhen.HasValue
                                    select orderDetail).ToList();

            var queryOrder = (from order in DataContext.Orders
                              where order.Date >= fromDate && order.Date <= toDate && !order.VoidWhen.HasValue
                              select order).ToList();

            var queryPaidOrder = (from order in DataContext.Orders
                                  join payment in DataContext.Payments on order.Id equals payment.OrderId
                                  where !order.VoidWhen.HasValue && !payment.VoidWhen.HasValue &&
                                  order.Date >= fromDate && order.Date <= toDate
                                  select payment).ToList();

            var queryActivePayments = DataContext.Payments.Where(p => !p.VoidWhen.HasValue).Select(p => p.Order);
            var queryUnpaidOrder    =
                (from order in DataContext.Orders.Include(o => o.Payments)
                 join orderDetail in DataContext.OrderDetails on order.Id equals orderDetail.OrderId
                 join table in DataContext.Tables on order.TableId equals table.Id
                 where (!order.Payments.Any() || !queryActivePayments.Contains(order)) && !order.VoidWhen.HasValue &&
                 order.Date >= fromDate && order.Date <= toDate
                 select orderDetail).ToList();

            Expression <Func <OrderDetail, decimal> > sumTotalOrderExpr = o =>
                                                                          (o.Qty * o.UnitPrice) - (o.DiscPercent > 0 ? o.DiscPercent / 100 * (o.Qty * o.UnitPrice) : o.DiscValue);

            reportData.GrossSales        = queryOrderDetail.Sum(sumTotalOrderExpr.Compile());
            reportData.TaxValue          = queryOrder.Sum(o => o.TaxAmount);
            reportData.ServiceCharge     = queryOrder.Sum(o => o.ServiceCharge);
            reportData.DeliveryCharges   = queryOrder.Sum(o => o.DeliveryCharge);
            reportData.DiscValue         = queryOrder.Sum(o => o.DiscValue);
            reportData.NettSales         = reportData.GrossSales + reportData.DeliveryCharges + reportData.TaxValue + reportData.ServiceCharge - reportData.DiscValue;
            reportData.TotalPaidOrders   = queryPaidOrder.Sum(p => p.BilledAmount);
            reportData.TotalUnpaidOrders = queryUnpaidOrder.Sum(sumTotalOrderExpr.Compile());

            yield return(reportData);
        }
Beispiel #23
0
        // GET: Adm/Orders
        public ActionResult Orders()
        {
            List <Category>              categories     = categoryRepository.Categories.ToList();
            IEnumerable <Customer>       customers      = customerRepository.Customers;
            List <OrderSummaryViewModel> orderSummaries = new List <OrderSummaryViewModel>();

            foreach (Customer customer in customers)
            {
                IEnumerable <OrderedItem> products = cartRepository.Items.Where(p => p.CustomerId == customer.CustomerId).ToList();

                OrderSummaryViewModel model = new OrderSummaryViewModel()
                {
                    Customer     = customer,
                    OrderedItems = products
                };
                orderSummaries.Add(model);
            }

            return(View(orderSummaries));
        }
        // GET
        public ActionResult Index()
        {
            var     userId     = User.Identity.GetUserId();
            decimal totalPrice = 0;
            var     dailyDeal  = db.DailyDeals.FirstOrDefault(d => d.Start <DateTime.Now && d.End> DateTime.Now);

            var shoppingCart = db.ShoppingCarts.Include(d => d.Product).Where(d => d.ApplicationUserId == userId);

            foreach (var item in shoppingCart)
            {
                totalPrice += (dailyDeal?.ProductId == item.ProductId) ? (dailyDeal.NewPrice * item.Quantity): (item.Product.Price * item.Quantity);
            }


            var model = new OrderSummaryViewModel()
            {
                Address    = db.Addresses.FirstOrDefault(d => d.ApplicationUserId == userId),
                OrderPrice = totalPrice
            };

            return(View(model));
        }
        //[Authorize(Roles = "Consultant, Admin")]
        public ActionResult Index(long orderNumber, string guid, bool firstTime = false)
        {
            Order order = null;

            if (User.Identity.IsAuthenticated)
            {
                if (User.IsInRole("Admin") || User.IsInRole("Consultant"))
                {
                    if (guid.IsNullOrWhiteSpace())
                    {
                        order = _soCartContext.Orders.SingleOrDefault(o => o.OrderNumber == orderNumber);
                    }
                    else
                    {
                        order = _soCartContext.Orders.SingleOrDefault(o => o.OrderNumber == orderNumber && o.Guid == guid);
                    }
                }
            }
            else
            {
                order = _soCartContext.Orders.SingleOrDefault(o => o.OrderNumber == orderNumber && o.Guid == guid);
            }


            if (order != null)
            {
                var model = new OrderSummaryViewModel()
                {
                    OrderNumber        = order.OrderNumber,
                    Email              = order.Email,
                    OrderDate          = order.OrderDate,
                    PaymentTransaction = order.PaymentTransaction,
                    ShippingCost       = order.ShippingCost,
                    FullName           = order.FullName,
                    ShippingAddress    = order.Address,
                    Phone              = order.Phone,
                    Total              = order.Total,
                    FirstTime          = firstTime
                };
                model.OrderDetails = (from lineItems in _soCartContext.LineOrderDetails
                                      where lineItems.OrderId == order.Id
                                      select lineItems).ToList();

                var paymentInfoObj =
                    _soCartContext.Contents.FirstOrDefault(c => c.TextLocation == "Summary.Order.PaymentInfo");
                var paymentInfo = "";

                if (paymentInfoObj != null)
                {
                    paymentInfo = paymentInfoObj.TextValue;
                }
                model.PaymentInfo = paymentInfo;
                ////payment transaction detail:
                //using (var context = new ShoppingCartContext())
                //{
                //    model.PaymentTransaction.PaymentType =  context.PaymentTypes.SingleOrDefault(t => t.Id == model.PaymentTransaction.PaymentTypeId);
                //}
                //todo: this shouldnt' be here, should be right after we created an order
                //await EmailSender.Send(model);

                return(View(model));
            }
            return(View("OrderNotFound"));
        }
Beispiel #26
0
 public IActionResult OrderSummary(OrderSummaryViewModel model)
 {
     return(View(null));
 }
Beispiel #27
0
 public IActionResult ChooseDeliveryMethod(OrderSummaryViewModel model)
 {
     return(View(model));
 }
        public void Create(OrderSummaryViewModel model)
        {
            var orderSummary = new OrderSummary()
            {
                AmountPaid      = Convert.ToDecimal(model.Amount),
                CustomerID      = model.CustomerId.Value,
                DeliveryAddress = model.DeliveryAddress,
                Notes           = model.Notes,
                PaymentOptionId = model.PaymentOptionId.Value,
                PhoneNumber     = model.PhoneNumber,
                RegionID        = model.RegionId,
                DateNeeded      = model.OrderDate,
                OrderDate       = DateTime.Now.ToEpochTime()
            };

            if (model.OrderDate < DateTime.Now.ToEpochTime())
            {
                throw new ApplicationException("The Date Needed cannot be less than the current date.");
            }

            if (!string.IsNullOrEmpty(model.DiscountCode))
            {
                var discount = _context.Discounts.FirstOrDefault(a => a.Code == model.DiscountCode);
                if (discount == null)
                {
                    throw new ApplicationException("Voucher code is not found.");
                }
                var isUsed = _context.OrderSummaries.Any(a => a.CustomerID == model.CustomerId && a.DiscountId == discount.DiscountID);
                if (isUsed)
                {
                    throw new ApplicationException("Voucher code has been used.");
                }
                orderSummary.DiscountId = discount.DiscountID;
            }

            foreach (var detail in model.OrderDetails)
            {
                var item        = _context.Items.FirstOrDefault(a => a.ItemID == detail.ItemId);
                var orderDetail = new OrderDetail()
                {
                    ItemID   = detail.ItemId,
                    SubTotal = detail.Quantity * item.Price,
                    Quantity = detail.Quantity,
                    Price    = (double)item.Price
                };
                orderSummary.OrderDetails.Add(orderDetail);
                orderItemService.DecreaseStock(orderDetail);
            }

            orderSummary.PaymentStatusId = PaymentStatusEnum.Unpaid;
            _context.OrderSummaries.Add(orderSummary);

            if (model.RegionId.HasValue)
            {
                UpdateRegion(model.CustomerId.Value, model.RegionId.Value);
            }

            PaymentOption(model.PaymentOptionId.Value, model.CustomerId.Value, model.Amount.Value);

            _context.SaveChanges();
        }
        internal static Mock <IViewModelMapper> Create()
        {
            CartProductSummaryViewModel dummyCartProduct = new CartProductSummaryViewModel
            {
                DisplayName = GetRandom.String(32),
            };

            TaxViewModel dummyTaxViewModel = new TaxViewModel
            {
                DisplayName = GetRandom.String(32),
                TaxTotal    = GetRandom.Decimal(1.0m, 200.0m)
            };

            LineItemDetailViewModel dummyLineItem = new LineItemDetailViewModel
            {
                ImageUrl         = GetRandom.WwwUrl(),
                ProductId        = GetRandom.String(32),
                VariantId        = GetRandom.String(32),
                Total            = GetRandom.PositiveDouble().ToString(CultureInfo.InvariantCulture),
                DefaultListPrice = GetRandom.PositiveDouble().ToString(CultureInfo.InvariantCulture),
                ListPrice        = GetRandom.PositiveDouble().ToString(CultureInfo.InvariantCulture),
                ProductSummary   = dummyCartProduct,
                FallbackImageUrl = GetRandom.WwwUrl(),
                IsOnSale         = GetRandom.Boolean(),
                Quantity         = GetRandom.PositiveInt(),
            };

            OrderSummaryViewModel dummyOrderSummaryViewModel = new OrderSummaryViewModel
            {
                Shipping      = GetRandom.String(32),
                SubTotal      = GetRandom.String(32),
                Total         = GetRandom.String(32),
                DiscountTotal = GetRandom.String(32),
                Taxes         = new List <TaxViewModel> {
                    dummyTaxViewModel
                }
            };

            CartViewModel dummyCart = new CartViewModel
            {
                HomepageUrl = GetRandom.String(32),
                LineItemDetailViewModels = new List <LineItemDetailViewModel> {
                    dummyLineItem
                },
                OrderSummary  = dummyOrderSummaryViewModel,
                IsCartEmpty   = GetRandom.Boolean(),
                TotalQuantity = GetRandom.PositiveInt(),
                LineItemCount = GetRandom.PositiveInt()
            };

            CompleteCheckoutLineItemViewModel dummyCheckoutLineItem = new CompleteCheckoutLineItemViewModel
            {
                Brand      = null,
                BrandId    = null,
                CategoryId = GetRandom.String(32),
                KeyVariantAttributesList = new List <KeyVariantAttributes>(),
                Name      = GetRandom.String(32),
                Price     = GetRandom.Decimal(),
                ProductId = GetRandom.String(5),
                Quantity  = GetRandom.Int(),
                VariantId = GetRandom.String(32)
            };

            var rewardViewModel = new RewardViewModel()
            {
                Description = GetRandom.Phrase(40)
            };

            var couponViewModel = new CouponViewModel()
            {
                CouponCode  = GetRandom.String(7),
                DisplayText = GetRandom.Phrase(35)
            };

            var viewModelMapper = new Mock <IViewModelMapper>();

            viewModelMapper.Setup(
                mapper =>
                mapper.MapTo <CompleteCheckoutLineItemViewModel>(It.IsNotNull <LineItem>(),
                                                                 It.IsNotNull <CultureInfo>()))
            .Returns(dummyCheckoutLineItem)
            .Verifiable();


            viewModelMapper.Setup(
                mapper =>
                mapper.MapTo <CartProductSummaryViewModel>(It.IsNotNull <CartProductSummary>(),
                                                           It.IsNotNull <CultureInfo>()))
            .Returns(dummyCartProduct)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <CartViewModel>(It.IsNotNull <Overture.ServiceModel.Orders.Cart>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyCart)
            .Verifiable();

            viewModelMapper.Setup(
                mapper => mapper.MapTo <LineItemDetailViewModel>(It.IsNotNull <LineItem>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyLineItem)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <TaxViewModel>(It.IsNotNull <Tax>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyTaxViewModel)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <RewardViewModel>(It.IsNotNull <Reward>(), It.IsNotNull <CultureInfo>()))
            .Returns(rewardViewModel)
            .Verifiable();

            viewModelMapper.Setup(
                mapper => mapper.MapTo <CouponViewModel>(It.IsNotNull <Coupon>(), It.IsNotNull <CultureInfo>()))
            .Returns(couponViewModel)
            .Verifiable();

            return(viewModelMapper);
        }
        internal static Mock <IViewModelMapper> CreateViewNullValues()
        {
            CartProductSummaryViewModel dummyCartProduct = new CartProductSummaryViewModel
            {
                DisplayName = null,
            };

            LineItemDetailViewModel dummyLineItem = new LineItemDetailViewModel
            {
                ImageUrl         = null,
                ProductId        = null,
                VariantId        = null,
                Total            = null,
                DefaultListPrice = null,
                ListPrice        = null,
                ProductSummary   = null,
                FallbackImageUrl = null,
                IsOnSale         = GetRandom.Boolean(),
                Quantity         = GetRandom.PositiveInt(),
            };

            TaxViewModel dummyTaxViewModel = new TaxViewModel
            {
                DisplayName = null,
                TaxTotal    = null
            };

            OrderSummaryViewModel dummyOrderSummary = new OrderSummaryViewModel
            {
                Shipping      = null,
                SubTotal      = null,
                Taxes         = null,
                Total         = null,
                DiscountTotal = null
            };

            CartViewModel dummyCart = new CartViewModel
            {
                HomepageUrl = null,
                LineItemDetailViewModels = new List <LineItemDetailViewModel> {
                    dummyLineItem
                },
                OrderSummary  = null,
                IsCartEmpty   = GetRandom.Boolean(),
                TotalQuantity = GetRandom.PositiveInt(),
                LineItemCount = GetRandom.PositiveInt()
            };

            RewardViewModel dummyReward = new RewardViewModel()
            {
                Description = null
            };

            CouponViewModel dummyCoupons = new CouponViewModel()
            {
                CouponCode  = null,
                DisplayText = null
            };

            var viewModelMapper = new Mock <IViewModelMapper>();


            viewModelMapper.Setup(
                mapper =>
                mapper.MapTo <CartProductSummaryViewModel>(It.IsNotNull <CartProductSummary>(),
                                                           It.IsNotNull <CultureInfo>()))
            .Returns(dummyCartProduct)
            .Verifiable();

            viewModelMapper.Setup(
                mapper =>
                mapper.MapTo <CartViewModel>(It.IsNotNull <Overture.ServiceModel.Orders.Cart>(),
                                             It.IsNotNull <CultureInfo>()))
            .Returns(dummyCart)
            .Verifiable();

            viewModelMapper.Setup(
                mapper => mapper.MapTo <LineItemDetailViewModel>(It.IsNotNull <LineItem>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyLineItem)
            .Verifiable();

            viewModelMapper.Setup(
                mapper =>
                mapper.MapTo <OrderSummaryViewModel>(It.IsNotNull <Overture.ServiceModel.Orders.Cart>(),
                                                     It.IsNotNull <CultureInfo>()))
            .Returns(dummyOrderSummary)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <TaxViewModel>(It.IsNotNull <Tax>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyTaxViewModel)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <RewardViewModel>(It.IsNotNull <Reward>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyReward)
            .Verifiable();

            viewModelMapper.Setup(mapper => mapper.MapTo <CouponViewModel>(It.IsNotNull <Coupon>(), It.IsNotNull <CultureInfo>()))
            .Returns(dummyCoupons)
            .Verifiable();

            return(viewModelMapper);
        }