diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java index 347068b9d..b8a45edf0 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccount.java @@ -336,9 +336,6 @@ public class SavingsAccount extends AbstractPersistable { if (!CollectionUtils.isEmpty(savingsAccountCharges)) { this.charges = associateChargesWithThisSavingsAccount(savingsAccountCharges); - // TODO:Add charges details to savings summary - // this.summary = - // updateSummaryWithTotalFeeChargesDueAtDisbursement(deriveSumTotalOfChargesDueAtDisbursement()); } this.summary = new SavingsAccountSummary(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountAssembler.java index a5e25328e..bc480c9bb 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountAssembler.java @@ -236,7 +236,7 @@ public class SavingsAccountAssembler { monthDayOfAnnualFee = product.monthDayOfAnnualFee(); } - final Set charges = this.savingsAccountChargeAssembler.fromParsedJson(element); + final Set charges = this.savingsAccountChargeAssembler.fromParsedJson(element, product.currency().getCode()); final SavingsAccount account = SavingsAccount.createNewApplicationForSubmittal(client, group, product, fieldOfficer, accountNo, externalId, accountType, submittedOnDate, interestRate, interestCompoundingPeriodType, interestPostingPeriodType, diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java index 8a45e448b..fbdb113fa 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountCharge.java @@ -505,6 +505,11 @@ public class SavingsAccountCharge extends AbstractPersistable { public SavingsAccount savingsAccount(){ return this.savingsAccount; } + + public boolean hasCurrencyCodeOf(final String matchingCurrencyCode) { + if (this.currencyCode() == null || matchingCurrencyCode == null) { return false; } + return this.currencyCode().equalsIgnoreCase(matchingCurrencyCode); + } @Override public boolean equals(final Object obj) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargeAssembler.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargeAssembler.java index 4da5cc734..2fa0b7b85 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargeAssembler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/domain/SavingsAccountChargeAssembler.java @@ -5,6 +5,7 @@ */ package org.mifosplatform.portfolio.savings.domain; +import static org.mifosplatform.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_RESOURCE_NAME; import static org.mifosplatform.portfolio.savings.SavingsApiConstants.amountParamName; import static org.mifosplatform.portfolio.savings.SavingsApiConstants.chargeCalculationTypeParamName; import static org.mifosplatform.portfolio.savings.SavingsApiConstants.chargeIdParamName; @@ -14,11 +15,16 @@ import static org.mifosplatform.portfolio.savings.SavingsApiConstants.dueAsOfDat import static org.mifosplatform.portfolio.savings.SavingsApiConstants.idParamName; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Locale; import java.util.Set; import org.joda.time.LocalDate; +import org.mifosplatform.infrastructure.core.data.ApiParameterError; +import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; +import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; import org.mifosplatform.portfolio.charge.domain.Charge; import org.mifosplatform.portfolio.charge.domain.ChargeCalculationType; @@ -48,7 +54,7 @@ public class SavingsAccountChargeAssembler { this.savingsAccountChargeRepository = savingsAccountChargeRepository; } - public Set fromParsedJson(final JsonElement element) { + public Set fromParsedJson(final JsonElement element, final String productCurrencyCode) { final Set savingsAccountCharges = new HashSet(); @@ -106,6 +112,20 @@ public class SavingsAccountChargeAssembler { } } + this.validateSavingsCharges(savingsAccountCharges, productCurrencyCode); return savingsAccountCharges; } + + private void validateSavingsCharges(final Set charges, final String productCurrencyCode) { + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) + .resource(SAVINGS_ACCOUNT_RESOURCE_NAME); + for (SavingsAccountCharge savingsAccountCharge : charges) { + if(!savingsAccountCharge.hasCurrencyCodeOf(productCurrencyCode)){ + baseDataValidator.reset().parameter("currency").value(savingsAccountCharge.getCharge().getId()) + .failWithCodeNoParameterAddedToErrorCode("currency.and.charge.currency.not.same"); + } + } + if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index 8454a6ad4..9d65f9515 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -233,10 +233,7 @@ public class SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl impl } if (changes.containsKey("charges")) { - // final Set savingsProductCharges = - // this.savi.assembleListOfSavingsProductCharges(command, - // product.currency().getCode()); - final Set charges = this.savingsAccountChargeAssembler.fromParsedJson(command.parsedJson()); + final Set charges = this.savingsAccountChargeAssembler.fromParsedJson(command.parsedJson(), account.getCurrency().getCode()); final boolean updated = account.update(charges); if (!updated) { changes.remove("charges");