Example #1
0
        public virtual IEnumerable <int> CashOut(Banknote banknote)
        {
            if (!IsAvailable(banknote))
            {
                foreach (var banknoteObject in _nextHandler.CashOut(banknote))
                {
                    yield return(banknoteObject);
                }
                yield break;
            }
            var nominal   = banknote.Nominal;
            var quotient  = nominal / Value;
            var remainder = nominal % Value;

            foreach (var banknoteObject in Enumerable.Repeat(Value, quotient))
            {
                yield return(banknoteObject);
            }
            if (remainder == 0)
            {
                yield break;
            }
            foreach (var banknoteObject in _nextHandler.CashOut(new Banknote
            {
                Currency = banknote.Currency,
                Nominal = remainder
            }))
            {
                yield return(banknoteObject);
            }
        }
Example #2
0
        public IEnumerable <Banknote> CashOut(string banknote)
        {
            var banknoteObject = GetBanknote(banknote);

            if (!_handler.Validate(banknoteObject))
            {
                throw new ArgumentException();
            }
            var nominals = _handler.CashOut(banknoteObject);

            return(nominals.Select(x => new Banknote
            {
                Currency = banknoteObject.Currency,
                Nominal = x
            }));
        }