예제 #1
0
        public IEnumerable<Money> Eject(CashFlow inCash, ReservedMoney inReservedMoney) {
            try {
                if (inCash.UsedAmount == 0) {
                    return inCash.RecevedMoney.ToList();
                }

                var received = inCash.RecevedMoney
                    .GroupBy(m => m)
                    .ToDictionary(g => g.Key, g => g.Count())                  
                ;    

                var result = new List<KeyValuePair<Money, int>>();

                this.EjectCore(
                    inCash.ChangedAount,
                    inReservedMoney.Items.OrderByDescending(pair => pair.Key.Value()),
                    (m, totalCount, useCount) => {
                        result.Add(
                            new KeyValuePair<Money, int>(m, (int)useCount)
                        );
                    }
                );

                return result.SelectMany(r => Enumerable.Repeat(r.Key, r.Value));
            }
            finally {
                inCash.RecevedMoney.Clear();
            }
        }
예제 #2
0
        public IEnumerable<Money> Eject(CashFlow inCash, ReservedMoney inReservedMoney)
        {
            try {
                if (inCash.UsedAmount == 0) {
                    return inCash.RecevedMoney.ToList();
                }

                var received = inCash.RecevedMoney
                    .GroupBy(m => m)
                    .ToDictionary(g => g.Key, g => g.Count())
                ;

                var result = new List<KeyValuePair<Money, int>>();

                this.EjectCore(
                    inCash.ChangedAount,
                    inReservedMoney.Items.OrderByDescending(pair => pair.Key.Value()),
                    (m, totalCount, useCount) => {
                        result.Add(
                            new KeyValuePair<Money, int>(m, (int)useCount)
                        );
                    }
                );

                return result.SelectMany(r => Enumerable.Repeat(r.Key, r.Value));
            }
            finally {
                inCash.RecevedMoney.Clear();
            }
        }
예제 #3
0
        private ReservedMoney InitInfinityReservedChange()
        {
            var result = new ReservedMoney ();

            foreach (var m in Enum.GetValues(typeof(Money)).Cast<Money>().Where (m => m != Money.Unknown)) {
                result.Items[m] = 10000;
            }

            return result;
        }