fix for repayment info
This commit is contained in:
+3
-1
@@ -541,7 +541,9 @@ public class LoanScheduleAssembler {
|
|||||||
validateDisbursementDateIsOnNonWorkingDay(loanApplicationTerms.getExpectedDisbursementDate(), workingDays);
|
validateDisbursementDateIsOnNonWorkingDay(loanApplicationTerms.getExpectedDisbursementDate(), workingDays);
|
||||||
validateDisbursementDateIsOnHoliday(loanApplicationTerms.getExpectedDisbursementDate(), isHolidayEnabled, holidays);
|
validateDisbursementDateIsOnHoliday(loanApplicationTerms.getExpectedDisbursementDate(), isHolidayEnabled, holidays);
|
||||||
|
|
||||||
return assembleLoanScheduleFrom(loanApplicationTerms, isHolidayEnabled, holidays, workingDays, element, null);
|
Set<LoanDisbursementDetails> loanDisbursementDetails = this.loanUtilService.fetchDisbursementData(element.getAsJsonObject());
|
||||||
|
|
||||||
|
return assembleLoanScheduleFrom(loanApplicationTerms, isHolidayEnabled, holidays, workingDays, element, loanDisbursementDetails);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoanScheduleModel assembleLoanScheduleFrom(final LoanApplicationTerms loanApplicationTerms, final boolean isHolidayEnabled,
|
public LoanScheduleModel assembleLoanScheduleFrom(final LoanApplicationTerms loanApplicationTerms, final boolean isHolidayEnabled,
|
||||||
|
|||||||
+1
-1
@@ -508,7 +508,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa
|
|||||||
LoanChargeData chargeData = new LoanChargeData(charge.getId(), charge.getDueLocalDate(), charge.amountOrPercentage());
|
LoanChargeData chargeData = new LoanChargeData(charge.getId(), charge.getDueLocalDate(), charge.amountOrPercentage());
|
||||||
chargesMap.put(charge.getId(), chargeData);
|
chargesMap.put(charge.getId(), chargeData);
|
||||||
}
|
}
|
||||||
Set<LoanDisbursementDetails> disbursementDetails = this.loanAssembler.fetchDisbursementData(command.parsedJson()
|
Set<LoanDisbursementDetails> disbursementDetails = this.loanUtilService.fetchDisbursementData(command.parsedJson()
|
||||||
.getAsJsonObject());
|
.getAsJsonObject());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+4
-43
@@ -20,13 +20,10 @@ package org.apache.fineract.portfolio.loanaccount.service;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
|
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
|
||||||
import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper;
|
import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper;
|
||||||
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
|
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
|
||||||
@@ -85,10 +82,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
|
|||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class LoanAssembler {
|
public class LoanAssembler {
|
||||||
@@ -110,6 +104,7 @@ public class LoanAssembler {
|
|||||||
private final HolidayRepository holidayRepository;
|
private final HolidayRepository holidayRepository;
|
||||||
private final ConfigurationDomainService configurationDomainService;
|
private final ConfigurationDomainService configurationDomainService;
|
||||||
private final WorkingDaysRepositoryWrapper workingDaysRepository;
|
private final WorkingDaysRepositoryWrapper workingDaysRepository;
|
||||||
|
private final LoanUtilService loanUtilService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public LoanAssembler(final FromJsonHelper fromApiJsonHelper, final LoanRepositoryWrapper loanRepository,
|
public LoanAssembler(final FromJsonHelper fromApiJsonHelper, final LoanRepositoryWrapper loanRepository,
|
||||||
@@ -121,7 +116,7 @@ public class LoanAssembler {
|
|||||||
final CollateralAssembler loanCollateralAssembler, final LoanSummaryWrapper loanSummaryWrapper,
|
final CollateralAssembler loanCollateralAssembler, final LoanSummaryWrapper loanSummaryWrapper,
|
||||||
final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory,
|
final LoanRepaymentScheduleTransactionProcessorFactory loanRepaymentScheduleTransactionProcessorFactory,
|
||||||
final HolidayRepository holidayRepository, final ConfigurationDomainService configurationDomainService,
|
final HolidayRepository holidayRepository, final ConfigurationDomainService configurationDomainService,
|
||||||
final WorkingDaysRepositoryWrapper workingDaysRepository) {
|
final WorkingDaysRepositoryWrapper workingDaysRepository, final LoanUtilService loanUtilService) {
|
||||||
this.fromApiJsonHelper = fromApiJsonHelper;
|
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||||
this.loanRepository = loanRepository;
|
this.loanRepository = loanRepository;
|
||||||
this.loanProductRepository = loanProductRepository;
|
this.loanProductRepository = loanProductRepository;
|
||||||
@@ -139,6 +134,7 @@ public class LoanAssembler {
|
|||||||
this.holidayRepository = holidayRepository;
|
this.holidayRepository = holidayRepository;
|
||||||
this.configurationDomainService = configurationDomainService;
|
this.configurationDomainService = configurationDomainService;
|
||||||
this.workingDaysRepository = workingDaysRepository;
|
this.workingDaysRepository = workingDaysRepository;
|
||||||
|
this.loanUtilService = loanUtilService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Loan assembleFrom(final Long accountId) {
|
public Loan assembleFrom(final Long accountId) {
|
||||||
@@ -192,7 +188,7 @@ public class LoanAssembler {
|
|||||||
}
|
}
|
||||||
BigDecimal maxOutstandingLoanBalance = null;
|
BigDecimal maxOutstandingLoanBalance = null;
|
||||||
if (loanProduct.isMultiDisburseLoan()) {
|
if (loanProduct.isMultiDisburseLoan()) {
|
||||||
disbursementDetails = fetchDisbursementData(element.getAsJsonObject());
|
disbursementDetails = this.loanUtilService.fetchDisbursementData(element.getAsJsonObject());
|
||||||
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(element.getAsJsonObject());
|
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(element.getAsJsonObject());
|
||||||
maxOutstandingLoanBalance = this.fromApiJsonHelper.extractBigDecimalNamed(LoanApiConstants.maxOutstandingBalanceParameterName,
|
maxOutstandingLoanBalance = this.fromApiJsonHelper.extractBigDecimalNamed(LoanApiConstants.maxOutstandingBalanceParameterName,
|
||||||
element, locale);
|
element, locale);
|
||||||
@@ -307,41 +303,6 @@ public class LoanAssembler {
|
|||||||
return loanApplication;
|
return loanApplication;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<LoanDisbursementDetails> fetchDisbursementData(final JsonObject command) {
|
|
||||||
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(command);
|
|
||||||
final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(command);
|
|
||||||
Set<LoanDisbursementDetails> disbursementDatas = new HashSet<>();
|
|
||||||
if (command.has(LoanApiConstants.disbursementDataParameterName)) {
|
|
||||||
final JsonArray disbursementDataArray = command.getAsJsonArray(LoanApiConstants.disbursementDataParameterName);
|
|
||||||
if (disbursementDataArray != null && disbursementDataArray.size() > 0) {
|
|
||||||
int i = 0;
|
|
||||||
do {
|
|
||||||
final JsonObject jsonObject = disbursementDataArray.get(i).getAsJsonObject();
|
|
||||||
Date expectedDisbursementDate = null;
|
|
||||||
Date actualDisbursementDate = null;
|
|
||||||
BigDecimal principal = null;
|
|
||||||
|
|
||||||
if (jsonObject.has(LoanApiConstants.disbursementDateParameterName)) {
|
|
||||||
LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName,
|
|
||||||
jsonObject, dateFormat, locale);
|
|
||||||
if (date != null) {
|
|
||||||
expectedDisbursementDate = date.toDate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (jsonObject.has(LoanApiConstants.disbursementPrincipalParameterName)
|
|
||||||
&& jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).isJsonPrimitive()
|
|
||||||
&& StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) {
|
|
||||||
principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal();
|
|
||||||
}
|
|
||||||
|
|
||||||
disbursementDatas.add(new LoanDisbursementDetails(expectedDisbursementDate, actualDisbursementDate, principal));
|
|
||||||
i++;
|
|
||||||
} while (i < disbursementDataArray.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return disbursementDatas;
|
|
||||||
}
|
|
||||||
|
|
||||||
private LoanLifecycleStateMachine defaultLoanLifecycleStateMachine() {
|
private LoanLifecycleStateMachine defaultLoanLifecycleStateMachine() {
|
||||||
final List<LoanStatus> allowedLoanStatuses = Arrays.asList(LoanStatus.values());
|
final List<LoanStatus> allowedLoanStatuses = Arrays.asList(LoanStatus.values());
|
||||||
return new DefaultLoanLifecycleStateMachine(allowedLoanStatuses);
|
return new DefaultLoanLifecycleStateMachine(allowedLoanStatuses);
|
||||||
|
|||||||
+49
-1
@@ -19,10 +19,15 @@
|
|||||||
package org.apache.fineract.portfolio.loanaccount.service;
|
package org.apache.fineract.portfolio.loanaccount.service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
|
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
|
||||||
|
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||||
import org.apache.fineract.organisation.holiday.domain.Holiday;
|
import org.apache.fineract.organisation.holiday.domain.Holiday;
|
||||||
import org.apache.fineract.organisation.holiday.domain.HolidayRepository;
|
import org.apache.fineract.organisation.holiday.domain.HolidayRepository;
|
||||||
import org.apache.fineract.organisation.holiday.domain.HolidayStatusType;
|
import org.apache.fineract.organisation.holiday.domain.HolidayStatusType;
|
||||||
@@ -42,15 +47,20 @@ import org.apache.fineract.portfolio.floatingrates.data.FloatingRateDTO;
|
|||||||
import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData;
|
import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData;
|
||||||
import org.apache.fineract.portfolio.floatingrates.exception.FloatingRateNotFoundException;
|
import org.apache.fineract.portfolio.floatingrates.exception.FloatingRateNotFoundException;
|
||||||
import org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformService;
|
import org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformService;
|
||||||
|
import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO;
|
import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
|
import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails;
|
||||||
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory;
|
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGeneratorFactory;
|
||||||
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
|
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class LoanUtilService {
|
public class LoanUtilService {
|
||||||
|
|
||||||
@@ -61,12 +71,14 @@ public class LoanUtilService {
|
|||||||
private final WorkingDaysRepositoryWrapper workingDaysRepository;
|
private final WorkingDaysRepositoryWrapper workingDaysRepository;
|
||||||
private final LoanScheduleGeneratorFactory loanScheduleFactory;
|
private final LoanScheduleGeneratorFactory loanScheduleFactory;
|
||||||
private final FloatingRatesReadPlatformService floatingRatesReadPlatformService;
|
private final FloatingRatesReadPlatformService floatingRatesReadPlatformService;
|
||||||
|
private final FromJsonHelper fromApiJsonHelper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public LoanUtilService(final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository,
|
public LoanUtilService(final ApplicationCurrencyRepositoryWrapper applicationCurrencyRepository,
|
||||||
final CalendarInstanceRepository calendarInstanceRepository, final ConfigurationDomainService configurationDomainService,
|
final CalendarInstanceRepository calendarInstanceRepository, final ConfigurationDomainService configurationDomainService,
|
||||||
final HolidayRepository holidayRepository, final WorkingDaysRepositoryWrapper workingDaysRepository,
|
final HolidayRepository holidayRepository, final WorkingDaysRepositoryWrapper workingDaysRepository,
|
||||||
final LoanScheduleGeneratorFactory loanScheduleFactory, final FloatingRatesReadPlatformService floatingRatesReadPlatformService) {
|
final LoanScheduleGeneratorFactory loanScheduleFactory, final FloatingRatesReadPlatformService floatingRatesReadPlatformService,
|
||||||
|
final FromJsonHelper fromApiJsonHelper) {
|
||||||
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
this.applicationCurrencyRepository = applicationCurrencyRepository;
|
||||||
this.calendarInstanceRepository = calendarInstanceRepository;
|
this.calendarInstanceRepository = calendarInstanceRepository;
|
||||||
this.configurationDomainService = configurationDomainService;
|
this.configurationDomainService = configurationDomainService;
|
||||||
@@ -74,6 +86,7 @@ public class LoanUtilService {
|
|||||||
this.workingDaysRepository = workingDaysRepository;
|
this.workingDaysRepository = workingDaysRepository;
|
||||||
this.loanScheduleFactory = loanScheduleFactory;
|
this.loanScheduleFactory = loanScheduleFactory;
|
||||||
this.floatingRatesReadPlatformService = floatingRatesReadPlatformService;
|
this.floatingRatesReadPlatformService = floatingRatesReadPlatformService;
|
||||||
|
this.fromApiJsonHelper = fromApiJsonHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom) {
|
public ScheduleGeneratorDTO buildScheduleGeneratorDTO(final Loan loan, final LocalDate recalculateFrom) {
|
||||||
@@ -205,4 +218,39 @@ public class LoanUtilService {
|
|||||||
return calculatedRepaymentsStartingFromDate;
|
return calculatedRepaymentsStartingFromDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<LoanDisbursementDetails> fetchDisbursementData(final JsonObject command) {
|
||||||
|
final Locale locale = this.fromApiJsonHelper.extractLocaleParameter(command);
|
||||||
|
final String dateFormat = this.fromApiJsonHelper.extractDateFormatParameter(command);
|
||||||
|
Set<LoanDisbursementDetails> disbursementDatas = new HashSet<>();
|
||||||
|
if (command.has(LoanApiConstants.disbursementDataParameterName)) {
|
||||||
|
final JsonArray disbursementDataArray = command.getAsJsonArray(LoanApiConstants.disbursementDataParameterName);
|
||||||
|
if (disbursementDataArray != null && disbursementDataArray.size() > 0) {
|
||||||
|
int i = 0;
|
||||||
|
do {
|
||||||
|
final JsonObject jsonObject = disbursementDataArray.get(i).getAsJsonObject();
|
||||||
|
Date expectedDisbursementDate = null;
|
||||||
|
Date actualDisbursementDate = null;
|
||||||
|
BigDecimal principal = null;
|
||||||
|
|
||||||
|
if (jsonObject.has(LoanApiConstants.disbursementDateParameterName)) {
|
||||||
|
LocalDate date = this.fromApiJsonHelper.extractLocalDateNamed(LoanApiConstants.disbursementDateParameterName,
|
||||||
|
jsonObject, dateFormat, locale);
|
||||||
|
if (date != null) {
|
||||||
|
expectedDisbursementDate = date.toDate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (jsonObject.has(LoanApiConstants.disbursementPrincipalParameterName)
|
||||||
|
&& jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).isJsonPrimitive()
|
||||||
|
&& StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) {
|
||||||
|
principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal();
|
||||||
|
}
|
||||||
|
|
||||||
|
disbursementDatas.add(new LoanDisbursementDetails(expectedDisbursementDate, actualDisbursementDate, principal));
|
||||||
|
i++;
|
||||||
|
} while (i < disbursementDataArray.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return disbursementDatas;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user