FINERACT-1971: update installment accrued portions on charge accrual
This commit is contained in:
@@ -769,6 +769,13 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
|
|||||||
transactionDate, feeCharges, penaltyCharges, externalId);
|
transactionDate, feeCharges, penaltyCharges, externalId);
|
||||||
|
|
||||||
Integer installmentNumber = null;
|
Integer installmentNumber = null;
|
||||||
|
final LoanRepaymentScheduleInstallment installmentForCharge = this.getRelatedRepaymentScheduleInstallment(loanCharge.getDueDate());
|
||||||
|
if (installmentForCharge != null) {
|
||||||
|
installmentForCharge.updateAccrualPortion(installmentForCharge.getInterestAccrued(this.getCurrency()),
|
||||||
|
installmentForCharge.getFeeAccrued(this.getCurrency()).add(feeCharges),
|
||||||
|
installmentForCharge.getPenaltyAccrued(this.getCurrency()).add(penaltyCharges));
|
||||||
|
installmentNumber = installmentForCharge.getInstallmentNumber();
|
||||||
|
}
|
||||||
final LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(applyLoanChargeTransaction, loanCharge,
|
final LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(applyLoanChargeTransaction, loanCharge,
|
||||||
loanCharge.getAmount(getCurrency()).getAmount(), installmentNumber);
|
loanCharge.getAmount(getCurrency()).getAmount(), installmentNumber);
|
||||||
applyLoanChargeTransaction.getLoanChargesPaid().add(loanChargePaidBy);
|
applyLoanChargeTransaction.getLoanChargesPaid().add(loanChargePaidBy);
|
||||||
|
|||||||
+24
@@ -25,7 +25,9 @@ import org.apache.fineract.client.models.GetLoansLoanIdResponse;
|
|||||||
import org.apache.fineract.client.models.PostChargesResponse;
|
import org.apache.fineract.client.models.PostChargesResponse;
|
||||||
import org.apache.fineract.client.models.PostLoanProductsResponse;
|
import org.apache.fineract.client.models.PostLoanProductsResponse;
|
||||||
import org.apache.fineract.client.models.PostLoansResponse;
|
import org.apache.fineract.client.models.PostLoansResponse;
|
||||||
|
import org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
|
||||||
import org.apache.fineract.integrationtests.common.ClientHelper;
|
import org.apache.fineract.integrationtests.common.ClientHelper;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@@ -65,4 +67,26 @@ public class LoanChargeProgressiveTest extends BaseLoanIntegrationTest {
|
|||||||
validateRepaymentPeriod(loanDetails2, 5, LocalDate.of(2024, 10, 2), 0, 20, 0, 0);
|
validateRepaymentPeriod(loanDetails2, 5, LocalDate.of(2024, 10, 2), 0, 20, 0, 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void immediateChargeAccrualPostMaturityTest() {
|
||||||
|
runAt("03 October 2024", () -> {
|
||||||
|
executeInlineCOB(loanId);
|
||||||
|
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_IMMEDIATE_CHARGE_ACCRUAL_POST_MATURITY,
|
||||||
|
true);
|
||||||
|
final PostChargesResponse chargeResponse = createCharge(20.0d, "EUR");
|
||||||
|
addLoanCharge(loanId, chargeResponse.getResourceId(), "03 October 2024", 20.0d);
|
||||||
|
final GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
|
||||||
|
Assertions.assertTrue(
|
||||||
|
loanDetails.getTransactions().stream().anyMatch(t -> t.getType().getAccrual() && t.getAmount().equals(20.0d)));
|
||||||
|
});
|
||||||
|
runAt("04 October 2024", () -> {
|
||||||
|
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_IMMEDIATE_CHARGE_ACCRUAL_POST_MATURITY,
|
||||||
|
false);
|
||||||
|
executeInlineCOB(loanId);
|
||||||
|
final GetLoansLoanIdResponse loanDetails = loanTransactionHelper.getLoanDetails(loanId);
|
||||||
|
Assertions.assertTrue(
|
||||||
|
loanDetails.getTransactions().stream().anyMatch(t -> t.getType().getAccrual() && t.getAmount().equals(20.0d)));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user