diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java index 43d2712ce..a77390e37 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java @@ -73,8 +73,8 @@ public class ChargesApiResource { public String retrieveNewChargeDetails(@Context final UriInfo uriInfo) { Set typicalResponseParameters = new HashSet( - Arrays.asList("name", "amount", "currency", "currencyOptions", "chargeAppliesTo", "chargeTimeType", - "chargeCalculationType", "chargeCalculationTypeOptions", "active") + Arrays.asList("id", "name", "amount", "currency", "active", "chargeAppliesTo", "chargeTimeType", + "chargeCalculationType", "chargeCalculationTypeOptions", "currencyOptions") ); Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java index d733d9ffd..3db77ef41 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java @@ -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 currencyOptions; + private final List chargeCalculationTypeOptions; + + public static ChargeData template( + final EnumOptionData chargeTimeType, + final EnumOptionData chargeAppliesToType, + final EnumOptionData chargeCalculationType, + final List currencyOptions, + final List chargeCalculationTypeOptions) { + return new ChargeData(null, null, null, null, chargeTimeType, chargeAppliesToType, chargeCalculationType, false, currencyOptions, chargeCalculationTypeOptions); + } - private List currencyOptions; - private List 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 currencyOptions, + final List 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 currencyOptions, List 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 getCurrencyOptions() { + return currencyOptions; + } + + public List getChargeCalculationTypeOptions() { + return chargeCalculationTypeOptions; + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java index b0ed6ff34..fbb8c7209 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java @@ -122,8 +122,8 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ ); private static final Set CHARGES_DATA_PARAMETERS = new HashSet( - 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; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/Charge.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/Charge.java index 4526a53ad..4d043596d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/Charge.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/Charge.java @@ -19,51 +19,47 @@ public class Charge extends AbstractAuditableCustom { @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 { } 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()){ diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeAppliesTo.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeAppliesTo.java index 6a6740b6a..00e604445 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeAppliesTo.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeAppliesTo.java @@ -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; } -} +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeCalculationMethod.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeCalculationMethod.java index 232b9b4eb..a30fc8cd1 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeCalculationMethod.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeCalculationMethod.java @@ -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; } -} +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeTimeType.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeTimeType.java index 460662e2c..d4a63b229 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeTimeType.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/domain/ChargeTimeType.java @@ -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; } -} +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeCommandValidator.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeCommandValidator.java index edbec71ba..53d0d1106 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeCommandValidator.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeCommandValidator.java @@ -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); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java index d8489e7d7..ad6dcf350 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java @@ -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 { @@ -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); } } }