private static SmoothSponsorshipRestrictionLimits CalculateRestrictionLimitsForAllCompetitorsWhenCalculationTypeIsPercentage(SmoothSponsorshipRunningTotals input) { var totalSponsoredProduct = input.SponsoredProducts.Sum(x => x.Value); if (totalSponsoredProduct == 0) { return(AllCompetitorsWithUnlimitedAvailibility(input)); } var output = new SmoothSponsorshipRestrictionLimits(); var competitorsAndRestrictionValues = input.GetRestrictionValuesForCompetitors(); var alreadyBookedCompetitorsInTotal = input.AlreadyPlacedCompetitors.Sum(x => x.Value); foreach (var item in competitorsAndRestrictionValues) { var productId = item.Key; var maximumAllowedValue = CalculateRestrictionValueForPercentage(item.Value, totalSponsoredProduct); var availValueRemaining = maximumAllowedValue - alreadyBookedCompetitorsInTotal; if (availValueRemaining > 0) { output.AvailabilitiesForCompetitors.Add(productId, availValueRemaining); } } return(output); }
private static SmoothSponsorshipRestrictionLimits CalculateRestrictionLimitsForEachCompetitorWhenCalculationTypeIsFlat(SmoothSponsorshipRunningTotals input) { var output = new SmoothSponsorshipRestrictionLimits(); foreach (var item in input.AllRestrictionValues) { var productId = item.Key; var alreadyPlacedValue = 0.0; if (input.AllProductIdsInClashOrAdvertiserCode .TryGetValue(productId, out List <ProductExternalReference> products)) { foreach (var product in products) { if (input.AlreadyPlacedCompetitors.ContainsKey(product)) { alreadyPlacedValue += input.AlreadyPlacedCompetitors[product]; } } } var availValueRemaining = item.Value - alreadyPlacedValue; if (availValueRemaining > 0) { output.AvailabilitiesForCompetitors.Add(productId, availValueRemaining); } } return(output); }
private static SmoothSponsorshipRestrictionLimits CalculateRestrictionLimitsForAllCompetitorsWhenCalculationTypeIsFlat(SmoothSponsorshipRunningTotals input) { var output = new SmoothSponsorshipRestrictionLimits(); var competitorsAndRestrictionValues = input.GetRestrictionValuesForCompetitors(); var alreadyBookedCompetitorsInTotal = input.AlreadyPlacedCompetitors.Sum(x => x.Value); foreach (var item in competitorsAndRestrictionValues) { var productId = item.Key; var availValueRemaining = item.Value - alreadyBookedCompetitorsInTotal; if (availValueRemaining > 0) { output.AvailabilitiesForCompetitors.Add(productId, availValueRemaining); } } return(output); }
private static SmoothSponsorshipRestrictionLimits CalculateRestrictionLimitsForEachCompetitorWhenCalculationTypeIsPercentage( SmoothSponsorshipRunningTotals input) { var totalSponsoredProduct = input.SponsoredProducts.Sum(x => x.Value); if (totalSponsoredProduct == 0) { return(AllCompetitorsWithUnlimitedAvailibility(input)); } var output = new SmoothSponsorshipRestrictionLimits(); foreach (var item in input.AllRestrictionValues) { var productId = item.Key; var alreadyPlacedValue = 0.0; if (input.AllProductIdsInClashOrAdvertiserCode .TryGetValue(productId, out List <ProductExternalReference> products)) { foreach (var product in products) { if (input.AlreadyPlacedCompetitors.ContainsKey(product)) { alreadyPlacedValue += input.AlreadyPlacedCompetitors[product]; } } } var maximumAllowedValue = CalculateRestrictionValueForPercentage(item.Value, totalSponsoredProduct); var availValueRemaining = maximumAllowedValue - alreadyPlacedValue; if (availValueRemaining > 0) { output.AvailabilitiesForCompetitors.Add(productId, availValueRemaining); } } return(output); }