public Denomination Calculate() { base.Validate(RequireAmount); var denominationWithdrawn = new Denomination() { DenominationValue = DenominationToProcess, Value = DenominationToProcess }; IDenominationLogic logic = new DenominationLogic(); var denominations = logic.GetDenominationValue(); var denominationBeingProcess = denominations.Where(x => x.DenominationValue == DenominationToProcess).SingleOrDefault(); var quantity = (int)(RequireAmount / DenominationToProcess); // make sure we have enough notes if (quantity > denominationBeingProcess.Quantity) { quantity = denominationBeingProcess.Quantity; } if (quantity > 0) { // dispense the denomination denominationWithdrawn.Quantity = quantity; logic.UpdateDenomination(DenominationToProcess, -quantity); } return(denominationWithdrawn); }
public void Validate(double requireAmount) { if (requireAmount < 0) { throw new ArgumentException("amount less than zero", "requireAmount"); } IDenominationLogic logic = new DenominationLogic(); var total = logic.GetDenominationTotal(); if (requireAmount > total) { throw new ArgumentException("you don't have enough money to fulfill your request", "requireAmount"); } }
public List <Denomination> WithdrawMoney(double requireAmount) { double amountRemaining = requireAmount; var denominationsWithdrawn = new List <Denomination>(); IDenominationLogic logic = new DenominationLogic(); var denominations = logic.GetDenominationValue().OrderByDescending(o => o.DenominationValue); denominationsWithdrawn = denominations.Select(d => { var den = new ProcessDenomination(d.DenominationValue, amountRemaining).Calculate(); amountRemaining = amountRemaining - (den.DenominationValue * den.Quantity); return(den); }).Where(r => r.Quantity > 0).ToList(); return(denominationsWithdrawn); }