public virtual LargeCartViewModel CreateSimpleLargeCartViewModel(ICart cart)
        {
            if (cart == null)
            {
                var zeroAmount = new Money(0, _currencyService.GetCurrentCurrency());
                return(new LargeCartViewModel()
                {
                    TotalDiscount = zeroAmount,
                    Total = zeroAmount,
                    TaxTotal = zeroAmount,
                    ShippingTotal = zeroAmount,
                    Subtotal = zeroAmount,
                });
            }

            var totals                = _orderGroupCalculator.GetOrderGroupTotals(cart);
            var orderDiscountTotal    = _orderGroupCalculator.GetOrderDiscountTotal(cart);
            var shippingDiscountTotal = cart.GetShippingDiscountTotal();
            var discountTotal         = shippingDiscountTotal + orderDiscountTotal;

            var model = new LargeCartViewModel()
            {
                TotalDiscount = discountTotal,
                Total         = totals.Total,
                ShippingTotal = totals.ShippingTotal,
                Subtotal      = totals.SubTotal,
                TaxTotal      = totals.TaxTotal,
                ReferrerUrl   = GetReferrerUrl(),
            };

            return(model);
        }
        protected virtual OmniumOrderTotals GetOrderFormTotals(
            IPurchaseOrder purchaseOrder, IMarket market, Currency currency, IEnumerable <OmniumShipment> shipments)
        {
            var orderGroupTotals = _orderGroupCalculator.GetOrderGroupTotals(purchaseOrder);

            var totalShipping         = new Money(shipments.Sum(s => s.ShippingSubTotal), currency);
            var totalShippingTax      = new Money(shipments.Sum(x => x.ShippingTax), currency);
            var totalLineItems        = new Money(shipments.Sum(s => s.LineItems.Sum(l => l.ExtendedPrice)), currency);
            var totalLineItemsExclTax = new Money(shipments.Sum(s => s.LineItems.Sum(l => l.ExtendedPriceExclTax)), currency);

            return(new OmniumOrderTotals(currency)
            {
                ShippingDiscounts = new Money(shipments.Sum(x => x.ShippingDiscountAmount), currency),
                OrderDiscounts = _orderGroupCalculator.GetOrderDiscountTotal(purchaseOrder),
                Handling = orderGroupTotals.HandlingTotal,
                // total shipping costs
                Shipping = totalShipping,
                // total shipping costs excl tax
                ShippingExclTax = totalShipping - totalShippingTax,
                // total line item prices (extended price)
                SubTotal = totalLineItems,
                // total line items prices exl tax (ExtendedPriceExclTax)
                SubTotalExclTax = totalLineItemsExclTax,
                // total taxes
                TaxTotal = orderGroupTotals.TaxTotal,
                // total incl taxes
                Total = orderGroupTotals.Total,
                // total excl taxes
                TotalExclTax = orderGroupTotals.Total - orderGroupTotals.TaxTotal // new Money(orderGroupTotals.Total - (totalShipmentTax + totalLineItemTax), currency) // total - (shipment tax + lineItems tax)
            });
        }
Exemple #3
0
        public virtual OrderSummaryViewModel CreateOrderSummaryViewModel(ICart cart)
        {
            if (cart == null)
            {
                return(CreateEmptyOrderSummaryViewModel());
            }

            var totals = _orderGroupCalculator.GetOrderGroupTotals(cart);

            return(new OrderSummaryViewModel
            {
                SubTotal = totals.SubTotal,
                CartTotal = totals.Total,
                ShippingTotal = totals.ShippingTotal,
                ShippingSubtotal = _orderGroupCalculator.GetShippingSubTotal(cart),
                OrderDiscountTotal = _orderGroupCalculator.GetOrderDiscountTotal(cart),
                ShippingDiscountTotal = cart.GetShippingDiscountTotal(),
                ShippingTaxTotal = totals.ShippingTotal + totals.TaxTotal,
                TaxTotal = totals.TaxTotal,
                PaymentTotal = cart.Currency.Round(totals.Total.Amount - (cart.GetFirstForm().Payments?.Sum(x => x.Amount) ?? 0)),
                OrderDiscounts = cart.GetFirstForm().Promotions.Where(x => x.DiscountType == DiscountType.Order).Select(x => new OrderDiscountViewModel
                {
                    Discount = new Money(x.SavedAmount, new Currency(cart.Currency)),
                    DisplayName = x.Description
                })
            });
        }
