main
 1using System;
 2using Gorilla.Commons.Utility;
 3using MoMoney.Domain.Core;
 4
 5namespace MoMoney.Domain.Accounting
 6{
 7    public interface IIncome : Entity
 8    {
 9        Date date_of_issue { get; }
10        Money amount_tendered { get; }
11        ICompany company { get; }
12    }
13
14    [Serializable]
15    internal class Income : GenericEntity<IIncome>, IIncome
16    {
17        public Income(Date date_of_issue, Money amount_tendered, ICompany company)
18        {
19            this.company = company;
20            this.amount_tendered = amount_tendered;
21            this.date_of_issue = date_of_issue;
22        }
23
24        public ICompany company { get; private set; }
25        public Money amount_tendered { get; private set; }
26        public Date date_of_issue { get; private set; }
27
28        public bool Equals(Income obj)
29        {
30            if (ReferenceEquals(null, obj)) return false;
31            if (ReferenceEquals(this, obj)) return true;
32            return Equals(obj.company, company) && Equals(obj.amount_tendered, amount_tendered) &&
33                   Equals(obj.date_of_issue, date_of_issue);
34        }
35
36        public override bool Equals(object obj)
37        {
38            if (ReferenceEquals(null, obj)) return false;
39            if (ReferenceEquals(this, obj)) return true;
40            if (obj.GetType() != typeof (Income)) return false;
41            return Equals((Income) obj);
42        }
43
44        public override int GetHashCode()
45        {
46            unchecked
47            {
48                var result = (company != null ? company.GetHashCode() : 0);
49                result = (result*397) ^ (amount_tendered != null ? amount_tendered.GetHashCode() : 0);
50                result = (result*397) ^ (date_of_issue != null ? date_of_issue.GetHashCode() : 0);
51                return result;
52            }
53        }
54    }
55}