main
 1using System;
 2using System.Collections.Generic;
 3using System.Collections.ObjectModel;
 4using System.Linq;
 5using solidware.financials.windows.ui.model;
 6using solidware.financials.windows.ui.views.controls;
 7
 8namespace solidware.financials.windows.ui.presenters
 9{
10    public class TaxesForFamily
11    {
12        public TaxesForFamily()
13        {
14            Income = Money.Null;
15            ProvincialTaxes = Money.Null;
16            FederalTaxes = Money.Null;
17            Chart = new ObservableCollection<KeyValuePair<string, decimal>>();
18        }
19
20        public Observable<Money> Income { get; set; }
21        public Observable<Money> ProvincialTaxes { get; set; }
22        public Observable<Money> FederalTaxes { get; set; }
23        public ICollection<KeyValuePair<string, decimal>> Chart { get; set; }
24
25        public TaxesForIndividual TaxesFor(Guid id)
26        {
27            if (!family.ContainsKey(id))
28                family[id] = new TaxesForIndividual(id, new FederalTaxesViewModel(id), new ProvincialTaxesViewModel(id));
29            return family[id];
30        }
31
32        public void AddIncomeFor(Guid personId, decimal amount)
33        {
34            TaxesFor(personId).AddIncome(amount);
35            Income.Value = family.Values.Sum(x => x.Income.Value);
36            ProvincialTaxes.Value = family.Values.Sum(x => x.ProvincialTaxes.Taxes.Value);
37            FederalTaxes.Value = family.Values.Sum(x => x.FederalTaxes.Taxes.Value);
38
39            RefreshChart();
40        }
41
42        void RefreshChart()
43        {
44            Chart.Clear();
45            Chart.Add(new KeyValuePair<string, decimal>("Income", Income.Value));
46            Chart.Add(new KeyValuePair<string, decimal>("Federal", FederalTaxes.Value));
47            Chart.Add(new KeyValuePair<string, decimal>("Provincial", ProvincialTaxes.Value));
48        }
49
50        IDictionary<Guid, TaxesForIndividual> family = new Dictionary<Guid, TaxesForIndividual>();
51    }
52}