예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
 public static IEnumerable <StrikeWeight> GetSalesAreaCampaignTargetStrikeWeights(SalesAreaCampaignTarget salesAreaCampaignTarget)
 {
     return(salesAreaCampaignTarget.CampaignTargets.Where(t =>
                                                          t.StrikeWeights != null &&
                                                          t.StrikeWeights.Any())
            .SelectMany(s => s.StrikeWeights)
            .ToArray());
 }