FINERACT-2134: Missing charge paid by references and journal entries for disbursement occuring accruals

This commit is contained in:
Arnold Galovics
2024-10-02 15:30:07 +02:00
committed by Arnold Gálovics
parent 39d95f393b
commit 33f666ccc3
5 changed files with 202 additions and 2 deletions
@@ -1267,6 +1267,19 @@ final class LoansApiResourceSwagger {
public BigDecimal disbursedAmountPercentageForDownPayment;
@Schema(example = "false")
public Boolean enableAutoRepaymentForDownPayment;
public List<PostLoansRequestChargeData> charges;
static final class PostLoansRequestChargeData {
private PostLoansRequestChargeData() {}
@Schema(example = "1")
public Long chargeId;
@Schema(example = "1.0")
public BigDecimal amount;
}
}
@Schema(description = "PostLoansResponse")
@@ -152,6 +152,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.GroupLoanIndividualMonit
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanAccountDomainService;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
import org.apache.fineract.portfolio.loanaccount.domain.LoanChargePaidBy;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement;
import org.apache.fineract.portfolio.loanaccount.domain.LoanDisbursementDetails;
import org.apache.fineract.portfolio.loanaccount.domain.LoanEvent;
@@ -330,8 +331,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
businessEventNotifierService.notifyPreBusinessEvent(new LoanDisbursalBusinessEvent(loan));
final List<Long> existingTransactionIds = new ArrayList<>();
final List<Long> existingReversedTransactionIds = new ArrayList<>();
List<Long> existingTransactionIds = new ArrayList<>();
List<Long> existingReversedTransactionIds = new ArrayList<>();
final AppUser currentUser = getAppUserIfPresent();
final Map<String, Object> changes = new LinkedHashMap<>();
@@ -489,6 +490,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
loanAccrualTransactionBusinessEventService.raiseBusinessEventForAccrualTransactions(loan, existingTransactionIds);
}
existingTransactionIds = new ArrayList<>(loan.findExistingTransactionIds());
existingReversedTransactionIds = new ArrayList<>(loan.findExistingReversedTransactionIds());
final Set<LoanCharge> loanCharges = loan.getActiveCharges();
final Map<Long, BigDecimal> disBuLoanCharges = new HashMap<>();
for (final LoanCharge loanCharge : loanCharges) {
@@ -499,10 +502,17 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
if (loanCharge.isDisbursementCharge()) {
LoanTransaction loanTransaction = LoanTransaction.accrueTransaction(loan, loan.getOffice(), actualDisbursementDate,
loanCharge.amount(), null, loanCharge.amount(), null, externalIdFactory.create());
loanTransaction.updateLoan(loan);
LoanChargePaidBy loanChargePaidBy = new LoanChargePaidBy(loanTransaction, loanCharge,
loanCharge.getAmount(loan.getCurrency()).getAmount(), 1);
loanTransaction.getLoanChargesPaid().add(loanChargePaidBy);
loan.addLoanTransaction(loanTransaction);
LoanTransaction savedLoanTransaction = loanTransactionRepository.saveAndFlush(loanTransaction);
businessEventNotifierService.notifyPostBusinessEvent(new LoanAccrualTransactionCreatedBusinessEvent(savedLoanTransaction));
}
}
postJournalEntries(loan, existingTransactionIds, existingReversedTransactionIds);
for (final Map.Entry<Long, BigDecimal> entrySet : disBuLoanCharges.entrySet()) {
final PortfolioAccountData savingAccountData = this.accountAssociationsReadPlatformService.retriveLoanLinkedAssociation(loanId);
final SavingsAccount fromSavingsAccount = null;