private bool CanApplyFactorAcrossSpecial(int factor, TrolleySpecial special) { foreach (var trolleyQuantity in Quantities) { var specialQuantity = special.Quantities.First(x => x.Name == trolleyQuantity.Name); if (specialQuantity.Quantity * factor > trolleyQuantity.Quantity) { return(false); } } return(true); }
private int FindBestFactor(List <int> factors, TrolleySpecial special) { var bestFactor = 1; foreach (var factor in factors) { if (factor > bestFactor && CanApplyFactorAcrossSpecial(factor, special)) { bestFactor = factor; } } return(bestFactor); }
private decimal CalculateTotalUsingSpecial(int factor, TrolleySpecial special) { var total = special.Total * factor; foreach (var trolleyQuantity in Quantities) { var specialQuantity = special.Quantities.First(x => x.Name == trolleyQuantity.Name); var remainingQuantity = trolleyQuantity.Quantity - specialQuantity.Quantity * factor; if (remainingQuantity > 0) { var price = Products.First(x => x.Name == trolleyQuantity.Name).Price; total += price * remainingQuantity; } } return(total); }
private int FindBestFactorForSpecial(TrolleySpecial special) { var factors = CalculateFactors(special); return(FindBestFactor(factors, special)); }