diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java index 35631a06e..506a1e9f3 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/serialization/LoanEventApiJsonValidator.java @@ -263,4 +263,30 @@ public final class LoanEventApiJsonValidator { throwExceptionIfValidationWarningsExist(dataValidationErrors); } + + public void validateForBulkLoanReassignment(final String json) { + if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } + + final Set supportedParameters = new HashSet(Arrays.asList("assignmentDate", "fromLoanOfficerId", + "toLoanOfficerId", "loans", "locale", "dateFormat")); + + final Type typeOfMap = new TypeToken>() {}.getType(); + this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); + + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loanOfficer"); + + final JsonElement element = this.fromApiJsonHelper.parse(json); + + final LocalDate assignmentDate = this.fromApiJsonHelper.extractLocalDateNamed("assignmentDate", element); + baseDataValidator.reset().parameter("assignmentDate").value(assignmentDate).notNull(); + final Long fromLoanOfficerId = this.fromApiJsonHelper.extractLongNamed("fromLoanOfficerId", element); + baseDataValidator.reset().parameter("fromLoanOfficerId").value(fromLoanOfficerId).notNull().longGreaterThanZero(); + final Long toLoanOfficerId = this.fromApiJsonHelper.extractLongNamed("toLoanOfficerId", element); + baseDataValidator.reset().parameter("toLoanOfficerId").value(toLoanOfficerId).notNull().longGreaterThanZero(); + final String[] loans = this.fromApiJsonHelper.extractArrayNamed("loans", element); + baseDataValidator.reset().parameter("loans").value(loans).arrayNotEmpty(); + + throwExceptionIfValidationWarningsExist(dataValidationErrors); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java index 8a6506259..6e5d1c4de 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/BulkLoansReadPlatformServiceImpl.java @@ -16,6 +16,8 @@ import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext import org.mifosplatform.organisation.staff.data.StaffAccountSummaryCollectionData; import org.mifosplatform.portfolio.accountdetails.data.LoanAccountSummaryData; import org.mifosplatform.portfolio.accountdetails.service.AccountDetailsReadPlatformService; +import org.mifosplatform.portfolio.client.domain.ClientStatus; +import org.mifosplatform.portfolio.group.domain.GroupingTypeStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; @@ -42,13 +44,13 @@ public class BulkLoansReadPlatformServiceImpl implements BulkLoansReadPlatformSe context.authenticatedUser(); final StaffClientMapper staffClientMapper = new StaffClientMapper(); - final String clientSql = "select distinct " + staffClientMapper.schema(); + final String clientSql = "select distinct " + staffClientMapper.schema() +" and c.status_enum=?"; final StaffGroupMapper staffGroupMapper = new StaffGroupMapper(); - final String groupSql = "select distinct " + staffGroupMapper.schema(); + final String groupSql = "select distinct " + staffGroupMapper.schema() +" and g.status_enum=?"; final List clientSummaryList = this.jdbcTemplate.query(clientSql, - staffClientMapper, new Object[] { loanOfficerId }); + staffClientMapper, new Object[] { loanOfficerId, ClientStatus.ACTIVE.getValue()}); for (StaffAccountSummaryCollectionData.LoanAccountSummary clientSummary : clientSummaryList) { @@ -59,7 +61,7 @@ public class BulkLoansReadPlatformServiceImpl implements BulkLoansReadPlatformSe } final List groupSummaryList = this.jdbcTemplate.query(groupSql, staffGroupMapper, - new Object[] { loanOfficerId }); + new Object[] { loanOfficerId, GroupingTypeStatus.ACTIVE.getValue()}); for (StaffAccountSummaryCollectionData.LoanAccountSummary groupSummary : groupSummaryList) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 918a96693..f84d63c7f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -930,6 +930,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf public CommandProcessingResult bulkLoanReassignment(final JsonCommand command) { this.context.authenticatedUser(); + this.loanEventApiJsonValidator.validateForBulkLoanReassignment(command.json()); final Long fromLoanOfficerId = command.longValueOfParameterNamed("fromLoanOfficerId"); final Long toLoanOfficerId = command.longValueOfParameterNamed("toLoanOfficerId"); @@ -950,7 +951,6 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf loan.reassignLoanOfficer(toLoanOfficer, dateOfLoanOfficerAssignment); this.loanRepository.save(loan); } - this.loanRepository.flush(); return new CommandProcessingResultBuilder() //