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