FINERACT-2311: Buy Down Fees template API changes

This commit is contained in:
Jose Alberto Hernandez
2025-07-28 14:09:58 +02:00
committed by Adam Saghy
parent dadc36b6b4
commit 70373eafef
3 changed files with 2 additions and 27 deletions
@@ -34,14 +34,11 @@ import org.apache.fineract.accounting.journalentry.data.ChargePaymentDTO;
import org.apache.fineract.accounting.journalentry.data.GLAccountBalanceHolder;
import org.apache.fineract.accounting.journalentry.data.LoanDTO;
import org.apache.fineract.accounting.journalentry.data.LoanTransactionDTO;
import org.apache.fineract.accounting.journalentry.domain.JournalEntryRepository;
import org.apache.fineract.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping;
import org.apache.fineract.infrastructure.core.service.MathUtil;
import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.portfolio.PortfolioProductType;
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionEnumData;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
import org.apache.fineract.portfolio.loanaccount.repository.LoanCapitalizedIncomeBalanceRepository;
import org.springframework.stereotype.Component;
@Component
@@ -50,9 +47,6 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess
private final AccountingProcessorHelper helper;
private final JournalEntryWritePlatformService journalEntryWritePlatformService;
private final LoanCapitalizedIncomeBalanceRepository loanCapitalizedIncomeBalanceRepository;
private final JournalEntryRepository journalEntryRepository;
private final LoanTransactionRepository loanTransactionRepository;
@Override
public void createJournalEntriesForLoan(final LoanDTO loanDTO) {
@@ -488,36 +488,17 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
case CAPITALIZED_INCOME:
final Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
BigDecimal capitalizedIncomeBalance = BigDecimal.ZERO;
BigDecimal buyDownFeeBalance = BigDecimal.ZERO;
if (loan.getLoanProduct().getLoanProductRelatedDetail().isEnableIncomeCapitalization()) {
capitalizedIncomeBalance = loanCapitalizedIncomeBalanceRepository.findAllByLoanId(loanId).stream()
.map(LoanCapitalizedIncomeBalance::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
}
// Calculate Buy Down Fee balance to subtract from Capitalized Income formula
buyDownFeeBalance = loanBuyDownFeeBalanceRepository.findAllByLoanId(loanId).stream().map(LoanBuyDownFeeBalance::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
transactionAmount = loan.getApprovedPrincipal().subtract(loan.getDisbursedAmount()).subtract(capitalizedIncomeBalance)
.subtract(buyDownFeeBalance);
transactionAmount = loan.getApprovedPrincipal().subtract(loan.getDisbursedAmount()).subtract(capitalizedIncomeBalance);
paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
paymentOptions, retriveLoanCurrencyData(loanId));
break;
case BUY_DOWN_FEE:
final Loan buyDownLoan = loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
BigDecimal buyDownFeeBalanceForCalc = BigDecimal.ZERO;
BigDecimal capitalizedIncomeBalanceForCalc = BigDecimal.ZERO;
// Calculate existing Buy Down Fee balance
buyDownFeeBalanceForCalc = loanBuyDownFeeBalanceRepository.findAllByLoanId(loanId).stream()
.map(LoanBuyDownFeeBalance::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
// Calculate Capitalized Income balance to subtract from Buy Down Fee formula
if (buyDownLoan.getLoanProduct().getLoanProductRelatedDetail().isEnableIncomeCapitalization()) {
capitalizedIncomeBalanceForCalc = loanCapitalizedIncomeBalanceRepository.findAllByLoanId(loanId).stream()
.map(LoanCapitalizedIncomeBalance::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
}
transactionAmount = buyDownLoan.getApprovedPrincipal().subtract(buyDownLoan.getDisbursedAmount())
.subtract(buyDownFeeBalanceForCalc).subtract(capitalizedIncomeBalanceForCalc);
paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
@@ -233,7 +233,7 @@ public class LoanTransactionTest extends BaseLoanIntegrationTest {
assertNotNull(transactionTemplate);
assertEquals("loanTransactionType." + buyDownFeeCommand, transactionTemplate.getType().getCode());
assertEquals(transactionTemplate.getAmount(), 200);
assertEquals(transactionTemplate.getAmount(), 0);
assertThat(transactionTemplate.getPaymentTypeOptions().size() > 0);
});
}