Skip to content

Commit

Permalink
Merge branch 'develop' into advancly
Browse files Browse the repository at this point in the history
  • Loading branch information
Jose Alberto Hernandez committed Feb 15, 2024
2 parents 5a02b66 + d06b056 commit 794ea11
Show file tree
Hide file tree
Showing 30 changed files with 2,313 additions and 142 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build-documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ jobs:
java-version: '17'
distribution: 'zulu'
cache: gradle
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: 16
- name: Congfigure vega-cli
run: npm i -g vega-cli --unsafe
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@83cf5fdbbf627c8da6fec32f28db58967a3136ac
uses: gradle/wrapper-validation-action@63d15e7a1e697b1de6f3ba0507106f89100c8518
- name: Install additional software
run: |
sudo apt-get update
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/build-mariadb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ jobs:
java-version: '17'
distribution: 'zulu'
cache: gradle
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: 16
- name: Congfigure vega-cli
run: npm i -g vega-cli --unsafe
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@83cf5fdbbf627c8da6fec32f28db58967a3136ac
uses: gradle/wrapper-validation-action@63d15e7a1e697b1de6f3ba0507106f89100c8518
- name: Verify MariaDB connection
run: |
while ! mysqladmin ping -h"127.0.0.1" -P3306 ; do
Expand Down Expand Up @@ -88,7 +88,7 @@ jobs:
- name: Archive test results
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: test-results
path: |
Expand All @@ -99,7 +99,7 @@ jobs:
- name: Archive server logs
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: server-logs
path: |
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/build-mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ jobs:
java-version: '17'
distribution: 'zulu'
cache: gradle
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: 16
- name: Congfigure vega-cli
run: npm i -g vega-cli --unsafe
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@83cf5fdbbf627c8da6fec32f28db58967a3136ac
uses: gradle/wrapper-validation-action@63d15e7a1e697b1de6f3ba0507106f89100c8518
- name: Verify MariaDB connection
run: |
while ! mysqladmin ping -h"127.0.0.1" -P3306 ; do
Expand Down Expand Up @@ -88,7 +88,7 @@ jobs:
- name: Archive test results
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: test-results
path: |
Expand All @@ -99,7 +99,7 @@ jobs:
- name: Archive server logs
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: server-logs
path: |
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/build-postgresql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@ jobs:
java-version: '17'
distribution: 'zulu'
cache: gradle
- uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: 16
- name: Congfigure vega-cli
run: npm i -g vega-cli --unsafe
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@83cf5fdbbf627c8da6fec32f28db58967a3136ac
uses: gradle/wrapper-validation-action@63d15e7a1e697b1de6f3ba0507106f89100c8518
- name: Verify PostgreSQL connection
run: |
while ! pg_isready -d postgres -U root -h 127.0.0.1 -p 5432 ; do
Expand Down Expand Up @@ -89,7 +89,7 @@ jobs:
- name: Archive test results
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: test-results
path: |
Expand All @@ -100,7 +100,7 @@ jobs:
- name: Archive server logs
if: always()
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v3
with:
name: server-logs
path: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sonarqube.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ jobs:
distribution: 'zulu'
cache: gradle
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@83cf5fdbbf627c8da6fec32f28db58967a3136ac
uses: gradle/wrapper-validation-action@63d15e7a1e697b1de6f3ba0507106f89100c8518
- name: Sonarqube
run: ./gradlew --no-daemon --console=plain -Dsonar.verbose=true -Dsonar.login=$SONAR_TOKEN -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.organization=$SONAR_ORGANIZATION -Dsonar.projectKey=$SONAR_PROJECT_KEY --info --stacktrace sonarqube
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@

import java.util.LinkedHashMap;
import java.util.Map;
import lombok.Getter;

