Skip to content

Commit fb91081

Browse files
FINERACT-2324: Remove "loan.getLoanTransactions()" from processLatestTransaction, builder for ProgressiveTransactionCtx
1 parent dcf9824 commit fb91081

File tree

8 files changed

+36
-48
lines changed

8 files changed

+36
-48
lines changed

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/TransactionCtx.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,16 @@
2020

2121
import java.util.List;
2222
import java.util.Set;
23-
import lombok.AllArgsConstructor;
24-
import lombok.Builder;
2523
import lombok.Data;
24+
import lombok.experimental.SuperBuilder;
2625
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
2726
import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail;
2827
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
2928
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
3029
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
3130

3231
@Data
33-
@Builder
34-
@AllArgsConstructor
32+
@SuperBuilder
3533
public class TransactionCtx {
3634

3735
private final MonetaryCurrency currency;

fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/delinquency/service/ProgressivePossibleNextRepaymentCalculationServiceImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020

2121
import java.math.BigDecimal;
2222
import java.time.LocalDate;
23-
import java.util.Collections;
2423
import java.util.List;
2524
import java.util.Optional;
2625
import java.util.Set;
2726
import lombok.RequiredArgsConstructor;
2827
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
28+
import org.apache.fineract.organisation.monetary.domain.Money;
2929
import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail;
3030
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
3131
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
@@ -58,8 +58,10 @@ public BigDecimal calculateInterestRecalculationFutureOutstandingValue(Loan loan
5858
return BigDecimal.ZERO;
5959
}
6060
List<LoanRepaymentScheduleInstallment> repaymentScheduleInstallments = loan.getRepaymentScheduleInstallments();
61-
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(loan.getCurrency(), repaymentScheduleInstallments, Set.of(),
62-
new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), scheduleModel, Collections.emptyList());
61+
final ProgressiveTransactionCtx ctx = ProgressiveTransactionCtx.builder().currency(loan.getCurrency())
62+
.installments(repaymentScheduleInstallments).charges(Set.of())
63+
.overpaymentHolder(new MoneyHolder(loan.getTotalOverpaidAsMoney())).changedTransactionDetail(new ChangedTransactionDetail())
64+
.sumOfInterestRefundAmount(Money.zero(currency)).model(scheduleModel).build();
6365
ctx.setChargedOff(loan.isChargedOff());
6466
ctx.setWrittenOff(loan.isClosedWrittenOff());
6567
ctx.setContractTerminated(loan.isContractTermination());

fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,9 @@ public Pair<ChangedTransactionDetail, ProgressiveLoanInterestScheduleModel> repr
233233
final LoanProductRelatedDetail loanProductRelatedDetail = loan.getLoanRepaymentScheduleDetail();
234234
ProgressiveLoanInterestScheduleModel scheduleModel = emiCalculator.generateInstallmentInterestScheduleModel(installments,
235235
loanProductRelatedDetail, loanTermVariations, installmentAmountInMultiplesOf, overpaymentHolder.getMoneyObject().getMc());
236-
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(currency, installments, charges, overpaymentHolder,
237-
changedTransactionDetail, scheduleModel, loanTransactions);
236+
final ProgressiveTransactionCtx ctx = ProgressiveTransactionCtx.builder().currency(currency).installments(installments)
237+
.charges(charges).overpaymentHolder(overpaymentHolder).changedTransactionDetail(changedTransactionDetail)
238+
.model(scheduleModel).sumOfInterestRefundAmount(Money.zero(currency)).loanTransactions(loanTransactions).build();
238239

239240
List<ChangeOperation> changeOperations = createSortedChangeList(loanTermVariations, loanTransactionsToReprocess, charges);
240241

fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/ProgressiveTransactionCtx.java

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,30 @@
2020

2121
import java.util.ArrayList;
2222
import java.util.List;
23-
import java.util.Set;
2423
import lombok.Getter;
2524
import lombok.Setter;
26-
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
25+
import lombok.experimental.SuperBuilder;
2726
import org.apache.fineract.organisation.monetary.domain.Money;
28-
import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail;
29-
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
3027
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
3128
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
32-
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.MoneyHolder;
3329
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.TransactionCtx;
3430
import org.apache.fineract.portfolio.loanproduct.calc.data.ProgressiveLoanInterestScheduleModel;
3531

