main
 1using System;
 2using System.Collections.Generic;
 3using gorilla.commons.utility;
 4using Gorilla.Commons.Utility;
 5using MoMoney.Domain.Accounting;
 6using MoMoney.Domain.Core;
 7
 8namespace MoMoney.Domain.accounting
 9{
10    public interface IAccountHolder : Entity
11    {
12        void receive(IBill bill);
13        void receive(IIncome income);
14        IEnumerable<IBill> collect_all_the_unpaid_bills();
15        Money calculate_income_for(Year year);
16    }
17
18    [Serializable]
19    public class AccountHolder : GenericEntity<IAccountHolder>, IAccountHolder
20    {
21        IList<IBill> all_bills { get; set; }
22        IList<IIncome> income_collected { get; set; }
23
24        public AccountHolder()
25        {
26            all_bills = new List<IBill>();
27            income_collected = new List<IIncome>();
28        }
29
30        public void receive(IBill bill)
31        {
32            all_bills.Add(bill);
33        }
34
35        public IEnumerable<IBill> collect_all_the_unpaid_bills()
36        {
37            return all_bills.where(bill => bill.is_not_paid());
38        }
39
40        public Money calculate_income_for(Year year)
41        {
42            return income_collected.in_the(year);
43        }
44
45        public void receive(IIncome income)
46        {
47            income_collected.Add(income);
48        }
49    }
50}