main
 1using System;
 2using MoMoney.Domain.Core;
 3
 4namespace MoMoney.Domain.Accounting
 5{
 6    public interface IPayment : Entity
 7    {
 8        Money apply_to(Money money);
 9    }
10
11    [Serializable]
12    internal class Payment : GenericEntity<IPayment>, IPayment
13    {
14        Money amount_paid { get; set; }
15
16        public Payment(Money amount_paid)
17        {
18            this.amount_paid = amount_paid;
19        }
20
21        public Money apply_to(Money money)
22        {
23            return money.add(amount_paid);
24        }
25
26        public bool Equals(Payment obj)
27        {
28            if (ReferenceEquals(null, obj)) return false;
29            if (ReferenceEquals(this, obj)) return true;
30            return base.Equals(obj) && Equals(obj.amount_paid, amount_paid);
31        }
32
33        public override bool Equals(object obj)
34        {
35            if (ReferenceEquals(null, obj)) return false;
36            if (ReferenceEquals(this, obj)) return true;
37            return Equals(obj as Payment);
38        }
39
40        public override int GetHashCode()
41        {
42            unchecked
43            {
44                return (base.GetHashCode()*397) ^ (amount_paid != null ? amount_paid.GetHashCode() : 0);
45            }
46        }
47    }
48}