diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java index 442e7c60a..8d7728244 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/loanschedule/service/LoanScheduleCalculationPlatformServiceImpl.java @@ -64,9 +64,9 @@ public class LoanScheduleCalculationPlatformServiceImpl implements LoanScheduleC final Long groupId = this.fromJsonHelper.extractLongNamed("groupId", query.parsedJson()); Integer cycleNumber = 0; if (clientId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId, loanProduct.getId()); } else if (groupId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue()); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue(), loanProduct.getId()); } this.loanProductCommandFromApiJsonDeserializer.validateMinMaxConstraints(query.parsedJson(), baseDataValidator, loanProduct, cycleNumber); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java index 6356d6155..d78039c7d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java @@ -180,9 +180,9 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa final Long groupId = this.fromJsonHelper.extractLongNamed("groupId", command.parsedJson()); Integer cycleNumber = 0; if (clientId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId, loanProduct.getId()); } else if (groupId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue()); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue(), loanProduct.getId()); } this.loanProductCommandFromApiJsonDeserializer.validateMinMaxConstraints(command.parsedJson(), baseDataValidator, loanProduct, cycleNumber); @@ -314,9 +314,9 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa final Long groupId = this.fromJsonHelper.extractLongNamed("groupId", command.parsedJson()); Integer cycleNumber = 0; if (clientId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(clientId, loanProduct.getId()); } else if (groupId != null) { - cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue()); + cycleNumber = this.loanReadPlatformService.retriveLoanCounter(groupId, AccountType.GROUP.getValue(), loanProduct.getId()); } this.loanProductCommandFromApiJsonDeserializer.validateMinMaxConstraints(command.parsedJson(), baseDataValidator, loanProduct, cycleNumber); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java index a14b047c5..f4321cb57 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java @@ -62,7 +62,7 @@ public interface LoanReadPlatformService { */ Collection retrieveAllLoansWithOverdueInstallmentsNotAlreadyPenalized(final Long penaltyWaitPeriod); - Integer retriveLoanCounter(Long groupId, Integer loanType); + Integer retriveLoanCounter(Long groupId, Integer loanType, Long productId); - Integer retriveLoanCounter(Long clientId); + Integer retriveLoanCounter(Long clientId, Long productId); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index b7161e181..e1af7f225 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -1067,9 +1067,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Integer loanCycleCounter = null; if (loanProduct.useBorrowerCycle()) { if (clientId == null) { - loanCycleCounter = retriveLoanCounter(groupId, AccountType.GROUP.getValue()); + loanCycleCounter = retriveLoanCounter(groupId, AccountType.GROUP.getValue(), loanProduct.getId()); } else { - loanCycleCounter = retriveLoanCounter(clientId); + loanCycleCounter = retriveLoanCounter(clientId, loanProduct.getId()); } } return LoanAccountData.loanProductWithTemplateDefaults(loanProduct, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, @@ -1161,14 +1161,14 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } @Override - public Integer retriveLoanCounter(final Long groupId, final Integer loanType) { - final String sql = "Select MAX(l.loan_counter) from m_loan l where l.group_id = ? " + " and l.loan_type_enum = ?"; - return this.jdbcTemplate.queryForInt(sql, groupId, loanType); + public Integer retriveLoanCounter(final Long groupId, final Integer loanType, Long productId) { + final String sql = "Select MAX(l.loan_product_counter) from m_loan l where l.group_id = ? and l.loan_type_enum = ? and l.product_id=?"; + return this.jdbcTemplate.queryForInt(sql, groupId, loanType,productId); } @Override - public Integer retriveLoanCounter(final Long clientId) { - final String sql = "Select MAX(l.loan_counter) from m_loan l where l.client_id = ?"; - return this.jdbcTemplate.queryForInt(sql, clientId); + public Integer retriveLoanCounter(final Long clientId, Long productId) { + final String sql = "Select MAX(l.loan_product_counter) from m_loan l where l.client_id = ? and l.product_id=?"; + return this.jdbcTemplate.queryForInt(sql, clientId,productId); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java index f13bafb30..660da76aa 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/domain/LoanProduct.java @@ -680,20 +680,31 @@ public class LoanProduct extends AbstractPersistable { public Map fetchBorrowerCycleVariationsForCycleNumber(final Integer cycleNumber) { Map borrowerCycleVariations = new HashMap(); borrowerCycleVariations.put(LoanProductConstants.principal, this.loanProductRelatedDetail.getPrincipal().getAmount()); - borrowerCycleVariations.put(LoanProductConstants.minPrincipal, this.loanProductMinMaxConstraints.getMinPrincipal()); - borrowerCycleVariations.put(LoanProductConstants.maxPrincipal, this.loanProductMinMaxConstraints.getMaxPrincipal()); borrowerCycleVariations.put(LoanProductConstants.interestRatePerPeriod, this.loanProductRelatedDetail.getNominalInterestRatePerPeriod()); - borrowerCycleVariations.put(LoanProductConstants.minInterestRatePerPeriod, - this.loanProductMinMaxConstraints.getMinNominalInterestRatePerPeriod()); - borrowerCycleVariations.put(LoanProductConstants.maxInterestRatePerPeriod, - this.loanProductMinMaxConstraints.getMaxNominalInterestRatePerPeriod()); - borrowerCycleVariations.put(LoanProductConstants.numberOfRepayments, - BigDecimal.valueOf(this.loanProductRelatedDetail.getNumberOfRepayments())); - borrowerCycleVariations.put(LoanProductConstants.minNumberOfRepayments, - BigDecimal.valueOf(this.loanProductMinMaxConstraints.getMinNumberOfRepayments())); - borrowerCycleVariations.put(LoanProductConstants.maxNumberOfRepayments, - BigDecimal.valueOf(this.loanProductMinMaxConstraints.getMaxNumberOfRepayments())); + if(this.loanProductRelatedDetail.getNumberOfRepayments() != null){ + borrowerCycleVariations.put(LoanProductConstants.numberOfRepayments, + BigDecimal.valueOf(this.loanProductRelatedDetail.getNumberOfRepayments())); + } + + if(this.loanProductMinMaxConstraints !=null){ + borrowerCycleVariations.put(LoanProductConstants.minPrincipal, this.loanProductMinMaxConstraints.getMinPrincipal()); + borrowerCycleVariations.put(LoanProductConstants.maxPrincipal, this.loanProductMinMaxConstraints.getMaxPrincipal()); + borrowerCycleVariations.put(LoanProductConstants.minInterestRatePerPeriod, + this.loanProductMinMaxConstraints.getMinNominalInterestRatePerPeriod()); + borrowerCycleVariations.put(LoanProductConstants.maxInterestRatePerPeriod, + this.loanProductMinMaxConstraints.getMaxNominalInterestRatePerPeriod()); + + if(this.loanProductMinMaxConstraints.getMinNumberOfRepayments() != null){ + borrowerCycleVariations.put(LoanProductConstants.minNumberOfRepayments, + BigDecimal.valueOf(this.loanProductMinMaxConstraints.getMinNumberOfRepayments())); + } + + if(this.loanProductMinMaxConstraints.getMaxNumberOfRepayments() != null){ + borrowerCycleVariations.put(LoanProductConstants.maxNumberOfRepayments, + BigDecimal.valueOf(this.loanProductMinMaxConstraints.getMaxNumberOfRepayments())); + } + } if (cycleNumber > 0) { Integer principalCycleUsed = 0; Integer interestCycleUsed = 0;