/**
* Stores details of {@link LoanTransaction}'s that were reversed or newly created
*/
@Getter
public class ChangedTransactionDetail {

private final Map<Long, LoanTransaction> newTransactionMappings = new LinkedHashMap<>();

public Map<Long, LoanTransaction> getNewTransactionMappings() {
return this.newTransactionMappings;
}
private final Map<LoanTransaction, Long> currentTransactionToOldId = new LinkedHashMap<>();

}
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData;
import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor;
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor.TransactionCtx;
import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.MoneyHolder;
import org.apache.fineract.portfolio.loanaccount.exception.ExceedingTrancheCountException;
import org.apache.fineract.portfolio.loanaccount.exception.InvalidLoanStateTransitionException;
Expand Down Expand Up @@ -800,8 +801,8 @@ private void handleChargePaidTransaction(final LoanCharge charge, final LoanTran
}
final Set<LoanCharge> loanCharges = new HashSet<>(1);
loanCharges.add(charge);
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(chargesPayment, getCurrency(), chargePaymentInstallments,
loanCharges, new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(chargesPayment,
new TransactionCtx(getCurrency(), chargePaymentInstallments, loanCharges, new MoneyHolder(getTotalOverpaidAsMoney())));

updateLoanSummaryDerivedFields();
doPostLoanTransactionChecks(chargesPayment.getTransactionDate(), loanLifecycleStateMachine);
Expand Down Expand Up @@ -3324,8 +3325,8 @@ private ChangedTransactionDetail handleRepaymentOrRecoveryOrWaiverTransaction(fi

if (isTransactionChronologicallyLatest && adjustedTransaction == null
&& (!reprocess || !this.repaymentScheduleDetail().isInterestRecalculationEnabled()) && !isForeclosure()) {
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, new TransactionCtx(getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney())));
reprocess = false;
if (this.repaymentScheduleDetail().isInterestRecalculationEnabled()) {
if (currentInstallment == null || currentInstallment.isNotFullyPaidOff()) {
Expand Down Expand Up @@ -3917,8 +3918,8 @@ public ChangedTransactionDetail closeAsWrittenOff(final JsonCommand command, fin
}

addLoanTransaction(loanTransaction);
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, loanCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, new TransactionCtx(loanCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney())));

updateLoanSummaryDerivedFields();
}
Expand Down Expand Up @@ -4022,8 +4023,8 @@ public ChangedTransactionDetail close(final JsonCommand command, final LoanLifec
}

addLoanTransaction(loanTransaction);
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, loanCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, new TransactionCtx(loanCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney())));

