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