3632
@Getter
33+
@SuperBuilder
3734
public class ProgressiveTransactionCtx extends TransactionCtx {
3835

3936
private final ProgressiveLoanInterestScheduleModel model;
4037
private final List<LoanTransaction> alreadyProcessedTransactions = new ArrayList<>();
4138
@Setter
4239
private Money sumOfInterestRefundAmount;
4340
@Setter
44-
private boolean isChargedOff = false;
41+
private boolean isChargedOff;
4542
@Setter
46-
private boolean isWrittenOff = false;
43+
private boolean isWrittenOff;
4744
@Setter
48-
private boolean isContractTerminated = false;
45+
private boolean isContractTerminated;
4946
@Setter
50-
private boolean isPrepayAttempt = false;
47+
private boolean isPrepayAttempt;
5148
private final List<LoanRepaymentScheduleInstallment> skipRepaymentScheduleInstallments = new ArrayList<>();
52-
53-
public ProgressiveTransactionCtx(MonetaryCurrency currency, List<LoanRepaymentScheduleInstallment> installments,
54-
Set<LoanCharge> charges, MoneyHolder overpaymentHolder, ChangedTransactionDetail changedTransactionDetail,
55-
ProgressiveLoanInterestScheduleModel model, List<LoanTransaction> loanTransactions) {
56-
this(currency, installments, charges, overpaymentHolder, changedTransactionDetail, model, Money.zero(currency), loanTransactions);
57-
}
58-
59-
public ProgressiveTransactionCtx(MonetaryCurrency currency, List<LoanRepaymentScheduleInstallment> installments,
60-
Set<LoanCharge> charges, MoneyHolder overpaymentHolder, ChangedTransactionDetail changedTransactionDetail,
61-
ProgressiveLoanInterestScheduleModel model, Money sumOfInterestRefundAmount, List<LoanTransaction> loanTransactions) {
62-
super(currency, installments, charges, overpaymentHolder, changedTransactionDetail, loanTransactions);
63-
this.sumOfInterestRefundAmount = sumOfInterestRefundAmount;
64-
this.model = model;
65-
}
6649
}