updateLoanSummaryDerivedFields();
} else if (totalOutstanding.isGreaterThanZero()) {
Expand Down Expand Up @@ -5084,10 +5085,10 @@ public LoanTransaction getLastPaymentTransaction() {
.orElse(null);
}

public LoanTransaction getLastRepaymentTransaction() {
public LoanTransaction getLastRepaymentOrDownPaymentTransaction() {
return loanTransactions.stream() //
.filter(loanTransaction -> !loanTransaction.isReversed()) //
.filter(LoanTransaction::isRepayment) //
.filter(loanTransaction -> loanTransaction.isRepayment() || loanTransaction.isDownPayment()) //
.reduce((first, second) -> second) //
.orElse(null);
}
Expand Down Expand Up @@ -6377,8 +6378,8 @@ private ChangedTransactionDetail handleRefundTransaction(final LoanTransaction l

// If is a refund
if (adjustedTransaction == null) {
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(loanTransaction, new TransactionCtx(getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney())));
} else {
final List<LoanTransaction> allNonContraTransactionsPostDisbursement = retrieveListOfTransactionsPostDisbursement();
changedTransactionDetail = loanRepaymentScheduleTransactionProcessor.reprocessLoanTransactions(getDisbursementDate(),
Expand Down Expand Up @@ -6408,8 +6409,8 @@ public void handleChargebackTransaction(final LoanTransaction chargebackTransact
.determineProcessor(this.transactionProcessingStrategyCode);

addLoanTransaction(chargebackTransaction);
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(chargebackTransaction, getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney()));
loanRepaymentScheduleTransactionProcessor.processLatestTransaction(chargebackTransaction, new TransactionCtx(getCurrency(),
getRepaymentScheduleInstallments(), getActiveCharges(), new MoneyHolder(getTotalOverpaidAsMoney())));

updateLoanSummaryDerivedFields();
if (!doPostLoanTransactionChecks(chargebackTransaction.getTransactionDate(), loanLifecycleStateMachine)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ protected LoanTransactionRelation(@NotNull LoanTransaction fromTransaction, Loan

public static LoanTransactionRelation linkToTransaction(@NotNull LoanTransaction fromTransaction,
@NotNull LoanTransaction toTransaction, LoanTransactionRelationTypeEnum relation) {
return new LoanTransactionRelation(fromTransaction, toTransaction, null, relation);
LoanTransactionRelation loanTransactionRelation = new LoanTransactionRelation(fromTransaction, toTransaction, null, relation);
fromTransaction.getLoanTransactionRelations().add(loanTransactionRelation);
return loanTransactionRelation;
}

public static LoanTransactionRelation linkToCharge(@NotNull LoanTransaction fromTransaction, @NotNull LoanCharge loanCharge,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public ChangedTransactionDetail reprocessLoanTransactions(final LocalDate disbur
if (loanTransaction.isRepaymentLikeType() || loanTransaction.isInterestWaiver() || loanTransaction.isRecoveryRepayment()) {
// pass through for new transactions
if (loanTransaction.getId() == null) {
processLatestTransaction(loanTransaction, currency, installments, charges, overpaymentHolder);
processLatestTransaction(loanTransaction, new TransactionCtx(currency, installments, charges, overpaymentHolder));
loanTransaction.adjustInterestComponent(currency);
} else {
/**
Expand All @@ -175,7 +175,7 @@ public ChangedTransactionDetail reprocessLoanTransactions(final LocalDate disbur

// Reset derived component of new loan transaction and
// re-process transaction
processLatestTransaction(newLoanTransaction, currency, installments, charges, overpaymentHolder);
processLatestTransaction(newLoanTransaction, new TransactionCtx(currency, installments, charges, overpaymentHolder));
newLoanTransaction.adjustInterestComponent(currency);
/**
* Check if the transaction amounts have changed. If so, reverse the original transaction and update
Expand Down Expand Up @@ -211,15 +211,14 @@ public ChangedTransactionDetail reprocessLoanTransactions(final LocalDate disbur
}

@Override
public void processLatestTransaction(final LoanTransaction loanTransaction, final MonetaryCurrency currency,
final List<LoanRepaymentScheduleInstallment> installments, final Set<LoanCharge> charges, MoneyHolder overpaymentHolder) {
public void processLatestTransaction(final LoanTransaction loanTransaction, final TransactionCtx ctx) {
switch (loanTransaction.getTypeOf()) {
case WRITEOFF -> handleWriteOff(loanTransaction, currency, installments);
case REFUND_FOR_ACTIVE_LOAN -> handleRefund(loanTransaction, currency, installments, charges);
case CHARGEBACK -> handleChargeback(loanTransaction, currency, installments, overpaymentHolder);
case WRITEOFF -> handleWriteOff(loanTransaction, ctx.getCurrency(), ctx.getInstallments());
case REFUND_FOR_ACTIVE_LOAN -> handleRefund(loanTransaction, ctx.getCurrency(), ctx.getInstallments(), ctx.getCharges());
case CHARGEBACK -> handleChargeback(loanTransaction, ctx);
default -> {
Money transactionAmountUnprocessed = handleTransactionAndCharges(loanTransaction, currency, installments, charges, null,
false);
Money transactionAmountUnprocessed = handleTransactionAndCharges(loanTransaction, ctx.getCurrency(), ctx.getInstallments(),
ctx.getCharges(), null, false);
if (transactionAmountUnprocessed.isGreaterThanZero()) {
if (loanTransaction.isWaiver()) {
loanTransaction.updateComponentsAndTotal(transactionAmountUnprocessed.zero(), transactionAmountUnprocessed.zero(),
Expand All @@ -228,9 +227,9 @@ public void processLatestTransaction(final LoanTransaction loanTransaction, fina
onLoanOverpayment(loanTransaction, transactionAmountUnprocessed);
loanTransaction.setOverPayments(transactionAmountUnprocessed);
}
overpaymentHolder.setMoneyObject(transactionAmountUnprocessed);
ctx.getOverpaymentHolder().setMoneyObject(transactionAmountUnprocessed);
} else {
overpaymentHolder.setMoneyObject(Money.zero(currency));
ctx.getOverpaymentHolder().setMoneyObject(Money.zero(ctx.getCurrency()));
}
}
}
Expand Down Expand Up @@ -474,7 +473,7 @@ protected void createNewTransaction(LoanTransaction loanTransaction, LoanTransac

}

private void processCreditTransaction(LoanTransaction loanTransaction, MoneyHolder overpaymentHolder, MonetaryCurrency currency,
protected void processCreditTransaction(LoanTransaction loanTransaction, MoneyHolder overpaymentHolder, MonetaryCurrency currency,
List<LoanRepaymentScheduleInstallment> installments) {
loanTransaction.resetDerivedComponents();
List<LoanTransactionToRepaymentScheduleMapping> transactionMappings = new ArrayList<>();
Expand Down Expand Up @@ -742,9 +741,8 @@ protected void handleWriteOff(final LoanTransaction loanTransaction, final Monet
loanTransaction.updateComponentsAndTotal(principalPortion, interestPortion, feeChargesPortion, penaltychargesPortion);
}

protected void handleChargeback(LoanTransaction loanTransaction, MonetaryCurrency currency,
List<LoanRepaymentScheduleInstallment> installments, MoneyHolder overpaidAmountHolder) {
processCreditTransaction(loanTransaction, overpaidAmountHolder, currency, installments);
protected void handleChargeback(LoanTransaction loanTransaction, TransactionCtx ctx) {
processCreditTransaction(loanTransaction, ctx.getOverpaymentHolder(), ctx.getCurrency(), ctx.getInstallments());
}

protected void handleCreditBalanceRefund(LoanTransaction loanTransaction, MonetaryCurrency currency,
Expand Down
Loading

0 comments on commit 794ea11

Please sign in to comment.