public ActionResult EvalPromos(DemoPromoViewModel viewModel) { var market = _currentMarket.GetCurrentMarket(); var inMemOrderGroup = new InMemoryOrderGroup(market, market.DefaultCurrency); foreach (var item in viewModel.CatalogItems) { if (item.Quantity > 0) { var inMemLineItem = new InMemoryLineItem { Code = item.Code, Quantity = item.Quantity }; inMemOrderGroup.GetFirstShipment().LineItems.Add(inMemLineItem); } } var promoSettings = new PromotionEngineSettings(RequestFulfillmentStatus.All, true); viewModel.Rewards = _promoEngine.Run(inMemOrderGroup, promoSettings); viewModel.CartItems = inMemOrderGroup.GetFirstShipment().LineItems; if (inMemOrderGroup.GetFirstForm().Promotions.Count > 0) { viewModel.PromoItems = inMemOrderGroup.GetFirstForm().Promotions.First().Entries; } return(View("Index", viewModel)); }
private Money GetDiscountedPrice(string code, decimal placedPrice, IMarket market) { var inMemoryOrderGroup = new InMemoryOrderGroup(market, market.DefaultCurrency); inMemoryOrderGroup.AddLineItem(new InMemoryLineItem { Quantity = decimal.One, PlacedPrice = placedPrice, Code = code }); // calculate discounts var settings = new PromotionEngineSettings() { ApplyReward = false, RequestedStatuses = RequestFulfillmentStatus.Fulfilled }; var rewardDescriptions = _promotionEngine .Run(inMemoryOrderGroup, settings); var affectedEntries = rewardDescriptions .SelectMany(rd => rd.Redemptions) .Where(r => r.AffectedEntries != null) .SelectMany(r => r.AffectedEntries.PriceEntries); var affectedEntry = affectedEntries.FirstOrDefault(ae => ae.ParentItem.Code.Equals(code, StringComparison.OrdinalIgnoreCase)); if (affectedEntry != null) { var savedAmount = affectedEntry.OriginalTotal - affectedEntry.CalculatedTotal; var discountPrice = new PriceValue(); return(new Money(affectedEntry.CalculatedTotal, market.DefaultCurrency)); } else { var priceValue = new PriceValue(); return(new Money(placedPrice, market.DefaultCurrency)); } }