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.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.atlas.data.analysis.buckets.MoneyWiseXAnalysis;
27 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisPortfolioBucket;
28 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisPortfolioBucket.MoneyWiseXAnalysisPortfolioBucketList;
29 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisSecurityBucket;
30 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisSecurityBucket.MoneyWiseXAnalysisSecurityBucketList;
31 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityAttr;
32 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisSecurityValues;
33 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisValuesResource;
34 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter;
35 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter.MoneyWiseXAnalysisSecurityFilter;
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 MoneyWiseXReportAssetGains
45 extends MetisReportBase<MoneyWiseXAnalysis, MoneyWiseXAnalysisFilter<?, ?>> {
46
47
48
49 private static final String TEXT_TITLE = MoneyWiseXReportResource.ASSETGAINS_TITLE.getValue();
50
51
52
53
54 private static final String TEXT_COST = MoneyWiseXAnalysisValuesResource.SECURITYATTR_RESIDUALCOST.getValue();
55
56
57
58
59 private static final String TEXT_VALUE = MoneyWiseXAnalysisValuesResource.ACCOUNTATTR_VALUATION.getValue();
60
61
62
63
64 private static final String TEXT_GAINS = MoneyWiseXAnalysisValuesResource.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 MoneyWiseXReportAssetGains(final MetisReportManager<MoneyWiseXAnalysisFilter<?, ?>> pManager) {
82
83 theBuilder = pManager.getBuilder();
84 theFormatter = theBuilder.getDataFormatter();
85 }
86
87 @Override
88 public Document createReport(final MoneyWiseXAnalysis pAnalysis) {
89
90 final MoneyWiseXAnalysisPortfolioBucketList myPortfolios = pAnalysis.getPortfolios();
91 final OceanusDate myDate = pAnalysis.getDateRange().getEnd();
92
93
94 final MoneyWiseXAnalysisPortfolioBucket 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<MoneyWiseXAnalysisPortfolioBucket> myIterator = myPortfolios.iterator();
110 while (myIterator.hasNext()) {
111 final MoneyWiseXAnalysisPortfolioBucket myBucket = myIterator.next();
112
113
114 final String myName = myBucket.getName();
115
116
117 final MoneyWiseXAnalysisSecurityValues 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(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST));
126 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS));
127
128
129 setDelayedTable(myName, myTable, myBucket);
130 }
131
132
133 final MoneyWiseXAnalysisSecurityValues myValues = myTotals.getValues();
134
135
136 theBuilder.startTotalRow(myTable);
137 theBuilder.makeTitleCell(myTable, MoneyWiseXReportBuilder.TEXT_TOTAL);
138 theBuilder.makeTotalCell(myTable, myTotals.getNonCashValue(false));
139 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST));
140 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.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 MoneyWiseXAnalysisPortfolioBucket 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 MoneyWiseXAnalysisPortfolioBucket pSource) {
167
168 final MoneyWiseXAnalysisSecurityBucketList mySecurities = pSource.getSecurities();
169
170
171 final MetisHTMLTable myTable = theBuilder.createEmbeddedTable(pParent);
172
173
174 final Iterator<MoneyWiseXAnalysisSecurityBucket> myIterator = mySecurities.iterator();
175 while (myIterator.hasNext()) {
176 final MoneyWiseXAnalysisSecurityBucket myBucket = myIterator.next();
177
178
179 final String myName = myBucket.getSecurityName();
180 String myFullName = myBucket.getDecoratedName();
181 myFullName = myFullName.replace(':', '-');
182
183
184 final MoneyWiseXAnalysisSecurityValues myValues = myBucket.getValues();
185
186
187 theBuilder.startRow(myTable);
188 theBuilder.makeFilterLinkCell(myTable, myFullName, myName);
189 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.VALUATION));
190 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST));
191 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS));
192
193
194 setFilterForId(myFullName, myBucket);
195 }
196
197
198 return myTable;
199 }
200
201 @Override
202 public MoneyWiseXAnalysisFilter<?, ?> processFilter(final Object pSource) {
203 if (pSource instanceof MoneyWiseXAnalysisSecurityBucket mySource) {
204
205 return new MoneyWiseXAnalysisSecurityFilter(mySource);
206 }
207 return null;
208 }
209 }