FINERACT-2081: Support for string type primary keys - refactor existing enums

This commit is contained in:
Marta Jankovics
2024-06-26 17:08:24 +02:00
committed by Adam Saghy
parent 009e9ded01
commit b482fbd447
31 changed files with 169 additions and 261 deletions
@@ -20,16 +20,21 @@ package org.apache.fineract.accounting.common;
import java.util.HashMap;
import java.util.Map;
import lombok.Getter;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.core.data.StringEnumOptionData;
@Getter
public enum AccountingRuleType {
NONE(1, "accountingRuleType.none"), //
CASH_BASED(2, "accountingRuleType.cash"), //
ACCRUAL_PERIODIC(3, "accountingRuleType.accrual.periodic"), //
ACCRUAL_UPFRONT(4, "accountingRuleType.accrual.upfront"); //
NONE(1, "accountingRuleType.none", "No accounting"), //
CASH_BASED(2, "accountingRuleType.cash", "Cash based accounting"), //
ACCRUAL_PERIODIC(3, "accountingRuleType.accrual.periodic", "Periodic accrual accounting"), //
ACCRUAL_UPFRONT(4, "accountingRuleType.accrual.upfront", "Upfront accrual accounting"); //
private final Integer value;
private final String code;
private final String description;
private static final Map<Integer, AccountingRuleType> intToEnumMap = new HashMap<>();
@@ -44,21 +49,22 @@ public enum AccountingRuleType {
return type;
}
AccountingRuleType(final Integer value, final String code) {
AccountingRuleType(final Integer value, final String code, final String description) {
this.value = value;
this.code = code;
this.description = description;
}
@Override
public String toString() {
return name().toString().replaceAll("_", " ");
return name().replaceAll("_", " ");
}
public Integer getValue() {
return this.value;
public EnumOptionData toEnumOptionData() {
return new EnumOptionData((long) getValue(), getCode(), getDescription());
}
public String getCode() {
return this.code;
public StringEnumOptionData toStringEnumOptionData() {
return new StringEnumOptionData(name(), getCode(), getDescription());
}
}
@@ -130,7 +130,7 @@ public enum EntityTables {
@NotNull
public static List<Integer> getCheckStatusCodes(String name) {
return getCheckStatuses(name).stream().map(StatusEnum::getCode).toList();
return getCheckStatuses(name).stream().map(StatusEnum::getValue).toList();
}
@NotNull
@@ -18,88 +18,55 @@
*/
package org.apache.fineract.infrastructure.dataqueries.data;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
public enum StatusEnum {
CREATE("create", 100), APPROVE("approve", 200), ACTIVATE("activate", 300), WITHDRAWN("withdraw", 400), REJECTED("reject", 500), CLOSE(
"close", 600), WRITE_OFF("write off", 601), RESCHEDULE("reschedule", 602), OVERPAY("overpay", 700), DISBURSE("disburse", 800);
CREATE("statusEnum.create", 100), //
APPROVE("statusEnum.approve", 200), //
ACTIVATE("statusEnum.activate", 300), //
WITHDRAWN("statusEnum.withdraw", 400), //
REJECTED("statusEnum.reject", 500), //
CLOSE("statusEnum.close", 600), //
WRITE_OFF("statusEnum.write off", 601), //
RESCHEDULE("statusEnum.reschedule", 602), //
OVERPAY("statusEnum.overpay", 700), //
DISBURSE("statusEnum.disburse", 800), //
;
private final String name;
private static final StatusEnum[] VALUES = values();
private final Integer code;
private static final Map<Integer, StatusEnum> BY_ID = Arrays.stream(VALUES).collect(Collectors.toMap(StatusEnum::getValue, v -> v));
public Integer getCode() {
return code;
private final String code;
private final Integer value;
public Integer getValue() {
return value;
}
StatusEnum(String name, Integer code) {
this.name = name;
StatusEnum(String code, Integer value) {
this.code = code;
this.value = value;
}
public static List<DatatableCheckStatusData> getStatusList() {
List<DatatableCheckStatusData> data = new ArrayList<DatatableCheckStatusData>();
for (StatusEnum status : StatusEnum.values()) {
data.add(new DatatableCheckStatusData(status.name, status.code));
}
return data;
public static StatusEnum fromInt(final Integer value) {
return BY_ID.get(value);
}
public static StatusEnum fromInt(final Integer code) {
StatusEnum ret = null;
switch (code) {
case 100:
ret = StatusEnum.CREATE;
break;
case 200:
ret = StatusEnum.APPROVE;
break;
case 300:
ret = StatusEnum.ACTIVATE;
break;
case 400:
ret = StatusEnum.WITHDRAWN;
break;
case 500:
ret = StatusEnum.REJECTED;
break;
case 600:
ret = StatusEnum.CLOSE;
break;
case 601:
ret = StatusEnum.WRITE_OFF;
break;
case 602:
ret = StatusEnum.RESCHEDULE;
break;
case 700:
ret = StatusEnum.OVERPAY;
break;
case 800:
ret = StatusEnum.DISBURSE;
break;
default:
break;
}
return ret;
public static EnumOptionData toEnumOptionData(final Integer id) {
return toEnumOptionData(StatusEnum.fromInt(id));
}
public static EnumOptionData statusTypeEnum(final Integer id) {
return statusType(StatusEnum.fromInt(id));
public static EnumOptionData toEnumOptionData(final StatusEnum statusType) {
return statusType == null ? null : statusType.toEnumOptionData();
}
public static EnumOptionData statusType(final StatusEnum statusType) {
final EnumOptionData optionData = new EnumOptionData(statusType.getCode().longValue(), statusType.name(), statusType.name());
return optionData;
public EnumOptionData toEnumOptionData() {
return new EnumOptionData(getValue().longValue(), code, name());
}
}
@@ -56,7 +56,8 @@ public enum JobName {
LOAN_DELINQUENCY_CLASSIFICATION("Loan Delinquency Classification"), //
SEND_ASYNCHRONOUS_EVENTS("Send Asynchronous Events"), //
PURGE_EXTERNAL_EVENTS("Purge External Events"), //
PURGE_PROCESSED_COMMANDS("Purge Processed Commands");
PURGE_PROCESSED_COMMANDS("Purge Processed Commands"), //
;
private final String name;
@@ -18,26 +18,25 @@
*/
package org.apache.fineract.portfolio;
import lombok.Getter;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.core.data.StringEnumOptionData;
@Getter
public enum TransactionEntryType {
CREDIT(1, "transactionEntryType.credit"), //
DEBIT(2, "transactionEntryType.debit"), //
CREDIT(1, "transactionEntryType.credit", "Credit transaction"), //
DEBIT(2, "transactionEntryType.debit", "Debit transaction"), //
;
private final Integer value;
private final String code;
private final String description;
TransactionEntryType(final Integer value, final String code) {
TransactionEntryType(final Integer value, final String code, final String description) {
this.value = value;
this.code = code;
}
public Integer getValue() {
return this.value;
}
public String getCode() {
return this.code;
this.description = description;
}
public boolean isCredit() {
@@ -51,4 +50,12 @@ public enum TransactionEntryType {
public TransactionEntryType getReversal() {
return this == CREDIT ? DEBIT : CREDIT;
}
public EnumOptionData toEnumOptionData() {
return new EnumOptionData((long) getValue(), getCode(), getDescription());
}
public StringEnumOptionData toStringEnumOptionData() {
return new StringEnumOptionData(name(), getCode(), getDescription());
}
}
@@ -22,7 +22,8 @@ public enum PortfolioAccountType {
INVALID(0, "accountType.invalid"), //
LOAN(1, "accountType.loan"), //
SAVINGS(2, "accountType.savings");
SAVINGS(2, "accountType.savings"), //
;
private final Integer value;
private final String code;
@@ -18,6 +18,11 @@
*/
package org.apache.fineract.portfolio.accountdetails.domain;
import java.util.Arrays;
import java.util.List;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.portfolio.accountdetails.service.AccountEnumerations;
/**
* Enum representation of account types .
*/
@@ -27,7 +32,8 @@ public enum AccountType {
INDIVIDUAL(1, "accountType.individual"), //
GROUP(2, "accountType.group"), //
JLG(3, "accountType.jlg"), // JLG account given in group context
GLIM(4, "accountType.glim"), GSIM(5, "accountType.gsim");
GLIM(4, "accountType.glim"), //
GSIM(5, "accountType.gsim");
private final Integer value;
private final String code;
@@ -71,6 +77,10 @@ public enum AccountType {
return accountType;
}
public static List<EnumOptionData> toEnumOptionData() {
return Arrays.stream(values()).sequential().map(AccountEnumerations::loanType).toList();
}
public Integer getValue() {
return this.value;
}
@@ -75,6 +75,14 @@ public enum NoteType {
return BY_API.get(url);
}
public static EnumOptionData toEnumOptionData(final Integer id) {
return toEnumOptionData(NoteType.fromInt(id));
}
public static EnumOptionData toEnumOptionData(final NoteType noteType) {
return noteType == null ? null : noteType.toEnumOptionData();
}
public EnumOptionData toEnumOptionData() {
return new EnumOptionData(getValue().longValue(), getCode(), getDescription());
}