fineract-progressive-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/InterestScheduleModelRepositoryWrapperImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
import jakarta.persistence.FlushModeType;
2222
import jakarta.transaction.Transactional;
2323
import java.time.LocalDate;
24-
import java.util.Collections;
2524
import java.util.Optional;
2625
import java.util.Set;
2726
import java.util.concurrent.atomic.AtomicReference;
2827
import lombok.RequiredArgsConstructor;
2928
import org.apache.fineract.infrastructure.core.persistence.FlushModeHandler;
3029
import org.apache.fineract.infrastructure.core.service.DateUtils;
3130
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
31+
import org.apache.fineract.organisation.monetary.domain.Money;
3232
import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
3333
import org.apache.fineract.portfolio.loanaccount.domain.ChangedTransactionDetail;
3434
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
@@ -111,9 +111,11 @@ public Optional<ProgressiveLoanInterestScheduleModel> getSavedModel(Loan loan, L
111111
if (progressiveLoanModel.isPresent() && !progressiveLoanModel.get().getBusinessDate().isAfter(businessDate)) {
112112
savedModel = extractModel(progressiveLoanModel);
113113
if (savedModel.isPresent() && progressiveLoanModel.get().getBusinessDate().isBefore(businessDate)) {
114-
ProgressiveTransactionCtx ctx = new ProgressiveTransactionCtx(loan.getCurrency(), loan.getRepaymentScheduleInstallments(),
115-
Set.of(), new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), savedModel.get(),
116-
Collections.emptyList());
114+
final ProgressiveTransactionCtx ctx = ProgressiveTransactionCtx.builder().currency(loan.getCurrency()).charges(Set.of())
115+
.installments(loan.getRepaymentScheduleInstallments())
116+
.overpaymentHolder(new MoneyHolder(loan.getTotalOverpaidAsMoney()))
117+
.sumOfInterestRefundAmount(Money.zero(loan.getCurrency())).changedTransactionDetail(new ChangedTransactionDetail())
118+
.model(savedModel.get()).build();
117119
ctx.setChargedOff(loan.isChargedOff());
118120
ctx.setWrittenOff(loan.isClosedWrittenOff());
119121
ctx.setContractTerminated(loan.isContractTermination());

fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import java.time.LocalDate;
4444
import java.util.ArrayList;
4545
import java.util.Arrays;
46-
import java.util.Collections;
4746
import java.util.HashMap;
4847
import java.util.List;
4948
import java.util.Map;
@@ -493,8 +492,8 @@ public void testProcessLatestTransaction_PassesThroughHandlingPaymentAllocationF
493492
ChangedTransactionDetail changedTransactionDetail = mock(ChangedTransactionDetail.class);
494493

495494
// Set up TransactionCtx with installments and charges
496-
TransactionCtx ctx = new ProgressiveTransactionCtx(currency, installments, Set.of(), overpaymentHolder, changedTransactionDetail,
497-
model, Collections.emptyList());
495+
TransactionCtx ctx = ProgressiveTransactionCtx.builder().currency(currency).installments(installments)
496+
.overpaymentHolder(overpaymentHolder).changedTransactionDetail(changedTransactionDetail).model(model).build();
498497

499498
// Mock additional necessary methods
500499
LoanCharge loanCharge = mock(LoanCharge.class);
@@ -569,8 +568,8 @@ public void testDisbursementAfterMaturityDateWithEMICalculator() {
569568

570569
ProgressiveLoanInterestScheduleModel model = mock(ProgressiveLoanInterestScheduleModel.class);
571570

572-
TransactionCtx ctx = new ProgressiveTransactionCtx(currency, spyInstallments, Set.of(), new MoneyHolder(Money.zero(currency)),
573-
mock(ChangedTransactionDetail.class), model, Money.zero(currency), Collections.emptyList());
571+
TransactionCtx ctx = ProgressiveTransactionCtx.builder().currency(currency).installments(spyInstallments)
572+
.changedTransactionDetail(mock(ChangedTransactionDetail.class)).model(model).build();
574573

575574
underTest.processLatestTransaction(disbursementTransaction, ctx);
576575

fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanTransactionProcessingServiceImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,10 @@ private ChangedTransactionDetail processLatestTransactionProgressiveInterestReca
9999
.orElseGet(() -> advancedProcessor.calculateInterestScheduleModel(loan.getId(), loanTransaction.getTransactionDate()));
100100

101101
final List<LoanTransaction> transactions = loanTransactionService.retrieveListOfTransactionsForReprocessing(loan);
102-
ProgressiveTransactionCtx progressiveContext = new ProgressiveTransactionCtx(loan.getCurrency(),
103-
loan.getRepaymentScheduleInstallments(), loan.getActiveCharges(), new MoneyHolder(loan.getTotalOverpaidAsMoney()),
104-
new ChangedTransactionDetail(), model, getTotalRefundInterestAmount(loan), transactions);
102+
final ProgressiveTransactionCtx progressiveContext = ProgressiveTransactionCtx.builder().currency(loan.getCurrency())
103+
.installments(loan.getRepaymentScheduleInstallments()).charges(loan.getActiveCharges())
104+
.overpaymentHolder(new MoneyHolder(loan.getTotalOverpaidAsMoney())).changedTransactionDetail(new ChangedTransactionDetail())
105+
.model(model).sumOfInterestRefundAmount(getTotalRefundInterestAmount(loan)).loanTransactions(transactions).build();
105106
progressiveContext.getAlreadyProcessedTransactions().addAll(transactions);
106107
progressiveContext.setChargedOff(loan.isChargedOff());
107108
progressiveContext.setWrittenOff(loan.isClosedWrittenOff());

fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReprocessLoanTransactionsServiceImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public void processLatestTransaction(final LoanTransaction loanTransaction, fina
152152
List<LoanTransaction> transactions = Collections.emptyList();
153153
if (loanTransaction.isInterestRefund() || loanTransaction.isContractTermination() || loanTransaction.isChargeback()
154154
|| loanTransaction.isChargeOff()) {
155-
transactions = loan.getLoanTransactions();
155+
transactions = loanTransactionRepository.findNonReversedByLoan(loan);
156156
}
157157

158158
TransactionCtx transactionCtx;
@@ -161,9 +161,11 @@ public void processLatestTransaction(final LoanTransaction loanTransaction, fina
161161
loanTransaction.getTransactionDate());
162162
final ProgressiveLoanInterestScheduleModel model = savedModel
163163
.orElseGet(() -> advancedProcessor.calculateInterestScheduleModel(loan.getId(), loanTransaction.getTransactionDate()));
164-
transactionCtx = new ProgressiveTransactionCtx(loan.getCurrency(), loan.getRepaymentScheduleInstallments(),
165-
loan.getActiveCharges(), new MoneyHolder(loan.getTotalOverpaidAsMoney()), new ChangedTransactionDetail(), model,
166-
transactions);
164+
transactionCtx = ProgressiveTransactionCtx.builder().currency(loan.getCurrency())
165+
.installments(loan.getRepaymentScheduleInstallments()).charges(loan.getActiveCharges())
166+
.overpaymentHolder(new MoneyHolder(loan.getTotalOverpaidAsMoney()))
167+
.changedTransactionDetail(new ChangedTransactionDetail()).sumOfInterestRefundAmount(Money.zero(loan.getCurrency()))
168+
.model(model).loanTransactions(transactions).build();
167169
} else {
168170
transactionCtx = TransactionCtx.builder().currency(loan.getCurrency()).installments(loan.getRepaymentScheduleInstallments())
169171
.charges(loan.getActiveCharges()).overpaymentHolder(new MoneyHolder(loan.getTotalOverpaidAsMoney()))

0 commit comments

Comments
 (0)