FINERACT-2311: Buy Down Fees template API changes
This commit is contained in:
committed by
Adam Saghy
parent
dadc36b6b4
commit
70373eafef
-6
@@ -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.GLAccountBalanceHolder;
|
||||||
import org.apache.fineract.accounting.journalentry.data.LoanDTO;
|
import org.apache.fineract.accounting.journalentry.data.LoanDTO;
|
||||||
import org.apache.fineract.accounting.journalentry.data.LoanTransactionDTO;
|
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.accounting.producttoaccountmapping.domain.ProductToGLAccountMapping;
|
||||||
import org.apache.fineract.infrastructure.core.service.MathUtil;
|
import org.apache.fineract.infrastructure.core.service.MathUtil;
|
||||||
import org.apache.fineract.organisation.office.domain.Office;
|
import org.apache.fineract.organisation.office.domain.Office;
|
||||||
import org.apache.fineract.portfolio.PortfolioProductType;
|
import org.apache.fineract.portfolio.PortfolioProductType;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionEnumData;
|
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;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -50,9 +47,6 @@ public class AccrualBasedAccountingProcessorForLoan implements AccountingProcess
|
|||||||
|
|
||||||
private final AccountingProcessorHelper helper;
|
private final AccountingProcessorHelper helper;
|
||||||
private final JournalEntryWritePlatformService journalEntryWritePlatformService;
|
private final JournalEntryWritePlatformService journalEntryWritePlatformService;
|
||||||
private final LoanCapitalizedIncomeBalanceRepository loanCapitalizedIncomeBalanceRepository;
|
|
||||||
private final JournalEntryRepository journalEntryRepository;
|
|
||||||
private final LoanTransactionRepository loanTransactionRepository;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createJournalEntriesForLoan(final LoanDTO loanDTO) {
|
public void createJournalEntriesForLoan(final LoanDTO loanDTO) {
|
||||||
|
|||||||
+1
-20
@@ -488,36 +488,17 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
|||||||
case CAPITALIZED_INCOME:
|
case CAPITALIZED_INCOME:
|
||||||
final Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
|
final Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
|
||||||
BigDecimal capitalizedIncomeBalance = BigDecimal.ZERO;
|
BigDecimal capitalizedIncomeBalance = BigDecimal.ZERO;
|
||||||
BigDecimal buyDownFeeBalance = BigDecimal.ZERO;
|
|
||||||
if (loan.getLoanProduct().getLoanProductRelatedDetail().isEnableIncomeCapitalization()) {
|
if (loan.getLoanProduct().getLoanProductRelatedDetail().isEnableIncomeCapitalization()) {
|
||||||
capitalizedIncomeBalance = loanCapitalizedIncomeBalanceRepository.findAllByLoanId(loanId).stream()
|
capitalizedIncomeBalance = loanCapitalizedIncomeBalanceRepository.findAllByLoanId(loanId).stream()
|
||||||
.map(LoanCapitalizedIncomeBalance::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
.map(LoanCapitalizedIncomeBalance::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
}
|
}
|
||||||
// Calculate Buy Down Fee balance to subtract from Capitalized Income formula
|
transactionAmount = loan.getApprovedPrincipal().subtract(loan.getDisbursedAmount()).subtract(capitalizedIncomeBalance);
|
||||||
buyDownFeeBalance = loanBuyDownFeeBalanceRepository.findAllByLoanId(loanId).stream().map(LoanBuyDownFeeBalance::getAmount)
|
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
||||||
transactionAmount = loan.getApprovedPrincipal().subtract(loan.getDisbursedAmount()).subtract(capitalizedIncomeBalance)
|
|
||||||
.subtract(buyDownFeeBalance);
|
|
||||||
paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
|
paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
|
||||||
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
|
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
|
||||||
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
|
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
|
||||||
paymentOptions, retriveLoanCurrencyData(loanId));
|
paymentOptions, retriveLoanCurrencyData(loanId));
|
||||||
break;
|
break;
|
||||||
case BUY_DOWN_FEE:
|
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();
|
paymentOptions = this.paymentTypeReadPlatformService.retrieveAllPaymentTypes();
|
||||||
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
|
loanTransactionData = LoanTransactionData.loanTransactionDataForCreditTemplate(
|
||||||
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
|
LoanEnumerations.transactionType(transactionType), DateUtils.getBusinessLocalDate(), transactionAmount,
|
||||||
|
|||||||
+1
-1
@@ -233,7 +233,7 @@ public class LoanTransactionTest extends BaseLoanIntegrationTest {
|
|||||||
|
|
||||||
assertNotNull(transactionTemplate);
|
assertNotNull(transactionTemplate);
|
||||||
assertEquals("loanTransactionType." + buyDownFeeCommand, transactionTemplate.getType().getCode());
|
assertEquals("loanTransactionType." + buyDownFeeCommand, transactionTemplate.getType().getCode());
|
||||||
assertEquals(transactionTemplate.getAmount(), 200);
|
assertEquals(transactionTemplate.getAmount(), 0);
|
||||||
assertThat(transactionTemplate.getPaymentTypeOptions().size() > 0);
|
assertThat(transactionTemplate.getPaymentTypeOptions().size() > 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user