1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.atlas.reports;
18
19 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
20 import io.github.tonywasher.joceanus.metis.report.MetisReportBase;
21 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder;
22 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder.MetisHTMLTable;
23 import io.github.tonywasher.joceanus.metis.report.MetisReportManager;
24 import io.github.tonywasher.joceanus.metis.report.MetisReportReferenceManager.DelayedTable;
25 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysis;
26 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
28 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticResource;
29 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseTaxClass;
30 import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxAnalysis;
31 import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxDueBucket;
32 import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxDueBucket.MoneyWiseTaxBandBucket;
33 import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxResource;
34 import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxYear;
35 import org.w3c.dom.Document;
36 import org.w3c.dom.Element;
37
38 import java.util.Iterator;
39
40
41
42
43 public class MoneyWiseXReportTaxCalculation
44 extends MetisReportBase<MoneyWiseXAnalysis, MoneyWiseXAnalysisFilter<?, ?>> {
45
46
47
48 private static final String TEXT_TITLE = MoneyWiseXReportResource.TAXCALC_TITLE.getValue();
49
50
51
52
53 private static final String TEXT_INCOME = MoneyWiseTaxResource.TAXBANDS_INCOME.getValue();
54
55
56
57
58 private static final String TEXT_RATE = MoneyWiseBasicResource.MONEYWISEDATA_FIELD_RATE.getValue();
59
60
61
62
63 private static final String TEXT_TAXDUE = MoneyWiseTaxResource.TAXBANDS_TAXDUE.getValue();
64
65
66
67
68 private static final String TEXT_PROFIT = MoneyWiseTaxResource.TAXYEAR_PROFIT.getValue();
69
70
71
72
73 private final MetisReportHTMLBuilder theBuilder;
74
75
76
77
78 private final OceanusDataFormatter theFormatter;
79
80
81
82
83
84
85 MoneyWiseXReportTaxCalculation(final MetisReportManager<MoneyWiseXAnalysisFilter<?, ?>> pManager) {
86
87 theBuilder = pManager.getBuilder();
88 theFormatter = theBuilder.getDataFormatter();
89 }
90
91
92
93
94
95
96
97 @Override
98 public Document createReport(final MoneyWiseXAnalysis pAnalysis) {
99
100 final MoneyWiseTaxAnalysis myTaxAnalysis = pAnalysis.getTaxAnalysis();
101 final MoneyWiseTaxYear myYear = myTaxAnalysis.getTaxYear();
102
103
104 final Element myBody = theBuilder.startReport();
105 theBuilder.makeTitle(myBody, TEXT_TITLE, theFormatter.formatObject(myYear.getYearEnd()));
106
107
108 final MetisHTMLTable myTable = theBuilder.startTable(myBody);
109 theBuilder.startHdrRow(myTable);
110 theBuilder.makeTitleCell(myTable, MoneyWiseStaticResource.TAXBASIS_NAME.getValue());
111 theBuilder.makeTitleCell(myTable, TEXT_INCOME);
112 theBuilder.makeTitleCell(myTable, TEXT_TAXDUE);
113
114
115 final Iterator<MoneyWiseTaxDueBucket> myTaxIterator = myTaxAnalysis.taxDueIterator();
116 while (myTaxIterator.hasNext()) {
117 final MoneyWiseTaxDueBucket myBucket = myTaxIterator.next();
118
119
120 theBuilder.startRow(myTable);
121 theBuilder.makeTableLinkCell(myTable, myBucket.getTaxBasis().toString());
122 theBuilder.makeValueCell(myTable, myBucket.getTaxableIncome());
123 theBuilder.makeValueCell(myTable, myBucket.getTaxDue());
124
125
126 makeTaxReport(myTable, myBucket);
127 }
128
129
130 theBuilder.startTotalRow(myTable);
131 theBuilder.makeTotalCell(myTable, MoneyWiseXReportBuilder.TEXT_TOTAL);
132 theBuilder.makeTotalCell(myTable, myTaxAnalysis.getTaxableIncome());
133 theBuilder.makeTotalCell(myTable, myTaxAnalysis.getTaxDue());
134 theBuilder.startTotalRow(myTable);
135 theBuilder.makeTotalCell(myTable, MoneyWiseTaxClass.TAXPAID.toString());
136 theBuilder.makeStretchedTotalCell(myTable, myTaxAnalysis.getTaxPaid());
137 theBuilder.startTotalRow(myTable);
138 theBuilder.makeTotalCell(myTable, TEXT_PROFIT);
139 theBuilder.makeStretchedTotalCell(myTable, myTaxAnalysis.getTaxProfit());
140
141
142 return theBuilder.getDocument();
143 }
144
145
146
147
148
149
150
151 public void makeTaxReport(final MetisHTMLTable pParent,
152 final MoneyWiseTaxDueBucket pSummary) {
153
154 final MetisHTMLTable myTable = theBuilder.createEmbeddedTable(pParent);
155 theBuilder.startRow(myTable);
156 theBuilder.makeTitleCell(myTable, TEXT_INCOME);
157 theBuilder.makeTitleCell(myTable, TEXT_RATE);
158 theBuilder.makeTitleCell(myTable, TEXT_TAXDUE);
159
160
161 final Iterator<MoneyWiseTaxBandBucket> myIterator = pSummary.taxBandIterator();
162 while (myIterator.hasNext()) {
163 final MoneyWiseTaxBandBucket myBucket = myIterator.next();
164
165
166 theBuilder.startRow(myTable);
167 theBuilder.makeValueCell(myTable, myBucket.getAmount());
168 theBuilder.makeValueCell(myTable, myBucket.getRate());
169 theBuilder.makeValueCell(myTable, myBucket.getTaxDue());
170 }
171
172
173 theBuilder.embedTable(myTable, pSummary.getTaxBasis().toString());
174 }
175
176 @Override
177 public MoneyWiseXAnalysisFilter<?, ?> processFilter(final Object pSource) {
178 return null;
179 }
180
181 @Override
182 public MetisHTMLTable createDelayedTable(final DelayedTable pTable) {
183 return null;
184 }
185 }