tidy up enum usuage and api problems around charges during review and testing.
This commit is contained in:
@@ -73,8 +73,8 @@ public class ChargesApiResource {
|
||||
public String retrieveNewChargeDetails(@Context final UriInfo uriInfo) {
|
||||
|
||||
Set<String> typicalResponseParameters = new HashSet<String>(
|
||||
Arrays.asList("name", "amount", "currency", "currencyOptions", "chargeAppliesTo", "chargeTimeType",
|
||||
"chargeCalculationType", "chargeCalculationTypeOptions", "active")
|
||||
Arrays.asList("id", "name", "amount", "currency", "active", "chargeAppliesTo", "chargeTimeType",
|
||||
"chargeCalculationType", "chargeCalculationTypeOptions", "currencyOptions")
|
||||
);
|
||||
|
||||
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
|
||||
|
||||
@@ -3,65 +3,105 @@ package org.mifosng.platform.api.data;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Immutable data object for charge data.
|
||||
*/
|
||||
public class ChargeData {
|
||||
|
||||
private Long id;
|
||||
private String name;
|
||||
private BigDecimal amount;
|
||||
private String currencyCode;
|
||||
private EnumOptionData chargeTimeType;
|
||||
private EnumOptionData chargeAppliesTo;
|
||||
private EnumOptionData chargeCalculationType;
|
||||
private final Long id;
|
||||
private final String name;
|
||||
private final boolean active;
|
||||
private final CurrencyData currency;
|
||||
private final BigDecimal amount;
|
||||
private final EnumOptionData chargeTimeType;
|
||||
private final EnumOptionData chargeAppliesTo;
|
||||
private final EnumOptionData chargeCalculationType;
|
||||
|
||||
private boolean active;
|
||||
private final List<CurrencyData> currencyOptions;
|
||||
private final List<EnumOptionData> chargeCalculationTypeOptions;
|
||||
|
||||
public static ChargeData template(
|
||||
final EnumOptionData chargeTimeType,
|
||||
final EnumOptionData chargeAppliesToType,
|
||||
final EnumOptionData chargeCalculationType,
|
||||
final List<CurrencyData> currencyOptions,
|
||||
final List<EnumOptionData> chargeCalculationTypeOptions) {
|
||||
return new ChargeData(null, null, null, null, chargeTimeType, chargeAppliesToType, chargeCalculationType, false, currencyOptions, chargeCalculationTypeOptions);
|
||||
}
|
||||
|
||||
private List<CurrencyData> currencyOptions;
|
||||
private List<EnumOptionData> chargeCalculationTypeOptions;
|
||||
public ChargeData(final Long id, final String name,
|
||||
final BigDecimal amount, final CurrencyData currency,
|
||||
final EnumOptionData chargeTimeType,
|
||||
final EnumOptionData chargeAppliesTo,
|
||||
final EnumOptionData chargeCalculationType, final boolean active) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.amount = amount;
|
||||
this.currency = currency;
|
||||
this.chargeTimeType = chargeTimeType;
|
||||
this.chargeAppliesTo = chargeAppliesTo;
|
||||
this.chargeCalculationType = chargeCalculationType;
|
||||
this.active = active;
|
||||
this.currencyOptions = null;
|
||||
this.chargeCalculationTypeOptions = null;
|
||||
}
|
||||
|
||||
public ChargeData(Long id, String name, BigDecimal amount, String currencyCode, EnumOptionData chargeTimeType,
|
||||
EnumOptionData chargeAppliesTo, EnumOptionData chargeCalculationType, boolean active) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.amount = amount;
|
||||
this.currencyCode = currencyCode;
|
||||
this.chargeTimeType = chargeTimeType;
|
||||
this.chargeAppliesTo = chargeAppliesTo;
|
||||
this.chargeCalculationType = chargeCalculationType;
|
||||
this.active = active;
|
||||
}
|
||||
public ChargeData(final Long id, final String name,
|
||||
final BigDecimal amount, final CurrencyData currency,
|
||||
final EnumOptionData chargeTimeType,
|
||||
final EnumOptionData chargeAppliesTo,
|
||||
final EnumOptionData chargeCalculationType, final boolean active,
|
||||
final List<CurrencyData> currencyOptions,
|
||||
final List<EnumOptionData> chargeCalculationTypeOptions) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.amount = amount;
|
||||
this.currency = currency;
|
||||
this.chargeTimeType = chargeTimeType;
|
||||
this.chargeAppliesTo = chargeAppliesTo;
|
||||
this.chargeCalculationType = chargeCalculationType;
|
||||
this.active = active;
|
||||
this.currencyOptions = currencyOptions;
|
||||
this.chargeCalculationTypeOptions = chargeCalculationTypeOptions;
|
||||
}
|
||||
|
||||
public ChargeData(EnumOptionData chargeTimeType, EnumOptionData chargeAppliesTo, List<CurrencyData> currencyOptions, List<EnumOptionData> chargeCalculationTypeOptions) {
|
||||
this.chargeTimeType = chargeTimeType;
|
||||
this.chargeAppliesTo = chargeAppliesTo;
|
||||
this.currencyOptions = currencyOptions;
|
||||
this.chargeCalculationTypeOptions = chargeCalculationTypeOptions;
|
||||
}
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
public boolean isActive() {
|
||||
return active;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
public BigDecimal getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public CurrencyData getCurrency() {
|
||||
return currency;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
public EnumOptionData getChargeTimeType() {
|
||||
return chargeTimeType;
|
||||
}
|
||||
|
||||
public BigDecimal getAmount() {
|
||||
return amount;
|
||||
}
|
||||
public EnumOptionData getChargeAppliesTo() {
|
||||
return chargeAppliesTo;
|
||||
}
|
||||
|
||||
public void setAmount(BigDecimal amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
public EnumOptionData getChargeCalculationType() {
|
||||
return chargeCalculationType;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return active;
|
||||
}
|
||||
}
|
||||
public List<CurrencyData> getCurrencyOptions() {
|
||||
return currencyOptions;
|
||||
}
|
||||
|
||||
public List<EnumOptionData> getChargeCalculationTypeOptions() {
|
||||
return chargeCalculationTypeOptions;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -122,8 +122,8 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
|
||||
);
|
||||
|
||||
private static final Set<String> CHARGES_DATA_PARAMETERS = new HashSet<String>(
|
||||
Arrays.asList("id", "name", "amount", "currencyCode", "currencyOptions", "chargeAppliesTo", "chargeTimeType",
|
||||
"chargeCalculationType", "active")
|
||||
Arrays.asList("id", "name", "amount", "currency", "active", "chargeAppliesTo", "chargeTimeType",
|
||||
"chargeCalculationType", "chargeCalculationTypeOptions", "currencyOptions")
|
||||
);
|
||||
|
||||
private final GoogleGsonSerializerHelper helper;
|
||||
|
||||
@@ -19,51 +19,47 @@ public class Charge extends AbstractAuditableCustom<AppUser, Long> {
|
||||
@Column(name = "amount", scale = 6, precision = 19, nullable = false)
|
||||
private BigDecimal amount;
|
||||
|
||||
@Column(name = "currency_code", length=3)
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "currency_code", length=3)
|
||||
private String currencyCode;
|
||||
|
||||
@Enumerated(EnumType.ORDINAL)
|
||||
@Column(name = "charge_applies_to_enum", nullable = false)
|
||||
private ChargeAppliesTo chargeAppliesTo;
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "charge_applies_to_enum", nullable = false)
|
||||
private Integer chargeAppliesTo;
|
||||
|
||||
@Enumerated(EnumType.ORDINAL)
|
||||
@Column(name = "charge_time_enum", nullable = false)
|
||||
private ChargeTimeType chargeTime;
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "charge_time_enum", nullable = false)
|
||||
private Integer chargeTime;
|
||||
|
||||
@Enumerated(EnumType.ORDINAL)
|
||||
@Column(name = "charge_calculation_enum")
|
||||
private ChargeCalculationMethod chargeCalculationMethod;
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "charge_calculation_enum")
|
||||
private Integer chargeCalculationMethod;
|
||||
|
||||
@Column(name = "is_active", nullable = false)
|
||||
@SuppressWarnings("unused")
|
||||
@Column(name = "is_active", nullable = false)
|
||||
private boolean active;
|
||||
|
||||
@Column(name = "is_deleted", nullable=false)
|
||||
private boolean deleted = false;
|
||||
|
||||
public static Charge createNew(String name, BigDecimal amount, String currencyCode, ChargeAppliesTo chargeAppliesTo,
|
||||
ChargeTimeType chargeTime, ChargeCalculationMethod chargeCalculationMethod, boolean active){
|
||||
public static Charge createNew(final String name, final BigDecimal amount, final String currencyCode,
|
||||
final ChargeAppliesTo chargeAppliesTo, final ChargeTimeType chargeTime, final ChargeCalculationMethod chargeCalculationMethod, final boolean active) {
|
||||
return new Charge(name, amount, currencyCode, chargeAppliesTo, chargeTime, chargeCalculationMethod, active);
|
||||
}
|
||||
|
||||
public Charge() {
|
||||
this.name = null;
|
||||
this.amount = null;
|
||||
this.currencyCode = null;
|
||||
this.chargeAppliesTo = null;
|
||||
this.chargeTime = null;
|
||||
this.chargeCalculationMethod = null;
|
||||
|
||||
this.active = false;
|
||||
protected Charge() {
|
||||
//
|
||||
}
|
||||
|
||||
public Charge(String name, BigDecimal amount, String currencyCode, ChargeAppliesTo chargeAppliesTo,
|
||||
ChargeTimeType chargeTime, ChargeCalculationMethod chargeCalculationMethod, boolean active) {
|
||||
public Charge(final String name, final BigDecimal amount, final String currencyCode,
|
||||
final ChargeAppliesTo chargeAppliesTo, final ChargeTimeType chargeTime,
|
||||
final ChargeCalculationMethod chargeCalculationMethod, final boolean active) {
|
||||
this.name = name;
|
||||
this.amount = amount;
|
||||
this.currencyCode = currencyCode;
|
||||
this.chargeAppliesTo = chargeAppliesTo;
|
||||
this.chargeTime = chargeTime;
|
||||
this.chargeCalculationMethod = chargeCalculationMethod;
|
||||
this.chargeAppliesTo = chargeAppliesTo.getValue();
|
||||
this.chargeTime = chargeTime.getValue();
|
||||
this.chargeCalculationMethod = chargeCalculationMethod.getValue();
|
||||
this.active = active;
|
||||
}
|
||||
|
||||
@@ -93,15 +89,15 @@ public class Charge extends AbstractAuditableCustom<AppUser, Long> {
|
||||
}
|
||||
|
||||
if (command.isChargeTimeTypeChanged()){
|
||||
this.chargeTime = ChargeTimeType.fromInt(command.getChargeTimeType());
|
||||
this.chargeTime = ChargeTimeType.fromInt(command.getChargeTimeType()).getValue();
|
||||
}
|
||||
|
||||
if (command.isChargeAppliesToChanged()){
|
||||
this.chargeAppliesTo = ChargeAppliesTo.fromInt(command.getChargeAppliesTo());
|
||||
this.chargeAppliesTo = ChargeAppliesTo.fromInt(command.getChargeAppliesTo()).getValue();
|
||||
}
|
||||
|
||||
if (command.isChargeCalculationTypeChanged()){
|
||||
this.chargeCalculationMethod = ChargeCalculationMethod.fromInt(command.getChargeCalculationType());
|
||||
this.chargeCalculationMethod = ChargeCalculationMethod.fromInt(command.getChargeCalculationType()).getValue();
|
||||
}
|
||||
|
||||
if (command.isActiveChanged()){
|
||||
|
||||
+6
-5
@@ -1,8 +1,9 @@
|
||||
package org.mifosng.platform.charge.domain;
|
||||
|
||||
public enum ChargeAppliesTo {
|
||||
LOAN(0, "chargeAppliesTo.loan"),
|
||||
INVALID(1, "chargeAppliesTo.invalid");
|
||||
|
||||
INVALID(0, "chargeAppliesTo.invalid"),
|
||||
LOAN(1, "chargeAppliesTo.loan");
|
||||
|
||||
private final Integer value;
|
||||
private final String code;
|
||||
@@ -21,9 +22,9 @@ public enum ChargeAppliesTo {
|
||||
}
|
||||
|
||||
public static ChargeAppliesTo fromInt(final Integer chargeAppliesTo){
|
||||
ChargeAppliesTo chargeAppliesToType = null;
|
||||
ChargeAppliesTo chargeAppliesToType = ChargeAppliesTo.INVALID;
|
||||
switch(chargeAppliesTo){
|
||||
case 0:
|
||||
case 1:
|
||||
chargeAppliesToType = LOAN;
|
||||
break;
|
||||
default:
|
||||
@@ -32,4 +33,4 @@ public enum ChargeAppliesTo {
|
||||
}
|
||||
return chargeAppliesToType;
|
||||
}
|
||||
}
|
||||
}
|
||||
+13
-12
@@ -1,12 +1,13 @@
|
||||
package org.mifosng.platform.charge.domain;
|
||||
|
||||
public enum ChargeCalculationMethod {
|
||||
FLAT(0, "chargeCalculationType.flat"),
|
||||
PERCENT_OF_AMOUNT(1, "chargeCalculationType.percent.of.amount"),
|
||||
PERCENT_OF_AMOUNT_AND_INTEREST(2, "chargeCalculationType.percent.of.amount.and.interest"),
|
||||
PERCENT_OF_INTEREST(3, "chargeCalculationType.percent.of.interest"),
|
||||
INVALID(4, "chargeCalculationType.invalid");
|
||||
|
||||
|
||||
INVALID(0, "chargeCalculationType.invalid"),
|
||||
FLAT(1, "chargeCalculationType.flat"),
|
||||
PERCENT_OF_AMOUNT(2, "chargeCalculationType.percent.of.amount"),
|
||||
PERCENT_OF_AMOUNT_AND_INTEREST(3, "chargeCalculationType.percent.of.amount.and.interest"),
|
||||
PERCENT_OF_INTEREST(4, "chargeCalculationType.percent.of.interest");
|
||||
|
||||
private final Integer value;
|
||||
private final String code;
|
||||
|
||||
@@ -24,18 +25,18 @@ public enum ChargeCalculationMethod {
|
||||
}
|
||||
|
||||
public static ChargeCalculationMethod fromInt(final Integer chargeCalculation){
|
||||
ChargeCalculationMethod chargeCalculationMethod = null;
|
||||
ChargeCalculationMethod chargeCalculationMethod = ChargeCalculationMethod.INVALID;
|
||||
switch(chargeCalculation){
|
||||
case 0:
|
||||
case 1:
|
||||
chargeCalculationMethod = FLAT;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
chargeCalculationMethod = PERCENT_OF_AMOUNT;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
chargeCalculationMethod = PERCENT_OF_AMOUNT_AND_INTEREST;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
chargeCalculationMethod = PERCENT_OF_INTEREST;
|
||||
break;
|
||||
default:
|
||||
@@ -44,4 +45,4 @@ public enum ChargeCalculationMethod {
|
||||
}
|
||||
return chargeCalculationMethod;
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-5
@@ -1,8 +1,9 @@
|
||||
package org.mifosng.platform.charge.domain;
|
||||
|
||||
public enum ChargeTimeType {
|
||||
DISBURSEMENT(0, "chargeTimeType.disbursement"),
|
||||
INVALID(1, "chargeTimeType.invalid");
|
||||
|
||||
INVALID(0, "chargeTimeType.invalid"),
|
||||
DISBURSEMENT(1, "chargeTimeType.disbursement");
|
||||
|
||||
private final Integer value;
|
||||
private final String code;
|
||||
@@ -21,9 +22,9 @@ public enum ChargeTimeType {
|
||||
}
|
||||
|
||||
public static ChargeTimeType fromInt(final Integer chargeTime) {
|
||||
ChargeTimeType chargeTimeType = null;
|
||||
ChargeTimeType chargeTimeType = ChargeTimeType.INVALID;
|
||||
switch(chargeTime){
|
||||
case 0:
|
||||
case 1:
|
||||
chargeTimeType = DISBURSEMENT;
|
||||
break;
|
||||
default:
|
||||
@@ -32,4 +33,4 @@ public enum ChargeTimeType {
|
||||
}
|
||||
return chargeTimeType;
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -24,9 +24,9 @@ public class ChargeCommandValidator {
|
||||
baseDataValidator.reset().parameter("name").value(command.getName()).notBlank().notExceedingLengthOf(100);
|
||||
baseDataValidator.reset().parameter("amount").value(command.getAmount()).notNull().positiveAmount();
|
||||
baseDataValidator.reset().parameter("currencyCode").value(command.getCurrencyCode()).notBlank();
|
||||
baseDataValidator.reset().parameter("chargeAppliesTo").value(command.getChargeAppliesTo()).notNull().inMinMaxRange(0, 0);
|
||||
baseDataValidator.reset().parameter("chargeTimeType").value(command.getChargeTimeType()).notNull().inMinMaxRange(0, 0);
|
||||
baseDataValidator.reset().parameter("chargeCalculationMethod").value(command.getChargeCalculationType()).notNull().inMinMaxRange(0, 3);
|
||||
baseDataValidator.reset().parameter("chargeAppliesTo").value(command.getChargeAppliesTo()).notNull().inMinMaxRange(1, 1);
|
||||
baseDataValidator.reset().parameter("chargeTimeType").value(command.getChargeTimeType()).notNull().inMinMaxRange(1, 1);
|
||||
baseDataValidator.reset().parameter("chargeCalculationType").value(command.getChargeCalculationType()).notNull().inMinMaxRange(1, 4);
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
@@ -42,9 +42,9 @@ public class ChargeCommandValidator {
|
||||
baseDataValidator.reset().parameter("name").value(command.getName()).ignoreIfNull().notBlank().notExceedingLengthOf(100);
|
||||
baseDataValidator.reset().parameter("amount").value(command.getAmount()).ignoreIfNull().positiveAmount();
|
||||
baseDataValidator.reset().parameter("currencyCode").value(command.getCurrencyCode()).ignoreIfNull().notBlank();
|
||||
baseDataValidator.reset().parameter("chargeAppliesTo").value(command.getChargeAppliesTo()).ignoreIfNull().notNull().inMinMaxRange(0, 0);
|
||||
baseDataValidator.reset().parameter("chargeTimeType").value(command.getChargeTimeType()).ignoreIfNull().notNull().inMinMaxRange(0, 0);
|
||||
baseDataValidator.reset().parameter("chargeCalculationMethod").value(command.getChargeCalculationType()).ignoreIfNull().notNull().inMinMaxRange(0, 3);
|
||||
baseDataValidator.reset().parameter("chargeAppliesTo").value(command.getChargeAppliesTo()).ignoreIfNull().notNull().inMinMaxRange(1, 1);
|
||||
baseDataValidator.reset().parameter("chargeTimeType").value(command.getChargeTimeType()).ignoreIfNull().notNull().inMinMaxRange(1, 1);
|
||||
baseDataValidator.reset().parameter("chargeCalculationType").value(command.getChargeCalculationType()).ignoreIfNull().notNull().inMinMaxRange(1, 4);
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
|
||||
+4
-2
@@ -83,8 +83,9 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
|
||||
);
|
||||
EnumOptionData allowedChargeAppliesTo = chargeAppliesTo(ChargeAppliesTo.LOAN);
|
||||
EnumOptionData allowedChargeTime = chargeTimeType(ChargeTimeType.DISBURSEMENT);
|
||||
EnumOptionData allowedChargeCalculationType = chargeCalculationType(ChargeCalculationMethod.FLAT);
|
||||
|
||||
return new ChargeData(allowedChargeTime, allowedChargeAppliesTo, currencyOptions, allowedChargeCalculationMethods);
|
||||
return ChargeData.template(allowedChargeTime, allowedChargeAppliesTo, allowedChargeCalculationType, currencyOptions, allowedChargeCalculationMethods);
|
||||
}
|
||||
|
||||
private static final class ChargeMapper implements RowMapper<ChargeData> {
|
||||
@@ -101,6 +102,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
|
||||
String name = rs.getString("name");
|
||||
BigDecimal amount = rs.getBigDecimal("amount");
|
||||
String currencyCode = rs.getString("currencyCode");
|
||||
CurrencyData currency = new CurrencyData(currencyCode, "", 0, "", "");
|
||||
|
||||
int chargeAppliesTo = rs.getInt("chargeAppliesTo");
|
||||
EnumOptionData chargeAppliesToType = ChargeEnumerations.chargeAppliesTo(chargeAppliesTo);
|
||||
@@ -113,7 +115,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
|
||||
|
||||
boolean active = rs.getBoolean("active");
|
||||
|
||||
return new ChargeData(id, name, amount, currencyCode, chargeTimeType, chargeAppliesToType, chargeCalculationType, active);
|
||||
return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesToType, chargeCalculationType, active);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user