FINERACT-2311: Buy down fee - final amortization

- early repayment
- write off
- charge-off
This commit is contained in:
adam.magyari
2025-07-15 10:46:55 +02:00
committed by Adam Saghy
parent 35c51278f9
commit 880580f736
8 changed files with 319 additions and 15 deletions
@@ -1755,8 +1755,9 @@ public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
public LoanTransaction getLastUserTransaction() {
return getLoanTransactions().stream() //
.filter(t -> t.isNotReversed()
&& !(t.isAccrual() || t.isAccrualAdjustment() || t.isIncomePosting() || t.isCapitalizedIncomeAmortization())) //
.filter(t -> t.isNotReversed() && !(t.isAccrual() || t.isAccrualAdjustment() || t.isIncomePosting()
|| t.isCapitalizedIncomeAmortization() || t.isCapitalizedIncomeAmortizationAdjustment()
|| t.isBuyDownFeeAmortization() || t.isBuyDownFeeAmortizationAdjustment())) //
.reduce((first, second) -> second) //
.orElse(null);
}
@@ -706,6 +706,10 @@ public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long
return LoanTransactionType.CAPITALIZED_INCOME_AMORTIZATION.equals(getTypeOf()) && isNotReversed();
}
public boolean isCapitalizedIncomeAmortizationAdjustment() {
return LoanTransactionType.CAPITALIZED_INCOME_AMORTIZATION_ADJUSTMENT.equals(getTypeOf()) && isNotReversed();
}
public boolean isCapitalizedIncomeAdjustment() {
return LoanTransactionType.CAPITALIZED_INCOME_ADJUSTMENT.equals(getTypeOf()) && isNotReversed();
}
@@ -998,4 +1002,16 @@ public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long
public boolean isBuyDownFee() {
return LoanTransactionType.BUY_DOWN_FEE.equals(this.typeOf);
}
public boolean isBuyDownFeeAdjustment() {
return LoanTransactionType.BUY_DOWN_FEE_ADJUSTMENT.equals(this.typeOf);
}
public boolean isBuyDownFeeAmortization() {
return LoanTransactionType.BUY_DOWN_FEE_AMORTIZATION.equals(this.typeOf);
}
public boolean isBuyDownFeeAmortizationAdjustment() {
return LoanTransactionType.BUY_DOWN_FEE_AMORTIZATION_ADJUSTMENT.equals(this.typeOf);
}
}
@@ -20,9 +20,16 @@ package org.apache.fineract.portfolio.loanaccount.service;
import java.time.LocalDate;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
import org.springframework.lang.NonNull;
public interface LoanBuyDownFeeAmortizationProcessingService {
void processBuyDownFeeAmortizationTillDate(@NonNull Loan loan, @NonNull LocalDate tillDate, boolean addJournal);
void processBuyDownFeeAmortizationOnLoanClosure(@NonNull Loan loan, boolean addJournal);
void processBuyDownFeeAmortizationOnLoanChargeOff(@NonNull Loan loan, @NonNull LoanTransaction chargeOffTransaction);
void processBuyDownFeeAmortizationOnLoanUndoChargeOff(@NonNull LoanTransaction loanTransaction);
}