add loan resource to support retrieve of individual loan.
This commit is contained in:
@@ -2,7 +2,6 @@ package org.mifosng.platform;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.mifosng.data.LoanAccountData;
|
|
||||||
import org.mifosng.data.LoanRepaymentData;
|
import org.mifosng.data.LoanRepaymentData;
|
||||||
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
||||||
import org.mifosng.data.OrganisationReadModel;
|
import org.mifosng.data.OrganisationReadModel;
|
||||||
@@ -13,8 +12,6 @@ public interface ReadPlatformService {
|
|||||||
|
|
||||||
NewLoanWorkflowStepOneData retrieveClientAndProductDetails(Long clientId, Long productId);
|
NewLoanWorkflowStepOneData retrieveClientAndProductDetails(Long clientId, Long productId);
|
||||||
|
|
||||||
LoanAccountData retrieveLoanAccountDetails(Long loanId);
|
|
||||||
|
|
||||||
LoanRepaymentData retrieveNewLoanRepaymentDetails(Long loanId);
|
LoanRepaymentData retrieveNewLoanRepaymentDetails(Long loanId);
|
||||||
|
|
||||||
LoanRepaymentData retrieveNewLoanWaiverDetails(Long loanId);
|
LoanRepaymentData retrieveNewLoanWaiverDetails(Long loanId);
|
||||||
|
|||||||
@@ -13,14 +13,11 @@ import javax.sql.DataSource;
|
|||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.mifosng.data.ClientData;
|
import org.mifosng.data.ClientData;
|
||||||
import org.mifosng.data.CurrencyData;
|
import org.mifosng.data.CurrencyData;
|
||||||
import org.mifosng.data.DerivedLoanData;
|
|
||||||
import org.mifosng.data.LoanAccountData;
|
|
||||||
import org.mifosng.data.LoanProductData;
|
import org.mifosng.data.LoanProductData;
|
||||||
import org.mifosng.data.LoanRepaymentData;
|
import org.mifosng.data.LoanRepaymentData;
|
||||||
import org.mifosng.data.MoneyData;
|
import org.mifosng.data.MoneyData;
|
||||||
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
||||||
import org.mifosng.data.OrganisationReadModel;
|
import org.mifosng.data.OrganisationReadModel;
|
||||||
import org.mifosng.platform.client.domain.ClientRepository;
|
|
||||||
import org.mifosng.platform.client.service.ClientReadPlatformService;
|
import org.mifosng.platform.client.service.ClientReadPlatformService;
|
||||||
import org.mifosng.platform.currency.domain.ApplicationCurrency;
|
import org.mifosng.platform.currency.domain.ApplicationCurrency;
|
||||||
import org.mifosng.platform.currency.domain.ApplicationCurrencyRepository;
|
import org.mifosng.platform.currency.domain.ApplicationCurrencyRepository;
|
||||||
@@ -32,7 +29,6 @@ import org.mifosng.platform.loan.domain.LoanTransaction;
|
|||||||
import org.mifosng.platform.loan.domain.LoanTransactionRepository;
|
import org.mifosng.platform.loan.domain.LoanTransactionRepository;
|
||||||
import org.mifosng.platform.loanproduct.service.LoanProductReadPlatformService;
|
import org.mifosng.platform.loanproduct.service.LoanProductReadPlatformService;
|
||||||
import org.mifosng.platform.user.domain.AppUser;
|
import org.mifosng.platform.user.domain.AppUser;
|
||||||
import org.mifosng.platform.user.service.AppUserReadPlatformService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.jdbc.core.RowMapper;
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
|
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
|
||||||
@@ -45,31 +41,25 @@ import org.springframework.stereotype.Service;
|
|||||||
public class ReadPlatformServiceImpl implements ReadPlatformService {
|
public class ReadPlatformServiceImpl implements ReadPlatformService {
|
||||||
|
|
||||||
private final SimpleJdbcTemplate jdbcTemplate;
|
private final SimpleJdbcTemplate jdbcTemplate;
|
||||||
private final ClientRepository clientRepository;
|
|
||||||
private final LoanRepository loanRepository;
|
private final LoanRepository loanRepository;
|
||||||
private final LoanTransactionRepository loanTransactionRepository;
|
private final LoanTransactionRepository loanTransactionRepository;
|
||||||
private final ApplicationCurrencyRepository applicationCurrencyRepository;
|
private final ApplicationCurrencyRepository applicationCurrencyRepository;
|
||||||
private final LoanProductReadPlatformService loanProductReadPlatformService;
|
private final LoanProductReadPlatformService loanProductReadPlatformService;
|
||||||
private final AppUserReadPlatformService appUserReadPlatformService;
|
|
||||||
private final ClientReadPlatformService clientReadPlatformService;
|
private final ClientReadPlatformService clientReadPlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ReadPlatformServiceImpl(
|
public ReadPlatformServiceImpl(
|
||||||
final LoanProductReadPlatformService loanProductReadPlatformService,
|
final LoanProductReadPlatformService loanProductReadPlatformService,
|
||||||
final AppUserReadPlatformService appUserReadPlatformService,
|
|
||||||
final ClientReadPlatformService clientReadPlatformService,
|
final ClientReadPlatformService clientReadPlatformService,
|
||||||
final DataSource dataSource,
|
final DataSource dataSource,
|
||||||
final ClientRepository clientRepository,
|
|
||||||
final LoanRepository loanRepository,
|
final LoanRepository loanRepository,
|
||||||
final LoanTransactionRepository loanTransactionRepository,
|
final LoanTransactionRepository loanTransactionRepository,
|
||||||
final ApplicationCurrencyRepository applicationCurrencyRepository) {
|
final ApplicationCurrencyRepository applicationCurrencyRepository) {
|
||||||
this.loanProductReadPlatformService = loanProductReadPlatformService;
|
this.loanProductReadPlatformService = loanProductReadPlatformService;
|
||||||
this.appUserReadPlatformService = appUserReadPlatformService;
|
|
||||||
this.clientReadPlatformService = clientReadPlatformService;
|
this.clientReadPlatformService = clientReadPlatformService;
|
||||||
this.loanTransactionRepository = loanTransactionRepository;
|
this.loanTransactionRepository = loanTransactionRepository;
|
||||||
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
||||||
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
|
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
|
||||||
this.clientRepository = clientRepository;
|
|
||||||
this.loanRepository = loanRepository;
|
this.loanRepository = loanRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,112 +250,4 @@ public class ReadPlatformServiceImpl implements ReadPlatformService {
|
|||||||
}
|
}
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public LoanAccountData retrieveLoanAccountDetails(Long loanId) {
|
|
||||||
|
|
||||||
// TODO - OPTIMISE - prefer jdbc sql approach to return only what we
|
|
||||||
// need of loan information.
|
|
||||||
AppUser currentUser = extractAuthenticatedUser();
|
|
||||||
|
|
||||||
Loan loan = this.loanRepository.findOne(loansThatMatch(
|
|
||||||
currentUser.getOrganisation(), loanId));
|
|
||||||
|
|
||||||
ApplicationCurrency currency = this.applicationCurrencyRepository
|
|
||||||
.findOneByCode(loan.getLoanRepaymentScheduleDetail()
|
|
||||||
.getPrincipal().getCurrencyCode());
|
|
||||||
|
|
||||||
CurrencyData currencyData = new CurrencyData(currency.getCode(),
|
|
||||||
currency.getName(), currency.getDecimalPlaces(),
|
|
||||||
currency.getDisplaySymbol(), currency.getNameCode());
|
|
||||||
|
|
||||||
LoanAccountData loanData = convertToData(loan, currencyData);
|
|
||||||
|
|
||||||
return loanData;
|
|
||||||
}
|
|
||||||
|
|
||||||
private LoanAccountData convertToData(final Loan realLoan,
|
|
||||||
CurrencyData currencyData) {
|
|
||||||
|
|
||||||
DerivedLoanData loanData = realLoan.deriveLoanData(currencyData);
|
|
||||||
|
|
||||||
LocalDate expectedDisbursementDate = null;
|
|
||||||
if (realLoan.getExpectedDisbursedOnDate() != null) {
|
|
||||||
expectedDisbursementDate = new LocalDate(
|
|
||||||
realLoan.getExpectedDisbursedOnDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
Money loanPrincipal = realLoan.getLoanRepaymentScheduleDetail()
|
|
||||||
.getPrincipal();
|
|
||||||
MoneyData principal = MoneyData.of(currencyData,
|
|
||||||
loanPrincipal.getAmount());
|
|
||||||
|
|
||||||
Money loanArrearsTolerance = realLoan.getInArrearsTolerance();
|
|
||||||
MoneyData tolerance = MoneyData.of(currencyData,
|
|
||||||
loanArrearsTolerance.getAmount());
|
|
||||||
|
|
||||||
Money interestRebate = realLoan.getInterestRebateOwed();
|
|
||||||
MoneyData interestRebateOwed = MoneyData.of(currencyData,
|
|
||||||
interestRebate.getAmount());
|
|
||||||
|
|
||||||
boolean interestRebateOutstanding = false; // realLoan.isInterestRebateOutstanding(),
|
|
||||||
|
|
||||||
// permissions
|
|
||||||
boolean waiveAllowed = loanData.getSummary().isWaiveAllowed(tolerance)
|
|
||||||
&& realLoan.isNotClosed();
|
|
||||||
boolean undoDisbursalAllowed = realLoan.isDisbursed()
|
|
||||||
&& realLoan.isOpenWithNoRepaymentMade();
|
|
||||||
boolean makeRepaymentAllowed = realLoan.isDisbursed()
|
|
||||||
&& realLoan.isNotClosed();
|
|
||||||
|
|
||||||
LocalDate loanStatusDate = realLoan.getLoanStatusSinceDate();
|
|
||||||
|
|
||||||
boolean rejectAllowed = realLoan.isNotApproved()
|
|
||||||
&& realLoan.isNotDisbursed() && realLoan.isNotClosed();
|
|
||||||
boolean withdrawnByApplicantAllowed = realLoan.isNotDisbursed()
|
|
||||||
&& realLoan.isNotClosed();
|
|
||||||
boolean undoApprovalAllowed = realLoan.isApproved()
|
|
||||||
&& realLoan.isNotClosed();
|
|
||||||
boolean disbursalAllowed = realLoan.isApproved()
|
|
||||||
&& realLoan.isNotDisbursed() && realLoan.isNotClosed();
|
|
||||||
|
|
||||||
return new LoanAccountData(realLoan.isClosed(), realLoan.isOpen(),
|
|
||||||
realLoan.isOpenWithRepaymentMade(), interestRebateOutstanding,
|
|
||||||
realLoan.isSubmittedAndPendingApproval(),
|
|
||||||
realLoan.isWaitingForDisbursal(), undoDisbursalAllowed,
|
|
||||||
makeRepaymentAllowed, rejectAllowed,
|
|
||||||
withdrawnByApplicantAllowed, undoApprovalAllowed,
|
|
||||||
disbursalAllowed, realLoan.getLoanStatusDisplayName(),
|
|
||||||
loanStatusDate, realLoan.getId(), realLoan.getExternalId(),
|
|
||||||
realLoan.getLoanProduct().getName(),
|
|
||||||
realLoan.getClosedOnDate(), realLoan.getSubmittedOnDate(),
|
|
||||||
realLoan.getApprovedOnDate(), expectedDisbursementDate,
|
|
||||||
realLoan.getDisbursedOnDate(),
|
|
||||||
realLoan.getExpectedMaturityDate(),
|
|
||||||
realLoan.getExpectedFirstRepaymentOnDate(),
|
|
||||||
realLoan.getInterestCalculatedFromDate(), principal, realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getAnnualNominalInterestRate(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getNominalInterestRatePerPeriod(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getInterestPeriodFrequencyType().getValue(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getInterestPeriodFrequencyType().toString(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail().getInterestMethod()
|
|
||||||
.getValue(), realLoan.getLoanRepaymentScheduleDetail()
|
|
||||||
.getInterestMethod().toString(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getAmortizationMethod().getValue(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getAmortizationMethod().toString(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getNumberOfRepayments(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail().getRepayEvery(),
|
|
||||||
realLoan.getLoanRepaymentScheduleDetail()
|
|
||||||
.getRepaymentPeriodFrequencyType().getValue(), realLoan
|
|
||||||
.getLoanRepaymentScheduleDetail()
|
|
||||||
.getRepaymentPeriodFrequencyType().toString(),
|
|
||||||
tolerance, loanData, waiveAllowed, interestRebateOwed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package org.mifosng.platform.api;
|
||||||
|
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
import org.mifosng.data.LoanAccountData;
|
||||||
|
import org.mifosng.platform.ReadPlatformService;
|
||||||
|
import org.mifosng.platform.loan.service.LoanReadPlatformService;
|
||||||
|
import org.mifosng.platform.user.domain.AppUser;
|
||||||
|
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.context.SecurityContext;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Path("/v1/loans")
|
||||||
|
@Component
|
||||||
|
@Scope("singleton")
|
||||||
|
public class LoansApiResource {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LoanReadPlatformService loanReadPlatformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReadPlatformService readPlatformService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AppUserRepository appUserRepository;
|
||||||
|
|
||||||
|
private void hardcodeUserIntoSecurityContext() {
|
||||||
|
AppUser currentUser = this.appUserRepository.findOne(Long.valueOf(1));
|
||||||
|
|
||||||
|
Authentication auth = new UsernamePasswordAuthenticationToken(currentUser, currentUser, currentUser.getAuthorities());
|
||||||
|
SecurityContext context = SecurityContextHolder.getContext();
|
||||||
|
context.setAuthentication(auth);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("{loanId}")
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON})
|
||||||
|
public Response retrieveLoanAccountDetails(@PathParam("loanId") final Long loanId) {
|
||||||
|
|
||||||
|
hardcodeUserIntoSecurityContext();
|
||||||
|
|
||||||
|
LoanAccountData loanAccount = this.loanReadPlatformService.retrieveLoanAccountDetails(loanId);
|
||||||
|
|
||||||
|
return Response.ok().entity(loanAccount).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package org.mifosng.platform.loan.service;
|
||||||
|
|
||||||
|
import org.mifosng.data.LoanAccountData;
|
||||||
|
|
||||||
|
public interface LoanReadPlatformService {
|
||||||
|
|
||||||
|
LoanAccountData retrieveLoanAccountDetails(Long loanId);
|
||||||
|
}
|
||||||
+148
@@ -0,0 +1,148 @@
|
|||||||
|
package org.mifosng.platform.loan.service;
|
||||||
|
|
||||||
|
import static org.mifosng.platform.Specifications.loansThatMatch;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.joda.time.LocalDate;
|
||||||
|
import org.mifosng.data.CurrencyData;
|
||||||
|
import org.mifosng.data.DerivedLoanData;
|
||||||
|
import org.mifosng.data.LoanAccountData;
|
||||||
|
import org.mifosng.data.MoneyData;
|
||||||
|
import org.mifosng.platform.currency.domain.ApplicationCurrency;
|
||||||
|
import org.mifosng.platform.currency.domain.ApplicationCurrencyRepository;
|
||||||
|
import org.mifosng.platform.currency.domain.Money;
|
||||||
|
import org.mifosng.platform.loan.domain.Loan;
|
||||||
|
import org.mifosng.platform.loan.domain.LoanRepository;
|
||||||
|
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||||
|
import org.mifosng.platform.user.domain.AppUser;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
|
||||||
|
|
||||||
|
private final SimpleJdbcTemplate jdbcTemplate;
|
||||||
|
private final PlatformSecurityContext context;
|
||||||
|
private final LoanRepository loanRepository;
|
||||||
|
private final ApplicationCurrencyRepository applicationCurrencyRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public LoanReadPlatformServiceImpl(final PlatformSecurityContext context, final DataSource dataSource,
|
||||||
|
final LoanRepository loanRepository, final ApplicationCurrencyRepository applicationCurrencyRepository) {
|
||||||
|
this.context = context;
|
||||||
|
this.loanRepository = loanRepository;
|
||||||
|
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
||||||
|
this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LoanAccountData retrieveLoanAccountDetails(Long loanId) {
|
||||||
|
|
||||||
|
// TODO - OPTIMISE - prefer jdbc sql approach to return only what we
|
||||||
|
// need of loan information.
|
||||||
|
AppUser currentUser = context.authenticatedUser();
|
||||||
|
|
||||||
|
Loan loan = this.loanRepository.findOne(loansThatMatch(
|
||||||
|
currentUser.getOrganisation(), loanId));
|
||||||
|
|
||||||
|
ApplicationCurrency currency = this.applicationCurrencyRepository
|
||||||
|
.findOneByCode(loan.getLoanRepaymentScheduleDetail()
|
||||||
|
.getPrincipal().getCurrencyCode());
|
||||||
|
|
||||||
|
CurrencyData currencyData = new CurrencyData(currency.getCode(),
|
||||||
|
currency.getName(), currency.getDecimalPlaces(),
|
||||||
|
currency.getDisplaySymbol(), currency.getNameCode());
|
||||||
|
|
||||||
|
LoanAccountData loanData = convertToData(loan, currencyData);
|
||||||
|
|
||||||
|
return loanData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LoanAccountData convertToData(final Loan realLoan,
|
||||||
|
CurrencyData currencyData) {
|
||||||
|
|
||||||
|
DerivedLoanData loanData = realLoan.deriveLoanData(currencyData);
|
||||||
|
|
||||||
|
LocalDate expectedDisbursementDate = null;
|
||||||
|
if (realLoan.getExpectedDisbursedOnDate() != null) {
|
||||||
|
expectedDisbursementDate = new LocalDate(
|
||||||
|
realLoan.getExpectedDisbursedOnDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
Money loanPrincipal = realLoan.getLoanRepaymentScheduleDetail()
|
||||||
|
.getPrincipal();
|
||||||
|
MoneyData principal = MoneyData.of(currencyData,
|
||||||
|
loanPrincipal.getAmount());
|
||||||
|
|
||||||
|
Money loanArrearsTolerance = realLoan.getInArrearsTolerance();
|
||||||
|
MoneyData tolerance = MoneyData.of(currencyData,
|
||||||
|
loanArrearsTolerance.getAmount());
|
||||||
|
|
||||||
|
Money interestRebate = realLoan.getInterestRebateOwed();
|
||||||
|
MoneyData interestRebateOwed = MoneyData.of(currencyData,
|
||||||
|
interestRebate.getAmount());
|
||||||
|
|
||||||
|
boolean interestRebateOutstanding = false; // realLoan.isInterestRebateOutstanding(),
|
||||||
|
|
||||||
|
// permissions
|
||||||
|
boolean waiveAllowed = loanData.getSummary().isWaiveAllowed(tolerance)
|
||||||
|
&& realLoan.isNotClosed();
|
||||||
|
boolean undoDisbursalAllowed = realLoan.isDisbursed()
|
||||||
|
&& realLoan.isOpenWithNoRepaymentMade();
|
||||||
|
boolean makeRepaymentAllowed = realLoan.isDisbursed()
|
||||||
|
&& realLoan.isNotClosed();
|
||||||
|
|
||||||
|
LocalDate loanStatusDate = realLoan.getLoanStatusSinceDate();
|
||||||
|
|
||||||
|
boolean rejectAllowed = realLoan.isNotApproved()
|
||||||
|
&& realLoan.isNotDisbursed() && realLoan.isNotClosed();
|
||||||
|
boolean withdrawnByApplicantAllowed = realLoan.isNotDisbursed()
|
||||||
|
&& realLoan.isNotClosed();
|
||||||
|
boolean undoApprovalAllowed = realLoan.isApproved()
|
||||||
|
&& realLoan.isNotClosed();
|
||||||
|
boolean disbursalAllowed = realLoan.isApproved()
|
||||||
|
&& realLoan.isNotDisbursed() && realLoan.isNotClosed();
|
||||||
|
|
||||||
|
return new LoanAccountData(realLoan.isClosed(), realLoan.isOpen(),
|
||||||
|
realLoan.isOpenWithRepaymentMade(), interestRebateOutstanding,
|
||||||
|
realLoan.isSubmittedAndPendingApproval(),
|
||||||
|
realLoan.isWaitingForDisbursal(), undoDisbursalAllowed,
|
||||||
|
makeRepaymentAllowed, rejectAllowed,
|
||||||
|
withdrawnByApplicantAllowed, undoApprovalAllowed,
|
||||||
|
disbursalAllowed, realLoan.getLoanStatusDisplayName(),
|
||||||
|
loanStatusDate, realLoan.getId(), realLoan.getExternalId(),
|
||||||
|
realLoan.getLoanProduct().getName(),
|
||||||
|
realLoan.getClosedOnDate(), realLoan.getSubmittedOnDate(),
|
||||||
|
realLoan.getApprovedOnDate(), expectedDisbursementDate,
|
||||||
|
realLoan.getDisbursedOnDate(),
|
||||||
|
realLoan.getExpectedMaturityDate(),
|
||||||
|
realLoan.getExpectedFirstRepaymentOnDate(),
|
||||||
|
realLoan.getInterestCalculatedFromDate(), principal, realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getAnnualNominalInterestRate(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getNominalInterestRatePerPeriod(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getInterestPeriodFrequencyType().getValue(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getInterestPeriodFrequencyType().toString(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail().getInterestMethod()
|
||||||
|
.getValue(), realLoan.getLoanRepaymentScheduleDetail()
|
||||||
|
.getInterestMethod().toString(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getAmortizationMethod().getValue(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getAmortizationMethod().toString(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getNumberOfRepayments(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail().getRepayEvery(),
|
||||||
|
realLoan.getLoanRepaymentScheduleDetail()
|
||||||
|
.getRepaymentPeriodFrequencyType().getValue(), realLoan
|
||||||
|
.getLoanRepaymentScheduleDetail()
|
||||||
|
.getRepaymentPeriodFrequencyType().toString(),
|
||||||
|
tolerance, loanData, waiveAllowed, interestRebateOwed);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,7 +19,6 @@ import javax.ws.rs.core.Response.Status;
|
|||||||
import org.mifosng.data.EntityIdentifier;
|
import org.mifosng.data.EntityIdentifier;
|
||||||
import org.mifosng.data.ErrorResponse;
|
import org.mifosng.data.ErrorResponse;
|
||||||
import org.mifosng.data.ErrorResponseList;
|
import org.mifosng.data.ErrorResponseList;
|
||||||
import org.mifosng.data.LoanAccountData;
|
|
||||||
import org.mifosng.data.LoanRepaymentData;
|
import org.mifosng.data.LoanRepaymentData;
|
||||||
import org.mifosng.data.LoanSchedule;
|
import org.mifosng.data.LoanSchedule;
|
||||||
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
import org.mifosng.data.NewLoanWorkflowStepOneData;
|
||||||
@@ -35,8 +34,8 @@ import org.mifosng.platform.ReadPlatformService;
|
|||||||
import org.mifosng.platform.ReadPlatformServiceImpl;
|
import org.mifosng.platform.ReadPlatformServiceImpl;
|
||||||
import org.mifosng.platform.WritePlatformService;
|
import org.mifosng.platform.WritePlatformService;
|
||||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
|
||||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||||
|
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -153,37 +152,6 @@ public class LoanResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("{loanId}")
|
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
|
||||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
|
||||||
public Response retrieveLoanAccountDetails(@PathParam("loanId") final Long loanId) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
LoanAccountData loanAccount = this.readPlatformService.retrieveLoanAccountDetails(loanId);
|
|
||||||
|
|
||||||
return Response.ok().entity(loanAccount).build();
|
|
||||||
} catch (UnAuthenticatedUserException e) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
|
||||||
} catch (AccessDeniedException e) {
|
|
||||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
|
||||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
|
||||||
} catch (ApplicationDomainRuleException e) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
|
||||||
} catch (NewDataValidationException e) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
|
||||||
|
|
||||||
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
|
||||||
ErrorResponse err = new ErrorResponse("unknown.error", "error", e.getMessage());
|
|
||||||
allErrors.add(err);
|
|
||||||
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(allErrors)).build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@DELETE
|
@DELETE
|
||||||
@Path("{loanId}")
|
@Path("{loanId}")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
|
|||||||
Reference in New Issue
Block a user