Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }