You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2023/01/25 12:48:49 UTC
[fineract] branch develop updated: Revert "FINERACT-1840: Fee income is not realised if the loan got fully repaid (#2902)"
This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new a85845ba5 Revert "FINERACT-1840: Fee income is not realised if the loan got fully repaid (#2902)"
a85845ba5 is described below
commit a85845ba52f7650393845b742de0b771c228c540
Author: Arnold Gálovics <ga...@users.noreply.github.com>
AuthorDate: Wed Jan 25 12:09:03 2023 +0100
Revert "FINERACT-1840: Fee income is not realised if the loan got fully repaid (#2902)"
This reverts commit f3d7c042a453d2532e65685661dea1b699341bde.
---
.../domain/LoanAccountDomainServiceJpa.java | 89 ++++++++++------------
1 file changed, 40 insertions(+), 49 deletions(-)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
index 6b397732f..a66cdfc83 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java
@@ -544,59 +544,50 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService {
@Override
public void recalculateAccruals(Loan loan, boolean isInterestCalculationHappened) {
LocalDate accruedTill = loan.getAccruedTill();
- final LocalDate businessDate = DateUtils.getBusinessLocalDate();
- if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct() // Loan Product with Accrual Accounting
- && isInterestCalculationHappened // Loan Product with Interest Recalculation enabled
- // Loan Account accrued till is not equal to the Business Date
- && (accruedTill == null || !accruedTill.equals(businessDate)) && !loan.isNpa() // Loan Account is not
- // NPA
- ) {
- // Loan Account is Active OR is Recently Closed with Obligations Met
- if (loan.getStatus().isActive() || (loan.getStatus().isClosedObligationsMet() && loan.getClosedOnDate().equals(businessDate))) {
- if (accruedTill == null) {
- accruedTill = businessDate;
- }
+ if (!loan.isPeriodicAccrualAccountingEnabledOnLoanProduct() || !isInterestCalculationHappened || accruedTill == null || loan.isNpa()
+ || !loan.getStatus().isActive()) {
+ return;
+ }
+
+ boolean isOrganisationDateEnabled = this.configurationDomainService.isOrganisationstartDateEnabled();
+ LocalDate organisationStartDate = DateUtils.getBusinessLocalDate();
+ if (isOrganisationDateEnabled) {
+ organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate();
+ }
+ Collection<LoanScheduleAccrualData> loanScheduleAccrualList = new ArrayList<>();
+ List<LoanRepaymentScheduleInstallment> installments = loan.getRepaymentScheduleInstallments();
+ Long loanId = loan.getId();
+ Long officeId = loan.getOfficeId();
+ LocalDate accrualStartDate = null;
+ PeriodFrequencyType repaymentFrequency = loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType();
+ Integer repayEvery = loan.repaymentScheduleDetail().getRepayEvery();
+ LocalDate interestCalculatedFrom = loan.getInterestChargedFromDate();
+ Long loanProductId = loan.productId();
+ MonetaryCurrency currency = loan.getCurrency();
+ ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency);
+ CurrencyData currencyData = applicationCurrency.toData();
+ Set<LoanCharge> loanCharges = loan.getActiveCharges();
- boolean isOrganisationDateEnabled = this.configurationDomainService.isOrganisationstartDateEnabled();
- LocalDate organisationStartDate = businessDate;
- if (isOrganisationDateEnabled) {
- organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate();
- }
- Collection<LoanScheduleAccrualData> loanScheduleAccrualList = new ArrayList<>();
- List<LoanRepaymentScheduleInstallment> installments = loan.getRepaymentScheduleInstallments();
- Long loanId = loan.getId();
- Long officeId = loan.getOfficeId();
- LocalDate accrualStartDate = null;
- PeriodFrequencyType repaymentFrequency = loan.repaymentScheduleDetail().getRepaymentPeriodFrequencyType();
- Integer repayEvery = loan.repaymentScheduleDetail().getRepayEvery();
- LocalDate interestCalculatedFrom = loan.getInterestChargedFromDate();
- Long loanProductId = loan.productId();
- MonetaryCurrency currency = loan.getCurrency();
- ApplicationCurrency applicationCurrency = this.applicationCurrencyRepository.findOneWithNotFoundDetection(currency);
- CurrencyData currencyData = applicationCurrency.toData();
- Set<LoanCharge> loanCharges = loan.getActiveCharges();
-
- for (LoanRepaymentScheduleInstallment installment : installments) {
- if (installment.getDueDate().isAfter(loan.getMaturityDate())) {
- accruedTill = businessDate;
- }
- if (!isOrganisationDateEnabled || organisationStartDate.isBefore(installment.getDueDate())) {
- generateLoanScheduleAccrualData(accruedTill, loanScheduleAccrualList, loanId, officeId, accrualStartDate,
- repaymentFrequency, repayEvery, interestCalculatedFrom, loanProductId, currency, currencyData, loanCharges,
- installment);
- }
- }
+ for (LoanRepaymentScheduleInstallment installment : installments) {
+ if (installment.getDueDate().isAfter(loan.getMaturityDate())) {
+ accruedTill = DateUtils.getBusinessLocalDate();
+ }
+ if (!isOrganisationDateEnabled || organisationStartDate.isBefore(installment.getDueDate())) {
+ generateLoanScheduleAccrualData(accruedTill, loanScheduleAccrualList, loanId, officeId, accrualStartDate,
+ repaymentFrequency, repayEvery, interestCalculatedFrom, loanProductId, currency, currencyData, loanCharges,
+ installment);
+ }
+ }
- if (!loanScheduleAccrualList.isEmpty()) {
- try {
- this.loanAccrualPlatformService.addPeriodicAccruals(accruedTill, loanScheduleAccrualList);
- } catch (MultiException e) {
- String globalisationMessageCode = "error.msg.accrual.exception";
- throw new GeneralPlatformDomainRuleException(globalisationMessageCode, e.getMessage(), e);
- }
- }
+ if (!loanScheduleAccrualList.isEmpty()) {
+ try {
+ this.loanAccrualPlatformService.addPeriodicAccruals(accruedTill, loanScheduleAccrualList);
+ } catch (MultiException e) {
+ String globalisationMessageCode = "error.msg.accrual.exception";
+ throw new GeneralPlatformDomainRuleException(globalisationMessageCode, e.getMessage(), e);
}
}
+
}
private void generateLoanScheduleAccrualData(final LocalDate accruedTill,