public static void PopulatePrePostCampaignKPIs(ICampaignKpiData campaignData, ScenarioCampaignResultItem source, ScenarioCampaignResultModel result) { var totalNominalValue = source.NominalValue + campaignData.NominalValue; var revenueBudget = campaignData.RevenueBudget ?? 0; var totalPayback = campaignData.Payback ?? 0; var differenceValueDelivered = totalNominalValue - revenueBudget; var differenceValueDeliveredPayback = totalNominalValue - revenueBudget - totalPayback; var dayPartRevenueWithPayback = revenueBudget + totalPayback; result.ZeroRatedSpots = (int)source.ZeroRatedSpots; result.NominalValue = source.NominalValue; result.TotalNominalValue = totalNominalValue; result.RevenueBudget = revenueBudget; result.TotalPayback = totalPayback; result.DifferenceValueDelivered = differenceValueDelivered; result.DifferenceValueDeliveredPayback = differenceValueDeliveredPayback; result.DifferenceValueDeliveredPercentage = revenueBudget == 0 ? 0 : Math.Round((differenceValueDelivered / revenueBudget) * 100, 2); result.DifferenceValueDeliveredPercentagePayback = dayPartRevenueWithPayback == 0 ? 0 : Math.Round((differenceValueDeliveredPayback / dayPartRevenueWithPayback) * 100, 2); }
/// <summary>Resolves the campaign.</summary> /// <param name="item">The item.</param> /// <returns></returns> protected abstract Campaign ResolveCampaign(ScenarioCampaignResultItem item);
/// <summary> /// Resolves PayPart for pre-post KPI calculation /// </summary> /// <param name="campaign"></param> /// <param name="item"></param> /// <returns></returns> /// <remarks>Example of DowTime string inside DayPartName: "2100-2659(Mon-Fri)"</remarks> protected abstract ICampaignKpiData ResolveDayPartKpiModel(Campaign campaign, ScenarioCampaignResultItem item);
static bool IsSalesAreaNameEqual(SalesAreaGroup salesAreaGroup, ScenarioCampaignResultItem scenarioCampaignResultItem) => salesAreaGroup?.SalesAreas?.Any(sa => String.Equals(sa, scenarioCampaignResultItem.SalesAreaName, StringComparison.OrdinalIgnoreCase)) ?? false;