private List <ScenarioCampaignMetricItem> GenerateCampaignKPIs() { var kpis = new List <ScenarioCampaignMetricItem>(); var calculator = new ScenarioCampaignKPIsCalculator(); foreach (var campaign in _campaigns) { var nominalPrice = _spots .Where(s => !s.ClientPicked && !s.IsUnplaced && s.ExternalCampaignNumber == campaign.ExternalId) .Sum(s => s.NominalPrice); var campaignRecommendations = _recommendations.Where(r => r.ExternalCampaignNumber == campaign.ExternalId); kpis.Add(calculator.CalculateCampaignKPIs(campaign, campaignRecommendations, nominalPrice)); } return(kpis); }
private List <ScenarioCampaignMetricItem> GenerateCampaignKPIs(Guid runId, Guid scenarioId, IEnumerable <Recommendation> scenarioRecommendations) { _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0, String.Format("Executing Campaign KPI processing (RunID={0}, ScenarioID={1})", runId, scenarioId))); var kpis = new List <ScenarioCampaignMetricItem>(); var calculator = new ScenarioCampaignKPIsCalculator(); var recommendations = scenarioRecommendations .GroupBy(x => x.ExternalCampaignNumber) .ToDictionary(x => x.Key, x => x.ToList()); foreach (var campaign in _campaignRepository.GetAllFlat()) { var nominalPrice = _spotRepository.GetNominalPriceByCampaign(campaign.ExternalId); var campaignRecommendations = recommendations.ContainsKey(campaign.ExternalId) ? recommendations[campaign.ExternalId] : Enumerable.Empty <Recommendation>(); kpis.Add(calculator.CalculateCampaignKPIs(campaign, campaignRecommendations, nominalPrice)); } _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0, 0, String.Format("Executed Campaign KPI processing (RunID={0}, ScenarioID={1})", runId, scenarioId))); return(kpis); }