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.OceanusDate;
20 import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
21 import io.github.tonywasher.joceanus.metis.report.MetisReportBase;
22 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder;
23 import io.github.tonywasher.joceanus.metis.report.MetisReportHTMLBuilder.MetisHTMLTable;
24 import io.github.tonywasher.joceanus.metis.report.MetisReportManager;
25 import io.github.tonywasher.joceanus.metis.report.MetisReportReferenceManager.DelayedTable;
26 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysis;
27 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisPortfolioBucket;
28 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisPortfolioBucket.MoneyWiseAnalysisPortfolioBucketList;
29 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisSecurityBucket;
30 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.data.MoneyWiseAnalysisSecurityBucket.MoneyWiseAnalysisSecurityBucketList;
31 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisSecurityAttr;
32 import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.values.MoneyWiseAnalysisSecurityValues;
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.MoneyWiseAnalysisSecurityFilter;
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 MoneyWiseReportAssetGains
45 extends MetisReportBase<MoneyWiseAnalysis, MoneyWiseAnalysisFilter<?, ?>> {
46
47
48
49 private static final String TEXT_TITLE = MoneyWiseReportResource.ASSETGAINS_TITLE.getValue();
50
51
52
53
54 private static final String TEXT_COST = MoneyWiseAnalysisValuesResource.SECURITYATTR_RESIDUALCOST.getValue();
55
56
57
58
59 private static final String TEXT_VALUE = MoneyWiseAnalysisValuesResource.ACCOUNTATTR_VALUATION.getValue();
60
61
62
63
64 private static final String TEXT_GAINS = MoneyWiseAnalysisValuesResource.SECURITYATTR_REALISEDGAINS.getValue();
65
66
67
68
69 private final MetisReportHTMLBuilder theBuilder;
70
71
72
73
74 private final OceanusDataFormatter theFormatter;
75
76
77
78
79
80
81 protected MoneyWiseReportAssetGains(final MetisReportManager<MoneyWiseAnalysisFilter<?, ?>> pManager) {
82
83 theBuilder = pManager.getBuilder();
84 theFormatter = theBuilder.getDataFormatter();
85 }
86
87 @Override
88 public Document createReport(final MoneyWiseAnalysis pAnalysis) {
89
90 final MoneyWiseAnalysisPortfolioBucketList myPortfolios = pAnalysis.getPortfolios();
91 final OceanusDate myDate = pAnalysis.getDateRange().getEnd();
92
93
94 final MoneyWiseAnalysisPortfolioBucket myTotals = myPortfolios.getTotals();
95
96
97 final Element myBody = theBuilder.startReport();
98 theBuilder.makeTitle(myBody, TEXT_TITLE, theFormatter.formatObject(myDate));
99
100
101 final MetisHTMLTable myTable = theBuilder.startTable(myBody);
102 theBuilder.startHdrRow(myTable);
103 theBuilder.makeTitleCell(myTable);
104 theBuilder.makeTitleCell(myTable, TEXT_VALUE);
105 theBuilder.makeTitleCell(myTable, TEXT_COST);
106 theBuilder.makeTitleCell(myTable, TEXT_GAINS);
107
108
109 final Iterator<MoneyWiseAnalysisPortfolioBucket> myIterator = myPortfolios.iterator();
110 while (myIterator.hasNext()) {
111 final MoneyWiseAnalysisPortfolioBucket myBucket = myIterator.next();
112
113
114 final String myName = myBucket.getName();
115
116
117 final MoneyWiseAnalysisSecurityValues myValues = myBucket.getValues();
118
119
120 theBuilder.startRow(myTable);
121 theBuilder.makeDelayLinkCell(myTable, myName);
122
123
124 theBuilder.makeValueCell(myTable, myBucket.getNonCashValue(false));
125 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.RESIDUALCOST));
126 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.REALISEDGAINS));
127
128
129 setDelayedTable(myName, myTable, myBucket);
130 }
131
132
133 final MoneyWiseAnalysisSecurityValues myValues = myTotals.getValues();
134
135
136 theBuilder.startTotalRow(myTable);
137 theBuilder.makeTitleCell(myTable, MoneyWiseReportBuilder.TEXT_TOTAL);
138 theBuilder.makeTotalCell(myTable, myTotals.getNonCashValue(false));
139 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.RESIDUALCOST));
140 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.REALISEDGAINS));
141
142
143 return theBuilder.getDocument();
144 }
145
146 @Override
147 public MetisHTMLTable createDelayedTable(final DelayedTable pTable) {
148
149 final Object mySource = pTable.getSource();
150 if (mySource instanceof MoneyWiseAnalysisPortfolioBucket mySourceBucket) {
151 return createDelayedPortfolio(pTable.getParent(), mySourceBucket);
152 }
153
154
155 return null;
156 }
157
158
159
160
161
162
163
164
165 private MetisHTMLTable createDelayedPortfolio(final MetisHTMLTable pParent,
166 final MoneyWiseAnalysisPortfolioBucket pSource) {
167
168 final MoneyWiseAnalysisSecurityBucketList mySecurities = pSource.getSecurities();
169
170
171 final MetisHTMLTable myTable = theBuilder.createEmbeddedTable(pParent);
172
173
174 final Iterator<MoneyWiseAnalysisSecurityBucket> myIterator = mySecurities.iterator();
175 while (myIterator.hasNext()) {
176 final MoneyWiseAnalysisSecurityBucket myBucket = myIterator.next();
177
178
179 final String myName = myBucket.getSecurityName();
180 String myFullName = myBucket.getDecoratedName();
181 myFullName = myFullName.replace(':', '-');
182
183
184 final MoneyWiseAnalysisSecurityValues myValues = myBucket.getValues();
185
186
187 theBuilder.startRow(myTable);
188 theBuilder.makeFilterLinkCell(myTable, myFullName, myName);
189 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.VALUATION));
190 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.RESIDUALCOST));
191 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseAnalysisSecurityAttr.REALISEDGAINS));
192
193
194 setFilterForId(myFullName, myBucket);
195 }
196
197
198 return myTable;
199 }
200
201 @Override
202 public MoneyWiseAnalysisFilter<?, ?> processFilter(final Object pSource) {
203 if (pSource instanceof MoneyWiseAnalysisSecurityBucket mySource) {
204
205 return new MoneyWiseAnalysisSecurityFilter(mySource);
206 }
207 return null;
208 }
209 }