Exemple #4
0
        public ActionResult Index(CartPage currentPage)
        {
            CartViewModel model     = new CartViewModel();
            var           contactId = GetContactId();
            var           cart      = _orderRepository.LoadCart <ICart>(contactId, DefaultCartName);

            if (cart == null)
            {
                return(View("NoCart"));
            }
            else
            {
                var warningMessages = ValidateCart(cart);

                if (string.IsNullOrEmpty(warningMessages))
                {
                    warningMessages = "No Messages";
                }

                var descriptions = _promotionEngine.Run(cart);

                Money totalDiscount = _orderGroupCalculator.GetOrderDiscountTotal(cart, cart.Currency);

                model.PromotionMessage = string.Join("<br/>", descriptions.Select(x => x.Promotion.Name));
                model.OrderDiscount    = totalDiscount;
                model.LineItems        = cart.GetAllLineItems();
                model.SubTotal         = _orderGroupCalculator.GetSubTotal(cart);
                model.WarningMessage   = warningMessages;

                _orderRepository.Save(cart);
            }
            // The below is a dummy, remove when lab D2 is done
            return(View(model));
        }
 public virtual MiniCartViewModel CreateMiniCartViewModel(ICart cart)
 {
     if (cart == null)
     {
         return(new MiniCartViewModel
         {
             ItemCount = 0,
             CheckoutPage = _contentLoader.Get <StartPage>(ContentReference.StartPage).CheckoutPage,
             Shipments = Enumerable.Empty <ShipmentViewModel>(),
             Total = new Money(0, _currencyService.GetCurrentCurrency())
         });
     }
     return(new MiniCartViewModel
     {
         ItemCount = GetLineItemsTotalQuantity(cart),
         CheckoutPage = _contentLoader.Get <StartPage>(ContentReference.StartPage).CheckoutPage,
         Shipments = _shipmentViewModelFactory.CreateShipmentsViewModel(cart),
         Total = _orderGroupCalculator.GetSubTotal(cart) + _orderGroupCalculator.GetOrderDiscountTotal(cart, cart.Currency)
     });
 }
        public async Task <CartContentResponce> Handle(CartContentRequest request, CancellationToken cancellationToken)
        {
            var cart = _cartFactory.LoadOrCreateCart();

            var allLineItems  = cart.GetAllLineItems();
            var lineItemCodes = allLineItems.Select(x => x.Code).Distinct();
            var variants      = _contentLoader.GetItems(_referenceConverter.GetContentLinks(lineItemCodes).Select(x => x.Value), new LoaderOptions {
                LanguageLoaderOption.FallbackWithMaster()
            }).OfType <MovieVariant>();
            var prices    = _customerPriceService.GetPrices(variants.Select(x => x.Code)).ToDictionary(x => x.CatalogKey.CatalogEntryCode, x => x);
            var discounts = _customerPriceService.GetDiscountPrices(variants.Select(x => x.ContentLink)).ToDictionary(x => x.EntryLink, x => x);
            var products  = variants.Select(
                x => new
            {
                variant = x.ContentLink,
                product = _contentLoader.GetItems(x.GetParentProducts(), new LoaderOptions {
                    LanguageLoaderOption.FallbackWithMaster()
                }).OfType <MovieProduct>()
            }).ToDictionary(x => x.variant, x => x.product.FirstOrDefault());

            var lineItems = cart.GetAllLineItems().Select(x => new LineItem()
            {
                Code             = x.Code,
                DisplayName      = x.DisplayName,
                Quantity         = Convert.ToInt32(x.Quantity),
                ImageUrl         = "",//products[variants.Where(y => y.Code == x.Code).Select(y => y.ContentLink).First()].PosterPath,
                Price            = prices[x.Code].UnitPrice.ToString(),
                DiscountPrice    = discounts[variants.First(y => y.Code == x.Code).ContentLink].DiscountPrices.Last().Price.ToString(),
                ProductReference = products[variants.Where(y => y.Code == x.Code).Select(y => y.ContentLink).First()].ContentLink
            });

            var total            = _orderGroupCalculator.GetOrderGroupTotals(cart);
            var tax              = _orderGroupCalculator.GetTaxTotal(cart);
            var orderDiscount    = _orderGroupCalculator.GetOrderDiscountTotal(cart);
            var lineItemDiscount = new Money(cart.GetAllLineItems().Sum(x => x.GetEntryDiscount()), cart.Currency);
            var noDiscount       = new Money(allLineItems.Sum(x => prices[x.Code].UnitPrice.Amount * x.Quantity), cart.Currency);
            var model            = new CartContentResponce()
            {
                LineItems     = lineItems,
                Total         = total.Total.ToString(),
                ItemsDiscount = lineItemDiscount.ToString(),
                OrderDiscount = orderDiscount.ToString(),
                NoDiscount    = noDiscount.ToString()
            };

            return(await Task.FromResult(model));
        }
Exemple #7
0
        public ActionResult Index(CartPage currentPage)
        {
            // ToDo: (exercise D2)
            var cart = _orderRepository.LoadCart <ICart>(
                GetContactId()
                , DefaultCartName);

            // NOTE: a few different ways of loading cart
            // var cart1 = _orderRepository.Load<ICart>(GetContactId(), DefaultCartName).FirstOrDefault();
            // var cart2 = _orderRepository.LoadCart<ICart>(GetContactId(), DefaultCartName);
            // var cart3 = _orderRepository.Load(); // all IOrderGroups for current user... 8 overloads

            if (cart == null)
            {
                return(View("NoCart")); // ...do this nicer
            }
            else
            {
                string warningMessages = ValidateCart(cart);

                if (String.IsNullOrEmpty(warningMessages))
                {
                    warningMessages += "No messages";
                }

                _promotionEngine.Run(cart);
                Money totalDiscount = _orderGroupCalculator.GetOrderDiscountTotal(cart);

                var model = new CartViewModel
                {
                    PromotionRewards = GetPromotionRewards(cart),
                    LineItems        = cart.GetAllLineItems(), // Extension method
                    SubTotal         = _orderGroupCalculator.GetSubTotal(cart),
                    WarningMessage   = warningMessages
                };

                _orderRepository.Save(cart);

                return(View("index", model));
            }


            // The below is a dummy, remove when lab D2 is done
            //return null;
        }