public static VmRecommendationProjection Build(SmRecommendationSummary recommendation, SmRecommendationProjectionSummary model, int index) { if (model == null) { return(null); } var isMarkdown = (recommendation.ScheduleMask & (1 << index)) != 0; var isCsp = true; var isPadding = true; if (recommendation.ScheduleId > 0) { var bits = recommendation.ScheduleId.GetBitIndexes().ToList(); isCsp = index < bits.First(); isPadding = index > bits.Last(); } return(new VmRecommendationProjection { Week = model.Week, Discount = model.Discount, Price = model.Price, Quantity = model.Quantity, IsCsp = isCsp, IsPadding = isPadding, IsMarkdown = isMarkdown }); }
public void RecommendationProjection_Correctly_Identifies_CSP_From_Schedule_Id() { var expected = new List <int> { 1 }; // No markdown in week 5 var scheduleMask = Convert.ToInt32("11101111", 2); // 5 markdowns, starting with CSP var scheduleId = Convert.ToInt32("10101110", 2); var recommendation = new SmRecommendationSummary { ScheduleId = scheduleId, ScheduleMask = scheduleMask }; var projections = new List <SmRecommendationProjectionSummary> { new SmRecommendationProjectionSummary { Week = 1, Discount = 0 }, new SmRecommendationProjectionSummary { Week = 2, Discount = 0.1M }, new SmRecommendationProjectionSummary { Week = 3, Discount = 0.2M }, new SmRecommendationProjectionSummary { Week = 4, Discount = 0.3M }, new SmRecommendationProjectionSummary { Week = 5, Discount = 0.3M }, new SmRecommendationProjectionSummary { Week = 6, Discount = 0.4M }, new SmRecommendationProjectionSummary { Week = 7, Discount = 0.4M }, new SmRecommendationProjectionSummary { Week = 8, Discount = 0.5M }, }; var result = VmRecommendationProjection.Build(recommendation, projections); result .Where(x => x.IsCsp) .Select(x => x.Week) .ShouldAllBeEquivalentTo(expected); }
public static List <VmRecommendationProjection> Build(SmRecommendationSummary recommendation, List <SmRecommendationProjectionSummary> models) { return(recommendation == null || models == null ? new List <VmRecommendationProjection>() : models.Select((x, i) => Build(recommendation, x, i)).ToList()); }