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.MoneyWiseBasicDataType;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDataValidator.MoneyWiseDataValidatorAutoCorrect;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDeposit;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDeposit.MoneyWiseDepositList;
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositCategory;
26 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositCategory.MoneyWiseDepositCategoryList;
27 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee;
28 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee.MoneyWisePayeeList;
29 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
30 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseDepositCategoryClass;
31 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
32 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
33 import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
34
35 import java.util.Iterator;
36
37
38
39
40 public class MoneyWiseValidateDeposit
41 extends MoneyWiseValidateAccount<MoneyWiseDeposit>
42 implements MoneyWiseDataValidatorAutoCorrect<MoneyWiseDeposit> {
43
44
45
46 private static final String NAME_NEWACCOUNT = MoneyWiseBasicResource.DEPOSIT_NEWACCOUNT.getValue();
47
48
49
50
51 private final MoneyWiseValidateDepositInfoSet theInfoSet;
52
53
54
55
56 MoneyWiseValidateDeposit() {
57 theInfoSet = new MoneyWiseValidateDepositInfoSet();
58 }
59
60 @Override
61 public void setEditSet(final PrometheusEditSet pEditSet) {
62 super.setEditSet(pEditSet);
63 theInfoSet.storeEditSet(pEditSet);
64 }
65
66 @Override
67 public void validate(final PrometheusDataItem pDeposit) {
68 final MoneyWiseDeposit myDeposit = (MoneyWiseDeposit) pDeposit;
69 final MoneyWisePayee myParent = myDeposit.getParent();
70 final MoneyWiseDepositCategory myCategory = myDeposit.getCategory();
71 final MoneyWiseCurrency myCurrency = myDeposit.getAssetCurrency();
72 final MoneyWiseDepositCategoryClass myClass = myDeposit.getCategoryClass();
73
74
75 super.validate(pDeposit);
76
77
78 if (myCategory == null) {
79 pDeposit.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.CATEGORY_NAME);
80 } else if (myCategory.getCategoryTypeClass().isParentCategory()) {
81 pDeposit.addError(ERROR_BADCATEGORY, MoneyWiseBasicResource.CATEGORY_NAME);
82 }
83
84
85 if (myCurrency == null) {
86 pDeposit.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseStaticDataType.CURRENCY);
87 } else if (!myCurrency.getEnabled()) {
88 pDeposit.addError(PrometheusDataItem.ERROR_DISABLED, MoneyWiseStaticDataType.CURRENCY);
89 }
90
91
92 if (!myClass.isChild()) {
93 pDeposit.addError(PrometheusDataItem.ERROR_EXIST, MoneyWiseBasicResource.ASSET_PARENT);
94
95
96 } else if (myParent == null) {
97 pDeposit.addError(PrometheusDataItem.ERROR_MISSING, MoneyWiseBasicResource.ASSET_PARENT);
98 } else {
99
100 if (!myParent.getCategoryClass().canParentDeposit(myClass)) {
101 pDeposit.addError(ERROR_BADPARENT, MoneyWiseBasicResource.ASSET_PARENT);
102 }
103
104
105 if (!myDeposit.isClosed() && Boolean.TRUE.equals(myParent.isClosed())) {
106 pDeposit.addError(ERROR_PARCLOSED, MoneyWiseBasicResource.ASSET_CLOSED);
107 }
108 }
109
110
111 if (myDeposit.getInfoSet() != null) {
112
113 theInfoSet.validate(myDeposit.getInfoSet());
114 }
115
116
117 if (!pDeposit.hasErrors()) {
118 pDeposit.setValidEdit();
119 }
120 }
121
122 @Override
123 public void setDefaults(final MoneyWiseDeposit pDeposit) throws OceanusException {
124
125 final MoneyWiseDepositList myList = pDeposit.getList();
126 pDeposit.setName(getUniqueName(myList, NAME_NEWACCOUNT));
127 pDeposit.setCategory(getDefaultCategory());
128 pDeposit.setAssetCurrency(getReportingCurrency());
129 pDeposit.setClosed(Boolean.FALSE);
130 autoCorrect(pDeposit);
131 }
132
133 @Override
134 public void autoCorrect(final MoneyWiseDeposit pDeposit) throws OceanusException {
135
136 final MoneyWiseDepositCategoryClass myClass = pDeposit.getCategoryClass();
137 final MoneyWisePayee myParent = pDeposit.getParent();
138 if (myParent == null
139 || !myParent.getCategoryClass().canParentDeposit(myClass)) {
140 pDeposit.setParent(getDefaultParent(pDeposit));
141 }
142
143
144 theInfoSet.autoCorrect(pDeposit.getInfoSet());
145 }
146
147
148
149
150
151
152 private MoneyWiseDepositCategory getDefaultCategory() {
153
154 final MoneyWiseDepositCategoryList myCategories
155 = getEditSet().getDataList(MoneyWiseBasicDataType.DEPOSITCATEGORY, MoneyWiseDepositCategoryList.class);
156 final Iterator<MoneyWiseDepositCategory> myIterator = myCategories.iterator();
157 while (myIterator.hasNext()) {
158 final MoneyWiseDepositCategory myCategory = myIterator.next();
159
160
161 if (myCategory.isDeleted()) {
162 continue;
163 }
164
165
166 if (!myCategory.isCategoryClass(MoneyWiseDepositCategoryClass.PARENT)) {
167 return myCategory;
168 }
169 }
170
171
172 return null;
173 }
174
175
176
177
178
179
180
181 private MoneyWisePayee getDefaultParent(final MoneyWiseDeposit pDeposit) {
182
183 final MoneyWisePayeeList myPayees = getEditSet().getDataList(MoneyWiseBasicDataType.PAYEE, MoneyWisePayeeList.class);
184 final MoneyWiseDepositCategoryClass myClass = pDeposit.getCategoryClass();
185
186
187 final Iterator<MoneyWisePayee> myIterator = myPayees.iterator();
188 while (myIterator.hasNext()) {
189 final MoneyWisePayee myPayee = myIterator.next();
190
191
192 if (myPayee.isDeleted() || Boolean.TRUE.equals(myPayee.isClosed())) {
193 continue;
194 }
195
196
197 if (myPayee.getCategoryClass().canParentDeposit(myClass)) {
198 return myPayee;
199 }
200 }
201
202
203 return null;
204 }
205 }