private FeeVariation SumFeeVariations(List <FeeVariation> variations) { var fee = new FeeVariation { Percentage = 0, FixedAmount = 0, LowerLimit = 0, UpperLimit = 0 }; if (variations != null) { foreach (FeeVariation variation in variations) { fee.Percentage += variation.Percentage; fee.FixedAmount += variation.FixedAmount; fee.LowerLimit += variation.LowerLimit; fee.UpperLimit += variation.UpperLimit; } } return(fee); }
private FeeCondition SolveFeeCondition(FeeCondition fee) { if (fee != null) { FeeVariation feeVariation = SumFeeVariations(fee.Variations); fee.CalculatedFixedAmount = (fee.FixedAmount?.Amount ?? 0) + feeVariation.FixedAmount; fee.CalculatedLowerLimit = (fee.LowerLimit?.Amount ?? 0) + feeVariation.LowerLimit; fee.CalculatedUpperLimit = (fee.UpperLimit?.Amount ?? 0) + feeVariation.UpperLimit; fee.CalculatedPercentage = fee.Percentage + feeVariation.Percentage; if (fee.PercentageLowerLimit.HasValue && fee.PercentageLowerLimit.Value > fee.CalculatedPercentage) { fee.CalculatedPercentage = fee.PercentageLowerLimit.Value; fee.PercentageLowerLimitApplied = true; } else if (fee.PercentageUpperLimit.HasValue && fee.CalculatedPercentage > fee.PercentageUpperLimit.Value) { fee.CalculatedPercentage = fee.PercentageUpperLimit.Value; fee.PercentageUpperLimitApplied = true; } } return(fee); }