[
https://issues.apache.org/jira/browse/FINERACT-2323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adam Saghy updated FINERACT-2323:
---------------------------------
Fix Version/s: 1.13.0
> Journal entry creation for loan charge should support multiple legs
> -------------------------------------------------------------------
>
> Key: FINERACT-2323
> URL: https://issues.apache.org/jira/browse/FINERACT-2323
> Project: Apache Fineract
> Issue Type: Bug
> Affects Versions: 1.11.0
> Reporter: Adam Saghy
> Assignee: Adam Saghy
> Priority: Major
> Fix For: 1.13.0
>
>
> The below code is fine for supporting multiple accounts for credit leg, but
> it does not support multiple accounts for debit leg:
> {code:java}
> public void createJournalEntriesForLoanCharges(final Office office, final
> String currencyCode, final Integer accountTypeToBeDebited,
> final Integer accountTypeToBeCredited, final Long loanProductId,
> final Long loanId, final String transactionId,
> final LocalDate transactionDate, final BigDecimal totalAmount,
> final List<ChargePaymentDTO> chargePaymentDTOs) {
> GLAccount receivableAccount =
> getLinkedGLAccountForLoanCharges(loanProductId, accountTypeToBeDebited, null);
> final Map<GLAccount, BigDecimal> creditDetailsMap = new
> LinkedHashMap<>();
> for (final ChargePaymentDTO chargePaymentDTO : chargePaymentDTOs) {
> final Long chargeId = chargePaymentDTO.getChargeId();
> final GLAccount chargeSpecificAccount =
> getLinkedGLAccountForLoanCharges(loanProductId, accountTypeToBeCredited,
> chargeId);
> BigDecimal chargeSpecificAmount = chargePaymentDTO.getAmount();
> // adjust net credit amount if the account is already present in
> the
> // map
> if (creditDetailsMap.containsKey(chargeSpecificAccount)) {
> final BigDecimal existingAmount =
> creditDetailsMap.get(chargeSpecificAccount);
> chargeSpecificAmount =
> chargeSpecificAmount.add(existingAmount);
> }
> creditDetailsMap.put(chargeSpecificAccount, chargeSpecificAmount);
> }
> BigDecimal totalCreditedAmount = BigDecimal.ZERO;
> for (final Map.Entry<GLAccount, BigDecimal> entry :
> creditDetailsMap.entrySet()) {
> final GLAccount account = entry.getKey();
> final BigDecimal amount = entry.getValue();
> totalCreditedAmount = totalCreditedAmount.add(amount);
> createDebitJournalEntryForLoan(office, currencyCode,
> receivableAccount, loanId, transactionId, transactionDate, amount);
> createCreditJournalEntryForLoan(office, currencyCode, account,
> loanId, transactionId, transactionDate, amount);
> }
> if (totalAmount.compareTo(totalCreditedAmount) != 0) {
> throw new PlatformDataIntegrityException(
> "Meltdown in advanced accounting...sum of all charges is
> not equal to the fee charge for a transaction",
> "Meltdown in advanced accounting...sum of all charges is
> not equal to the fee charge for a transaction",
> totalCreditedAmount, totalAmount);
> }
> } {code}
> This should be enhanced to support multiple accounts to be used as DEBIT
> account and aggregate the amounts.
> Also GLAccount receivableAccount =
> getLinkedGLAccountForLoanCharges(loanProductId, accountTypeToBeDebited,
> null);` is a incorrect repository call, as we should never send null to a PK
> / FK key!
>
> *Acceptance criteria*
> * Fix the GLAccount receivableAccount =
> getLinkedGLAccountForLoanCharges(loanProductId, accountTypeToBeDebited,
> null); call and avoid not sending charge id!
> * Rework to support multiple DEBIT gl accounts
--
This message was sent by Atlassian Jira
(v8.20.10#820010)