private AppliedBuy ApplyBuy(PromoModels.Buy buy, Dictionary <string, List <PromoModels.MarkedItem> > groupedItems, PromoModels.Promo promo) { if (!groupedItems.TryGetValue(buy.Category, out List <PromoModels.MarkedItem> value)) { return(new AppliedBuy { Applied = false, GroupItems = groupedItems }); } var matchedItems = new List <PromoModels.MarkedItem>(); foreach (var item in groupedItems[buy.Category]) { var isMarkedBuy = item.MarkedBuys.TryGetValue(promo.Id, out bool val1); var isMarkedGet = item.MarkedGets.TryGetValue(promo.Id, out float val2); if (!isMarkedBuy && !isMarkedGet) { matchedItems.Add(item); } } if (matchedItems.Count < buy.Count) { return(new AppliedBuy { Applied = false, GroupItems = groupedItems }); } groupedItems = MarkBuyItems(groupedItems, buy, promo); return(new AppliedBuy { Applied = true, GroupItems = groupedItems }); }
private Dictionary <string, List <PromoModels.MarkedItem> > MarkBuyItems(Dictionary <string, List <PromoModels.MarkedItem> > groupedItems, PromoModels.Buy buy, PromoModels.Promo promo) { var markCount = 0; for (int i = 0; i < groupedItems[buy.Category].Count; i++) { var item = groupedItems[buy.Category][i]; if (markCount == buy.Count) { break; } var isMarkedBuy = item.MarkedBuys.TryGetValue(promo.Id, out bool val1); var isMarkedGet = item.MarkedGets.TryGetValue(promo.Id, out float val2); if (!isMarkedBuy && !isMarkedGet) { groupedItems[buy.Category][i].MarkedBuys[promo.Id] = true; markCount += 1; } } return(groupedItems); }