コード例 #1
0
        private (Amount paid, Money remaining) Pay(Money money, Amount remainder)
        {
            var now = Timestamp.Now;

            switch (money)
            {
            case Amount amt when amt.Currency != remainder.Currency:
                return(Amount.Zero(remainder.Currency), money);

            case Amount amt when amt.Value <= remainder.Value:
                return(new Amount(amt.Currency, amt.Value), Amount.Zero(amt.Currency));

            case GiftCard gift when gift.Currency != remainder.Currency:
                return(Amount.Zero(remainder.Currency), gift);

            case GiftCard gift when gift.ValidBefore.CompareTo(now) < 0:
                return(Amount.Zero(remainder.Currency), Amount.Zero(gift.Currency));

            case GiftCard gift when gift.Value <= remainder.Value:
                return(new Amount(gift.Currency, gift.Value), Amount.Zero(gift.Currency));

            case Amount amt:
                return(remainder, amt.Subtract(remainder));

            case BankCard card when card.ValidBefore.CompareTo(now) < 0:
                return(Amount.Zero(remainder.Currency), Amount.Zero(remainder.Currency));

            case BankCard _:
                return(remainder, money);

            default:
                throw new ArgumentException("Money type not supported.");
            }
        }
コード例 #2
0
 public override Tuple <Amount, Money> Take(Currency currency, decimal amount) =>
 Tuple.Create(Amount.Zero(currency), (Money)this);
コード例 #3
0
 public override Money On(Timestamp time) =>
 time.CompareTo(this.ValidBefore) >= 0
         ? Amount.Zero(base.Currency)
         : this;