public ActionResult UpdateBasket(BasketUpdateBasket model)
        {
            foreach (var updateOrderline in model.RefreshBasket)
            {
                var newQuantity = updateOrderline.OrderLineQty;
                if (newQuantity <= 0)
                {
                    newQuantity = 0;
                }

                _transactionLibrary.UpdateLineItemByOrderLineId(updateOrderline.OrderLineId, newQuantity);
            }

            _transactionLibrary.ExecuteBasketPipeline();

            var basket = _transactionLibrary.GetBasket();

            BasketUpdateBasketViewModel updatedBasket = new BasketUpdateBasketViewModel();

            foreach (var orderLine in basket.OrderLines)
            {
                var orderLineViewModel = new BasketUpdateOrderline();
                orderLineViewModel.OrderlineId       = orderLine.OrderLineId;
                orderLineViewModel.Quantity          = orderLine.Quantity;
                orderLineViewModel.Total             = new Money(orderLine.Total.GetValueOrDefault(), basket.BillingCurrency.ISOCode).ToString();
                orderLineViewModel.Discount          = orderLine.Discount;
                orderLineViewModel.Tax               = new Money(orderLine.VAT, basket.BillingCurrency.ISOCode).ToString();
                orderLineViewModel.Price             = new Money(orderLine.Price, basket.BillingCurrency.ISOCode).ToString();
                orderLineViewModel.PriceWithDiscount = new Money(orderLine.Price - orderLine.Discount, basket.BillingCurrency.ISOCode).ToString();

                updatedBasket.Orderlines.Add(orderLineViewModel);
            }

            string orderTotal    = new Money(basket.OrderTotal.GetValueOrDefault(), basket.BillingCurrency.ISOCode).ToString();
            string discountTotal = new Money(basket.DiscountTotal.GetValueOrDefault(), basket.BillingCurrency.ISOCode).ToString();
            string taxTotal      = new Money(basket.TaxTotal.GetValueOrDefault(), basket.BillingCurrency.ISOCode).ToString();
            string subTotal      = new Money(basket.SubTotal.GetValueOrDefault(), basket.BillingCurrency.ISOCode).ToString();

            updatedBasket.OrderTotal    = orderTotal;
            updatedBasket.DiscountTotal = discountTotal;
            updatedBasket.TaxTotal      = taxTotal;
            updatedBasket.SubTotal      = subTotal;


            return(Json(new
            {
                MiniBasketRefresh = _miniBasketService.Refresh(),
                OrderTotal = orderTotal,
                DiscountTotal = discountTotal,
                TaxTotal = taxTotal,
                SubTotal = subTotal,
                OrderLines = updatedBasket.Orderlines
            }));
        }
Пример #2
0
        public void UpdateOrderline_Removes_Orderline_If_Quantity_Is_Negative_Or_Zero_And_Json_Result_IsNotNull()
        {
            //Arrange
            _transactionLibraryInternal.GetBasket(false).Returns(new Basket(new PurchaseOrder
            {
                BillingCurrency = new Currency
                {
                    ISOCode = "USD"
                }
            }));
            BasketUpdateBasket model = new BasketUpdateBasket();

            model.RefreshBasket = new List <BasketUpdateBasket.UpdateOrderLine>();
            model.RefreshBasket.Add(new BasketUpdateBasket.UpdateOrderLine()
            {
                OrderLineId  = 0,
                OrderLineQty = 2
            });
            model.RefreshBasket.Add(new BasketUpdateBasket.UpdateOrderLine()
            {
                OrderLineId  = 1,
                OrderLineQty = 1
            });
            model.RefreshBasket.Add(new BasketUpdateBasket.UpdateOrderLine()
            {
                OrderLineId  = 2,
                OrderLineQty = -5
            });

            //Act
            var result = _controller.UpdateBasket(model);

            // Assert
            _transactionLibraryInternal.Received().UpdateLineItemByOrderLineId(0, 2);
            _transactionLibraryInternal.Received().UpdateLineItemByOrderLineId(1, 1);
            _transactionLibraryInternal.Received().UpdateLineItemByOrderLineId(2, 0);
            _transactionLibraryInternal.Received().ExecuteBasketPipeline();

            var jsonResult = result as JsonResult;

            Assert.NotNull(jsonResult);
        }