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 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); }