/// <summary>Maps to campaign flatten model.</summary>
 /// <param name="baseCampaignFlattenedModel">The base campaign flattened model.</param>
 /// <param name="salesAreaCampaignTargetFlattenModel">The sales area campaign target flatten model.</param>
 /// <param name="durationFlattenModel">The duration flatten model.</param>
 /// <param name="strikeWeightFlattenModel">The strike weight flatten model.</param>
 /// <param name="dayPartFlattenModel">The day part flatten model.</param>
 /// <returns></returns>
 private CampaignFlattenedModel MapToCampaignFlattenModel(
     CampaignBaseFlattenedModel baseCampaignFlattenedModel,
     SalesAreaCampaignTargetFlattenModel salesAreaCampaignTargetFlattenModel,
     DurationFlattenModel durationFlattenModel,
     StrikeWeightFlattenModel strikeWeightFlattenModel = null,
     DayPartFlattenModel dayPartFlattenModel           = null)
 {
     return(_mapper.Map <CampaignFlattenedModel>(
                Tuple.Create(
                    baseCampaignFlattenedModel,
                    salesAreaCampaignTargetFlattenModel,
                    durationFlattenModel,
                    strikeWeightFlattenModel,
                    dayPartFlattenModel)));
 }
Exemple #2
0
        private CampaignFlattenedModel MapToCreateCampaignFlattenedModel(
            CampaignBaseFlattenedModel baseCampaignFlattenedModel,
            SalesAreaCampaignTargetFlattenModel salesAreaCampaignTargetFlattenModel,
            DurationFlattenModel durationFlattenModel,
            IMapper mapper,
            StrikeWeightFlattenModel strikeWeightFlattenModel = null,
            DayPartFlattenModel dayPartFlattenModel           = null)
        {
            var campaignFlattenedModel = mapper.Map <CampaignFlattenedModel>(baseCampaignFlattenedModel);

            campaignFlattenedModel = mapper.Map(salesAreaCampaignTargetFlattenModel, campaignFlattenedModel);
            campaignFlattenedModel = mapper.Map(durationFlattenModel, campaignFlattenedModel);
            if (strikeWeightFlattenModel != null)
            {
                campaignFlattenedModel = mapper.Map(strikeWeightFlattenModel, campaignFlattenedModel);
                if (dayPartFlattenModel != null)
                {
                    campaignFlattenedModel = mapper.Map(dayPartFlattenModel, campaignFlattenedModel);
                }
            }
            return(campaignFlattenedModel);
        }
        /// <summary>
        /// Converts the specified campaign list into the list of <see cref="CampaignFlattenedModel"/>>.
        /// </summary>
        public List <CampaignFlattenedModel> Flatten(IReadOnlyCollection <Campaign> campaigns)
        {
            var campaignFlattenedModelList = new List <CampaignFlattenedModel>();

            if (campaigns is null || campaigns.Count == 0)
            {
                return(campaignFlattenedModelList);
            }

            PrepareRelatedCampaignData(campaigns);

            foreach (var item in campaigns)
            {
                var baseCampaignFlattenedModel = new CampaignBaseFlattenedModel()
                {
                    ExternalCampaignRef       = item.ExternalId,
                    CampaignName              = item.Name,
                    CampaignGroup             = item.CampaignGroup,
                    BusinessType              = item.BusinessType,
                    CampaignStartDate         = item.StartDateTime,
                    CampaignEndDate           = item.EndDateTime,
                    DaysToEndOfCampign        = (item.EndDateTime - DateTime.Now).Days,
                    CampaignTargetRatings     = item.TargetRatings,
                    CampaignActualRatings     = item.ActualRatings,
                    CampaignTargetActualDiff  = item.ActualRatings - item.TargetRatings,
                    CampaignTargetAchievedPct = GetCampaignTargetAchievedPct()
                };

                Demographic demographic = null;

                if (!(item.DemoGraphic is null))
                {
                    demographic = ResolveDemographic(item);
                }

                baseCampaignFlattenedModel.DemographicName = demographic?.Name ?? string.Empty;
                var product = ResolveProduct(item);

                if (!(product is null))
                {
                    baseCampaignFlattenedModel.AgencyName     = product.AgencyName;
                    baseCampaignFlattenedModel.ProductName    = product.Name;
                    baseCampaignFlattenedModel.AdvertiserName = product.AdvertiserName;
                    var childClash = ResolveClash(item);

                    if (!(childClash is null))
                    {
                        baseCampaignFlattenedModel.ClashName = childClash.Description;
                        var parentClash = ResolveParentClash(item);
                        if (!(parentClash is null))
                        {
                            baseCampaignFlattenedModel.ParentClashName = parentClash.Description;
                        }
                    }
                }

                foreach (var salesAreaCampaignTarget in item.SalesAreaCampaignTarget)
                {
                    var flattenedSaleAreaCampaignTarget = FlattenSaleAreaCampaignTarget(salesAreaCampaignTarget);
                    var flattenedDuration = FlattenDuration(salesAreaCampaignTarget);

                    if (salesAreaCampaignTarget.CampaignTargets is null ||
                        !salesAreaCampaignTarget.CampaignTargets.Any())
                    {
                        var mappedModel = MapToCampaignFlattenModel(
                            baseCampaignFlattenedModel,
                            flattenedSaleAreaCampaignTarget,
                            flattenedDuration);
                        campaignFlattenedModelList.Add(mappedModel);

                        continue;
                    }

                    foreach (var campaignTarget in salesAreaCampaignTarget.CampaignTargets)
                    {
                        foreach (var strikeWeight in campaignTarget.StrikeWeights)
                        {
                            var flattenedStrikeWeight = FlattenStrikeWeight(strikeWeight);

                            if (strikeWeight.DayParts is null || !strikeWeight.DayParts.Any())
                            {
                                var mappedModel = MapToCampaignFlattenModel(
                                    baseCampaignFlattenedModel,
                                    flattenedSaleAreaCampaignTarget,
                                    flattenedDuration,
                                    flattenedStrikeWeight);
                                campaignFlattenedModelList.Add(mappedModel);

                                continue;
                            }

                            foreach (var dayPart in strikeWeight.DayParts)
                            {
                                var flattenedDayPart = FlattenDayPart(dayPart);
                                var mappedModel      = MapToCampaignFlattenModel(
                                    baseCampaignFlattenedModel,
                                    flattenedSaleAreaCampaignTarget,
                                    flattenedDuration,
                                    flattenedStrikeWeight,
                                    flattenedDayPart);
                                campaignFlattenedModelList.Add(mappedModel);
                            }
                        }
                    }
                }

                decimal GetCampaignTargetAchievedPct() =>
                Math.Round(item.TargetRatings == 0 ? 0 : item.ActualRatings / item.TargetRatings * 100, 2,
                           MidpointRounding.AwayFromZero);
            }

            return(campaignFlattenedModelList);
        }