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.metis.field.MetisFieldRequired;
20 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseDepositInfoSet;
21 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoan;
22 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanCategory;
23 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanInfo;
24 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseLoanInfoSet;
25 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoClass;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseCurrency;
27 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
28 import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
29 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataInfoClass;
30 import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
31 import io.github.tonywasher.joceanus.prometheus.validate.PrometheusValidateInfoSet;
32
33 import java.util.Currency;
34
35
36
37
38 public class MoneyWiseValidateLoanInfoSet
39 extends PrometheusValidateInfoSet<MoneyWiseLoanInfo> {
40 @Override
41 public MoneyWiseLoan getOwner() {
42 return (MoneyWiseLoan) super.getOwner();
43 }
44
45 @Override
46 public MoneyWiseLoanInfoSet getInfoSet() {
47 return (MoneyWiseLoanInfoSet) super.getInfoSet();
48 }
49
50 @Override
51 public MetisFieldRequired isClassRequired(final PrometheusDataInfoClass pClass) {
52
53 final MoneyWiseLoan myLoan = getOwner();
54 final MoneyWiseLoanCategory myCategory = myLoan.getCategory();
55
56
57 if (myCategory == null) {
58 return MetisFieldRequired.NOTALLOWED;
59 }
60
61
62 return switch ((MoneyWiseAccountInfoClass) pClass) {
63
64 case NOTES, SORTCODE, ACCOUNT, REFERENCE, OPENINGBALANCE -> MetisFieldRequired.CANEXIST;
65
66
67 default -> MetisFieldRequired.NOTALLOWED;
68 };
69 }
70
71 @Override
72 public void validateClass(final MoneyWiseLoanInfo pInfo,
73 final PrometheusDataInfoClass pClass) {
74
75 switch ((MoneyWiseAccountInfoClass) pClass) {
76 case OPENINGBALANCE:
77 validateOpeningBalance(pInfo);
78 break;
79 case SORTCODE, ACCOUNT, NOTES, REFERENCE:
80 validateInfoLength(pInfo);
81 break;
82 default:
83 break;
84 }
85 }
86
87
88
89
90
91
92 private void validateOpeningBalance(final MoneyWiseLoanInfo pInfo) {
93 final OceanusMoney myBalance = pInfo.getValue(OceanusMoney.class);
94 if (!myBalance.getCurrency().equals(getOwner().getCurrency())) {
95 getOwner().addError(MoneyWiseDepositInfoSet.ERROR_CURRENCY, MoneyWiseLoanInfoSet.getFieldForClass(MoneyWiseAccountInfoClass.OPENINGBALANCE));
96 }
97 }
98
99
100
101
102
103
104 private void validateInfoLength(final MoneyWiseLoanInfo pInfo) {
105 final char[] myArray = pInfo.getValue(char[].class);
106 final MoneyWiseAccountInfoClass myClass = pInfo.getInfoClass();
107 if (myArray.length > myClass.getMaximumLength()) {
108 getOwner().addError(PrometheusDataItem.ERROR_LENGTH, MoneyWiseLoanInfoSet.getFieldForClass(myClass));
109 }
110 }
111
112 @Override
113 protected void autoCorrect(final PrometheusDataInfoClass pClass) throws OceanusException {
114
115 if (MoneyWiseAccountInfoClass.OPENINGBALANCE.equals(pClass)) {
116
117 final MoneyWiseLoan myOwner = getOwner();
118 OceanusMoney myOpening = myOwner.getOpeningBalance();
119 final MoneyWiseCurrency myAssetCurrency = myOwner.getAssetCurrency();
120 final Currency myCurrency = myAssetCurrency.getCurrency();
121
122
123 if (!myCurrency.equals(myOpening.getCurrency())) {
124 myOpening = myOpening.changeCurrency(myCurrency);
125 getInfoSet().setValue(pClass, myOpening);
126 }
127 }
128 }
129 }