1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.data.validate;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseAssetBase;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataValidator.MoneyWiseDataValidatorAutoCorrect;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee.MoneyWisePayeeList;
26 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio.MoneyWisePortfolioDataMap;
28 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio.MoneyWisePortfolioList;
29 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityHolding;
30 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
31 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWisePayeeClass;
32 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWisePortfolioClass;
33 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWisePortfolioType;
34 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWisePortfolioType.MoneyWisePortfolioTypeList;
35 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
36 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
37 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
38 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
39
40 import java.util.Iterator;
41
42
43
44
45 public class MoneyWiseValidatePortfolio
46 extends MoneyWiseValidateAccount<MoneyWisePortfolio>
47 implements MoneyWiseDataValidatorAutoCorrect<MoneyWisePortfolio> {
48
49
50
51 private static final String NAME_NEWACCOUNT = MoneyWiseBasicResource.PORTFOLIO_NEWACCOUNT.getValue();
52
53
54
55
56 static final String NAME_CASHACCOUNT = MoneyWiseBasicResource.PORTFOLIO_CASHACCOUNT.getValue();
57
58
59
60
61 private final MoneyWiseValidatePortfolioInfoSet theInfoSet;
62
63
64
65
66 MoneyWiseValidatePortfolio() {
67 theInfoSet = new MoneyWiseValidatePortfolioInfoSet();
68 }
69
70 @Override
71 public void setEditSet(final PrometheusEditSet pEditSet) {
72 super.setEditSet(pEditSet);
73 theInfoSet.storeEditSet(pEditSet);
74 }
75
76 @Override
77 public void validate(final PrometheusDataItem pPortfolio) {
78 final MoneyWisePortfolio myPortfolio = (MoneyWisePortfolio) pPortfolio;
79 final MoneyWisePortfolioList myList = myPortfolio.getList();
80 final MoneyWisePayee myParent = myPortfolio.getParent();
81 final MoneyWisePortfolioType myPortType = myPortfolio.getCategory();
82 final MoneyWiseCurrency myCurrency = myPortfolio.getAssetCurrency();
83
84
85 super.validate(pPortfolio);
86
87
88 if (myPortType == null) {
89 pPortfolio.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.CATEGORY_NAME);
90 } else {
91
92 final MoneyWisePortfolioClass myClass = myPortType.getPortfolioClass();
93
94
95 if (!myPortType.getEnabled()) {
96 pPortfolio.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseBasicResource.CATEGORY_NAME);
97 }
98
99
100 if (myClass.isSingular()) {
101
102 final MoneyWisePortfolioDataMap myMap = myList.getDataMap();
103 if (!myMap.validSingularCount(myClass)) {
104 pPortfolio.addError(PrometheusDataItem.ERROR_MULT, MoneyWiseBasicResource.CATEGORY_NAME);
105 }
106 }
107 }
108
109
110 if (myParent == null) {
111 pPortfolio.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.ASSET_PARENT);
112 } else {
113
114 final MoneyWisePayeeClass myParClass = myParent.getCategoryClass();
115 if (!myParClass.canParentPortfolio()) {
116 pPortfolio.addError(ERROR_BADPARENT, MoneyWiseBasicResource.ASSET_PARENT);
117 }
118
119
120 if (!myPortfolio.isClosed() && Boolean.TRUE.equals(myParent.isClosed())) {
121 pPortfolio.addError(ERROR_PARCLOSED, MoneyWiseBasicResource.ASSET_CLOSED);
122 }
123 }
124
125
126 if (myCurrency == null) {
127 pPortfolio.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseStaticDataType.CURRENCY);
128 } else if (!myCurrency.getEnabled()) {
129 pPortfolio.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseStaticDataType.CURRENCY);
130 }
131
132
133 if (myPortfolio.getInfoSet() != null) {
134
135 theInfoSet.validate(myPortfolio.getInfoSet());
136 }
137
138
139 if (!pPortfolio.hasErrors()) {
140 pPortfolio.setValidEdit();
141 }
142 }
143
144 @Override
145 public void validateName(final MoneyWiseAssetBase pPortfolio,
146 final String pName) {
147
148 super.validateName(pPortfolio, pName);
149
150
151 if (pName.contains(MoneyWiseSecurityHolding.SECURITYHOLDING_SEP)) {
152 pPortfolio.addError(PrometheusDataItem.ERROR_INVALIDCHAR, PrometheusDataResource.DATAITEM_FIELD_NAME);
153 }
154 }
155
156 @Override
157 public void setDefaults(final MoneyWisePortfolio pPortfolio) throws OceanusException {
158
159 final MoneyWisePortfolioList myList = pPortfolio.getList();
160 pPortfolio.setName(getUniqueName(myList, NAME_NEWACCOUNT));
161 pPortfolio.setCategory(getDefaultPortfolioType());
162 pPortfolio.setParent(getDefaultParent());
163 pPortfolio.setAssetCurrency(getReportingCurrency());
164 pPortfolio.setClosed(Boolean.FALSE);
165 }
166
167 @Override
168 public void autoCorrect(final MoneyWisePortfolio pPortfolio) throws OceanusException {
169
170 final MoneyWisePayee myParent = pPortfolio.getParent();
171 if (myParent == null
172 || !myParent.getCategoryClass().canParentPortfolio()) {
173 pPortfolio.setParent(getDefaultParent());
174 }
175
176
177 theInfoSet.autoCorrect(pPortfolio.getInfoSet());
178 }
179
180
181
182
183
184
185 private MoneyWisePayee getDefaultParent() {
186
187 final MoneyWisePayeeList myPayees = getEditSet().getDataList(MoneyWiseBasicDataType.PAYEE, MoneyWisePayeeList.class);
188 final Iterator<MoneyWisePayee> myIterator = myPayees.iterator();
189 while (myIterator.hasNext()) {
190 final MoneyWisePayee myPayee = myIterator.next();
191
192
193 boolean bIgnore = myPayee.isDeleted() || myPayee.isClosed();
194 bIgnore |= !myPayee.getCategoryClass().canParentPortfolio();
195 if (!bIgnore) {
196 return myPayee;
197 }
198 }
199
200
201 return null;
202 }
203
204
205
206
207
208
209 private MoneyWisePortfolioType getDefaultPortfolioType() {
210
211 final MoneyWisePortfolioTypeList myTypes
212 = getEditSet().getDataList(MoneyWiseStaticDataType.PORTFOLIOTYPE, MoneyWisePortfolioTypeList.class);
213 final Iterator<MoneyWisePortfolioType> myIterator = myTypes.iterator();
214 while (myIterator.hasNext()) {
215 final MoneyWisePortfolioType myType = myIterator.next();
216
217
218 if (!myType.isDeleted()) {
219 return myType;
220 }
221 }
222
223
224 return null;
225 }
226 }