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.OceanusDateRange;
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.MoneyWiseXAnalysisPayeeBucket;
28 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.buckets.MoneyWiseXAnalysisPayeeBucket.MoneyWiseXAnalysisPayeeBucketList;
29 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisPayeeAttr;
30 import io.github.tonywasher.joceanus.moneywise.atlas.data.analysis.values.MoneyWiseXAnalysisPayeeValues;
31 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter;
32 import io.github.tonywasher.joceanus.moneywise.atlas.views.MoneyWiseXAnalysisFilter.MoneyWiseXAnalysisPayeeFilter;
33 import org.w3c.dom.Document;
34 import org.w3c.dom.Element;
35
36 import java.util.Iterator;
37
38
39
40
41 public class MoneyWiseXReportCashFlow
42 extends MetisReportBase<MoneyWiseXAnalysis, MoneyWiseXAnalysisFilter<?, ?>> {
43
44
45
46 private static final String TEXT_TITLE = MoneyWiseXReportResource.CASHFLOW_TITLE.getValue();
47
48
49
50
51 private final MetisReportHTMLBuilder theBuilder;
52
53
54
55
56 private final OceanusDataFormatter theFormatter;
57
58
59
60
61
62
63 MoneyWiseXReportCashFlow(final MetisReportManager<MoneyWiseXAnalysisFilter<?, ?>> pManager) {
64
65 theBuilder = pManager.getBuilder();
66 theFormatter = theBuilder.getDataFormatter();
67 }
68
69 @Override
70 public Document createReport(final MoneyWiseXAnalysis pAnalysis) {
71
72 final MoneyWiseXAnalysisPayeeBucketList myPayees = pAnalysis.getPayees();
73 final OceanusDateRange myRange = pAnalysis.getDateRange();
74
75
76 final MoneyWiseXAnalysisPayeeBucket myTotals = myPayees.getTotals();
77
78
79 final Element myBody = theBuilder.startReport();
80 theBuilder.makeTitle(myBody, TEXT_TITLE, theFormatter.formatObject(myRange));
81
82
83 final MetisHTMLTable myTable = theBuilder.startTable(myBody);
84 theBuilder.startHdrRow(myTable);
85 theBuilder.makeTotalCell(myTable);
86 theBuilder.makeTitleCell(myTable, MoneyWiseXReportBuilder.TEXT_INCOME);
87 theBuilder.makeTitleCell(myTable, MoneyWiseXReportBuilder.TEXT_EXPENSE);
88 theBuilder.makeTitleCell(myTable, MoneyWiseXReportBuilder.TEXT_PROFIT);
89
90
91 final Iterator<MoneyWiseXAnalysisPayeeBucket> myIterator = myPayees.iterator();
92 while (myIterator.hasNext()) {
93 final MoneyWiseXAnalysisPayeeBucket myBucket = myIterator.next();
94
95
96 final String myName = myBucket.getName();
97
98
99 final MoneyWiseXAnalysisPayeeValues myValues = myBucket.getValues();
100
101
102 theBuilder.startRow(myTable);
103 theBuilder.makeFilterLinkCell(myTable, myName);
104 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.INCOME));
105 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.EXPENSE));
106 theBuilder.makeValueCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.PROFIT));
107
108
109 setFilterForId(myName, myBucket);
110 }
111
112
113 final MoneyWiseXAnalysisPayeeValues myValues = myTotals.getValues();
114
115
116 theBuilder.startTotalRow(myTable);
117 theBuilder.makeTitleCell(myTable, MoneyWiseXReportBuilder.TEXT_TOTAL);
118 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.INCOME));
119 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.EXPENSE));
120 theBuilder.makeTotalCell(myTable, myValues.getMoneyValue(MoneyWiseXAnalysisPayeeAttr.PROFIT));
121
122
123 return theBuilder.getDocument();
124 }
125
126 @Override
127 public MoneyWiseXAnalysisPayeeFilter processFilter(final Object pSource) {
128
129 if (pSource instanceof MoneyWiseXAnalysisPayeeBucket mySource) {
130
131 return new MoneyWiseXAnalysisPayeeFilter(mySource);
132 }
133 return null;
134 }
135
136 @Override
137 public MetisHTMLTable createDelayedTable(final DelayedTable pTable) {
138 return null;
139 }
140 }