/// <summary>Flattens the sale area campaign target.</summary> /// <param name="salesAreaCampaignTarget">The sales area campaign target.</param> /// <returns></returns> public SalesAreaCampaignTargetFlattenModel FlattenSaleAreaCampaignTarget( SalesAreaCampaignTarget salesAreaCampaignTarget) { var salesAreaCampaignTargetFlattenModel = new SalesAreaCampaignTargetFlattenModel(); if (salesAreaCampaignTarget is null) { return(salesAreaCampaignTargetFlattenModel); } salesAreaCampaignTargetFlattenModel.SalesAreaGroupName = salesAreaCampaignTarget.SalesAreaGroup?.GroupName; if (!(salesAreaCampaignTarget.Multiparts is null)) { salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetRatings = salesAreaCampaignTarget.Multiparts.Sum(m => m.DesiredPercentageSplit); salesAreaCampaignTargetFlattenModel.SalesAreaGroupActualRatings = salesAreaCampaignTarget.Multiparts.Sum(m => m.CurrentPercentageSplit); } salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetActualDiff = salesAreaCampaignTargetFlattenModel.SalesAreaGroupActualRatings - salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetRatings; salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetAchievedPct = GetSalesAreaGroupTargetAchievedPct(); return(salesAreaCampaignTargetFlattenModel); decimal GetSalesAreaGroupTargetAchievedPct() => Math.Round( salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetRatings == 0 ? 0 : salesAreaCampaignTargetFlattenModel.SalesAreaGroupActualRatings / salesAreaCampaignTargetFlattenModel.SalesAreaGroupTargetRatings * 100, 2, MidpointRounding.AwayFromZero); }
/// <summary>Flattens the duration.</summary> /// <param name="salesAreaCampaignTarget">The sales area campaign target.</param> /// <returns></returns> public DurationFlattenModel FlattenDuration(SalesAreaCampaignTarget salesAreaCampaignTarget) { var durationFlattenModel = new DurationFlattenModel(); if (salesAreaCampaignTarget is null) { return(durationFlattenModel); } if (!(salesAreaCampaignTarget.Multiparts is null)) { durationFlattenModel.DurationTargetRatings = salesAreaCampaignTarget.Multiparts.Sum(m => m.DesiredPercentageSplit); durationFlattenModel.DurationActualRatings = salesAreaCampaignTarget.Multiparts.Sum(m => m.CurrentPercentageSplit); var ticks = salesAreaCampaignTarget.Multiparts.FirstOrDefault()?.Lengths?.Select(x => x.Length) .FirstOrDefault().BclCompatibleTicks ?? default; durationFlattenModel.DurationSecs = Convert.ToInt32(TimeSpan.FromTicks(ticks).TotalSeconds); } durationFlattenModel.DurationTargetActualDiff = durationFlattenModel.DurationActualRatings - durationFlattenModel.DurationTargetRatings; durationFlattenModel.DurationTargetAchievedPct = GetDurationTargetAchievedPct(); return(durationFlattenModel); decimal GetDurationTargetAchievedPct() => Math.Round(durationFlattenModel.DurationTargetRatings == 0 ? 0 : durationFlattenModel.DurationActualRatings / durationFlattenModel.DurationTargetRatings * 100, 2, MidpointRounding.AwayFromZero); }
public static IEnumerable <StrikeWeight> GetSalesAreaCampaignTargetStrikeWeights(SalesAreaCampaignTarget salesAreaCampaignTarget) { return(salesAreaCampaignTarget.CampaignTargets.Where(t => t.StrikeWeights != null && t.StrikeWeights.Any()) .SelectMany(s => s.StrikeWeights) .ToArray()); }