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) }); }
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 }) }); }
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)); }
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; }