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");
            }
        }
Esempio n. 3
0
        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);
        }