1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.lethe.reports;
18
19 import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
20 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
21 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
22 import io.github.tonywasher.joceanus.metis.report.MetisReportBase;
23 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder;
24 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder.MetisHTMLTable;
25 import io.github.tonywasher.joceanus.metis.report.MetisReportManager;
26 import io.github.tonywasher.joceanus.metis.report.MetisReportReferenceManager.DelayedTable;
27 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysis;
28 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisTaxBasisAccountBucket;
29 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisTaxBasisBucket;
30 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisTaxBasisBucket.MoneyWiseAnalysisTaxBasisBucketList;
31 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisTaxBasisAttr;
32 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisTaxBasisValues;
33 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisValuesResource;
34 import io.github.tonywasher.joceanus.moneywise.lethe.views.MoneyWiseAnalysisFilter;
35 import io.github.tonywasher.joceanus.moneywise.lethe.views.MoneyWiseAnalysisFilter.MoneyWiseAnalysisTaxBasisFilter;
36 import org.w3c.dom.Document;
37 import org.w3c.dom.Element;
38
39 import java.util.Iterator;
40
41
42
43
44 public class MoneyWiseReportTaxationBasis
45 extends MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>> {
46
47
48
49 private static final String TEXT_TITLE = MoneyWiseReportResource.TAXBASIS_TITLE.getValue();
50
51
52
53
54 private static final String TEXT_NETT = MoneyWiseAnalysisValuesResource.TAXATTR_NETT.getValue();
55
56
57
58
59 private static final String TEXT_GROSS = MoneyWiseAnalysisValuesResource.TAXATTR_GROSS.getValue();
60
61
62
63
64 private final MetisReportHTMLBuilder theBuilder;
65
66
67
68
69 private final OceanusDataFormatter theFormatter;
70
71
72
73
74
75
76 protected MoneyWiseReportTaxationBasis(final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> pManager) {
77
78 theBuilder = pManager.getBuilder();
79 theFormatter = theBuilder.getDataFormatter();
80 }
81
82 @Override
83 public Document createReport(final MoneyWiseAnalysis pAnalysis) {
84
85 final MoneyWiseAnalysisTaxBasisBucketList myTaxBasis = pAnalysis.getTaxBasis();
86 final OceanusDateRange myRange = pAnalysis.getDateRange();
87
88
89 final MoneyWiseAnalysisTaxBasisBucket myTotals = myTaxBasis.getTotals();
90
91
92 final Element myBody = theBuilder.startReport();
93 theBuilder.makeTitle(myBody, TEXT_TITLE, theFormatter.formatObject(myRange));
94
95
96 final MetisHTMLTable myTable = theBuilder.startTable(myBody);
97 theBuilder.startHdrRow(myTable);
98 theBuilder.makeTitleCell(myTable);
99 theBuilder.makeTitleCell(myTable, TEXT_NETT);
100 theBuilder.makeTitleCell(myTable, TEXT_GROSS);
101
102
103 final Iterator<MoneyWiseAnalysisTaxBasisBucket> myIterator = myTaxBasis.iterator();
104 while (myIterator.hasNext()) {
105 final MoneyWiseAnalysisTaxBasisBucket myBucket = myIterator.next();
106
107
108 final boolean hasAccounts = myBucket.hasAccounts();
109
110
111 final MoneyWiseAnalysisTaxBasisValues myValues = myBucket.getValues();
112 final OceanusMoney myGross = myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.GROSS);
113 final OceanusMoney myNett = myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.NETT);
114
115
116 if (myGross.isNonZero()) {
117
118 final String myName = myBucket.getName();
119
120
121 theBuilder.startRow(myTable);
122 if (hasAccounts) {
123 theBuilder.makeDelayLinkCell(myTable, myName);
124 } else {
125 theBuilder.makeFilterLinkCell(myTable, myName);
126 }
127 theBuilder.makeValueCell(myTable, myNett);
128 theBuilder.makeValueCell(myTable, myGross);
129
130
131 if (hasAccounts) {
132 setDelayedTable(myName, myTable, myBucket);
133 } else {
134 setFilterForId(myName, myBucket);
135 }
136 }
137 }
138
139
140 final MoneyWiseAnalysisTaxBasisValues myValues = myTotals.getValues();
141
142
143 theBuilder.startTotalRow(myTable);
144 theBuilder.makeTitleCell(myTable, MoneyWiseReportBuilder.TEXT_TOTAL);
145 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.NETT));
146 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.GROSS));
147
148
149 return theBuilder.getDocument();
150 }
151
152 @Override
153 public MetisHTMLTable createDelayedTable(final DelayedTable pTable) {
154
155 final Object mySource = pTable.getSource();
156 if (mySource instanceof MoneyWiseAnalysisTaxBasisBucket mySourceBucket) {
157 return createDelayedAccounts(pTable.getParent(), mySourceBucket);
158 }
159
160
161 return null;
162 }
163
164
165
166
167
168
169
170
171 protected MetisHTMLTable createDelayedAccounts(final MetisHTMLTable pParent,
172 final MoneyWiseAnalysisTaxBasisBucket pSource) {
173
174 final MetisHTMLTable myTable = theBuilder.createEmbeddedTable(pParent);
175
176
177 final Iterator<MoneyWiseAnalysisTaxBasisAccountBucket> myIterator = pSource.accountIterator();
178 while (myIterator.hasNext()) {
179 final MoneyWiseAnalysisTaxBasisAccountBucket myBucket = myIterator.next();
180
181
182 final String myName = myBucket.getName();
183 final String mySimpleName = myBucket.getSimpleName();
184
185
186 final MoneyWiseAnalysisTaxBasisValues myValues = myBucket.getValues();
187
188
189 theBuilder.startRow(myTable);
190 theBuilder.makeFilterLinkCell(myTable, myName, mySimpleName);
191 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.NETT));
192 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisTaxBasisAttr.GROSS));
193
194
195 setFilterForId(myName, myBucket);
196 }
197
198
199 return myTable;
200 }
201
202 @Override
203 public MoneyWiseAnalysisFilter<?, MoneyWiseAnalysisTaxBasisAttr> processFilter(final Object pSource) {
204 if (pSource instanceof MoneyWiseAnalysisTaxBasisBucket mySource) {
205
206 return new MoneyWiseAnalysisTaxBasisFilter(mySource);
207 }
208 return null;
209 }
210 }