public Calculation ApplyDiscountMarkupRuleCalculation(DiscountMarkupRule discountMarkupRule, Calculation calculation)
        {
            calculation.Covers.ToList().ForEach(keyValuePair =>
            {
                var priceAfterMarkup = Round(keyValuePair.Value.Price * discountMarkupRule.ParamValue, 2);
                calculation.Covers[keyValuePair.Key] = SetPrice(keyValuePair.Value, priceAfterMarkup);
            });

            return(calculation);
        }
        public bool AppliesDiscountMarkupRuleCalculationParams(DiscountMarkupRule discountMarkupRule, Calculation calculation)
        {
            if (IsNullOrEmpty(discountMarkupRule.ApplyIfFormula))
            {
                return(true);
            }

            var(paramDefinitions, values) = DomainAdapter.CalculationToCalculationParams(calculation);
            return((bool)new Interpreter()
                   .Parse(discountMarkupRule.ApplyIfFormula, paramDefinitions.ToArray())
                   .Invoke(values.ToArray()));
        }