From e942527efea0b04a23ef01c9e2a5f21d5f765300 Mon Sep 17 00:00:00 2001 From: ankita10r <92036361+ankita10r@users.noreply.github.com> Date: Fri, 29 Oct 2021 16:35:02 +0530 Subject: [PATCH] FINERACT-1411 Allow charges type saving to map to all types of Ledgers (#1935) --- ...AccountingDropdownReadPlatformService.java | 4 +++ ...untingDropdownReadPlatformServiceImpl.java | 10 ++++++ .../journalentry/data/ChargePaymentDTO.java | 1 + .../service/AccountingProcessorHelper.java | 20 +++++++++--- .../LoanProductToGLAccountMappingHelper.java | 4 +-- .../ProductToGLAccountMappingHelper.java | 5 ++- ...ToGLAccountMappingReadPlatformService.java | 2 +- ...AccountMappingReadPlatformServiceImpl.java | 2 +- ...avingsProductToGLAccountMappingHelper.java | 4 +-- .../ShareProductToGLAccountMappingHelper.java | 4 +-- .../domain/ConfigurationDomainServiceJpa.java | 6 ++-- .../charge/api/ChargesApiResource.java | 1 - .../portfolio/charge/data/ChargeData.java | 32 +++++++++++++++---- .../portfolio/charge/domain/Charge.java | 2 +- .../ChargeReadPlatformServiceImpl.java | 12 +++++-- .../LoanChargeReadPlatformServiceImpl.java | 8 ++++- .../api/LoanProductsApiResource.java | 3 +- .../data/SavingsAccountChargeData.java | 4 +++ ...sAccountChargeReadPlatformServiceImpl.java | 8 ++++- 19 files changed, 100 insertions(+), 32 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformService.java index b1da6b7d4..d6a23a3e1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformService.java @@ -43,4 +43,8 @@ public interface AccountingDropdownReadPlatformService { Map> retrieveAccountMappingOptionsForShareProducts(); + List retrieveExpenseAccountOptions(); + + List retrieveAssetAccountOptions(); + } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformServiceImpl.java index d73a82408..6e0014c0e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingDropdownReadPlatformServiceImpl.java @@ -95,6 +95,16 @@ public class AccountingDropdownReadPlatformServiceImpl implements AccountingDrop includeEquityAccounts); } + @Override + public List retrieveExpenseAccountOptions() { + return accountReadPlatformService.retrieveAllEnabledDetailGLAccounts(GLAccountType.EXPENSE); + } + + @Override + public List retrieveAssetAccountOptions() { + return accountReadPlatformService.retrieveAllEnabledDetailGLAccounts(GLAccountType.ASSET); + } + private Map> retrieveAccountMappingOptions(boolean includeAssetAccounts, boolean includeIncomeAccounts, boolean includeExpenseAccounts, boolean includeLiabilityAccounts, boolean includeEquityAccounts) { final Map> accountOptions = new HashMap<>(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/ChargePaymentDTO.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/ChargePaymentDTO.java index 27efe3bd1..91542869d 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/ChargePaymentDTO.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/data/ChargePaymentDTO.java @@ -30,6 +30,7 @@ public class ChargePaymentDTO { this.chargeId = chargeId; this.amount = amount; this.loanChargeId = loanChargeId; + } public Long getChargeId() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java index cda9f5273..026fdddf5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java @@ -64,6 +64,7 @@ import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; import org.apache.fineract.portfolio.account.PortfolioAccountType; import org.apache.fineract.portfolio.account.service.AccountTransfersReadPlatformService; +import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; import org.apache.fineract.portfolio.client.domain.ClientTransaction; import org.apache.fineract.portfolio.client.domain.ClientTransactionRepositoryWrapper; import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionEnumData; @@ -95,6 +96,7 @@ public class AccountingProcessorHelper { private final ClientTransactionRepositoryWrapper clientTransactionRepository; private final SavingsAccountTransactionRepository savingsAccountTransactionRepository; private final AccountTransfersReadPlatformService accountTransfersReadPlatformService; + private final ChargeRepositoryWrapper chargeRepositoryWrapper; @Autowired public AccountingProcessorHelper(final JournalEntryRepository glJournalEntryRepository, @@ -104,7 +106,8 @@ public class AccountingProcessorHelper { final FinancialActivityAccountRepositoryWrapper financialActivityAccountRepository, final AccountTransfersReadPlatformService accountTransfersReadPlatformService, final GLAccountRepositoryWrapper accountRepositoryWrapper, - final ClientTransactionRepositoryWrapper clientTransactionRepositoryWrapper) { + final ClientTransactionRepositoryWrapper clientTransactionRepositoryWrapper, + final ChargeRepositoryWrapper chargeRepositoryWrapper) { this.glJournalEntryRepository = glJournalEntryRepository; this.accountMappingRepository = accountMappingRepository; this.closureRepository = closureRepository; @@ -115,6 +118,7 @@ public class AccountingProcessorHelper { this.accountTransfersReadPlatformService = accountTransfersReadPlatformService; this.accountRepositoryWrapper = accountRepositoryWrapper; this.clientTransactionRepository = clientTransactionRepositoryWrapper; + this.chargeRepositoryWrapper = chargeRepositoryWrapper; } public LoanDTO populateLoanDtoFromMap(final Map accountingBridgeData, final boolean cashBasedAccountingEnabled, @@ -758,7 +762,7 @@ public class AccountingProcessorHelper { * chargePaymentDTOs */ public void createCashBasedJournalEntriesAndReversalsForSavingsCharges(final Office office, final String currencyCode, - final CashAccountsForSavings accountTypeToBeDebited, final CashAccountsForSavings accountTypeToBeCredited, + final CashAccountsForSavings accountTypeToBeDebited, CashAccountsForSavings accountTypeToBeCredited, final Long savingsProductId, final Long paymentTypeId, final Long loanId, final String transactionId, final Date transactionDate, final BigDecimal totalAmount, final Boolean isReversal, final List chargePaymentDTOs) { @@ -774,9 +778,9 @@ public class AccountingProcessorHelper { "Recent Portfolio changes w.r.t Charges for Savings have Broken the accounting code"); } ChargePaymentDTO chargePaymentDTO = chargePaymentDTOs.get(0); - - final GLAccount chargeSpecificAccount = getLinkedGLAccountForSavingsCharges(savingsProductId, accountTypeToBeCredited.getValue(), + GLAccount chargeSpecificAccount = getLinkedGLAccountForSavingsCharges(savingsProductId, accountTypeToBeCredited.getValue(), chargePaymentDTO.getChargeId()); + final GLAccount savingsControlAccount = getLinkedGLAccountForSavingsProduct(savingsProductId, accountTypeToBeDebited.getValue(), paymentTypeId); if (isReversal) { @@ -1158,6 +1162,7 @@ public class AccountingProcessorHelper { private GLAccount getLinkedGLAccountForSavingsCharges(final Long savingsProductId, final int accountMappingTypeId, final Long chargeId) { + ProductToGLAccountMapping accountMapping = this.accountMappingRepository.findCoreProductToFinAccountMapping(savingsProductId, PortfolioProductType.SAVING.getValue(), accountMappingTypeId); /***** @@ -1167,15 +1172,22 @@ public class AccountingProcessorHelper { *****/ // Vishwas TODO: remove this condition as it should always be true + if (accountMappingTypeId == CashAccountsForSavings.INCOME_FROM_FEES.getValue() || accountMappingTypeId == CashAccountsForLoan.INCOME_FROM_PENALTIES.getValue()) { + GLAccount glAccount = chargeRepositoryWrapper.findOneWithNotFoundDetection(chargeId).getAccount(); + if (glAccount != null) { + return glAccount; + } final ProductToGLAccountMapping chargeSpecificIncomeAccountMapping = this.accountMappingRepository .findProductIdAndProductTypeAndFinancialAccountTypeAndChargeId(savingsProductId, PortfolioProductType.SAVING.getValue(), accountMappingTypeId, chargeId); if (chargeSpecificIncomeAccountMapping != null) { + accountMapping = chargeSpecificIncomeAccountMapping; } } + return accountMapping.getGlAccount(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/LoanProductToGLAccountMappingHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/LoanProductToGLAccountMappingHelper.java index 9dd074e89..24cfcf33a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/LoanProductToGLAccountMappingHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/LoanProductToGLAccountMappingHelper.java @@ -115,8 +115,8 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi public void saveChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, final Map changes) { // save both fee and penalty charges - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.LOAN, true); - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.LOAN, false); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.LOAN, true); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.LOAN, false); } public void updateChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java index 2e44ad9e0..f29a84916 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java @@ -162,7 +162,7 @@ public class ProductToGLAccountMappingHelper { * @param productId * @param changes */ - public void saveChargesToIncomeOrLiabilityAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, + public void saveChargesToGLAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, final Map changes, final PortfolioProductType portfolioProductType, final boolean isPenalty) { String arrayName; if (isPenalty) { @@ -332,8 +332,7 @@ public class ProductToGLAccountMappingHelper { if (inputPaymentChannelFundSourceMap.containsKey(currentPaymentChannelId)) { final Long newGLAccountId = inputPaymentChannelFundSourceMap.get(currentPaymentChannelId); if (!newGLAccountId.equals(existingPaymentChannelToFundSourceMapping.getGlAccount().getId())) { - final GLAccount glAccount = getAccountByIdAndType(LoanProductAccountingParams.FUND_SOURCE.getValue(), - GLAccountType.ASSET, newGLAccountId); + final GLAccount glAccount = getAccountById(LoanProductAccountingParams.FUND_SOURCE.getValue(), newGLAccountId); existingPaymentChannelToFundSourceMapping.setGlAccount(glAccount); this.accountMappingRepository.save(existingPaymentChannelToFundSourceMapping); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformService.java index 3b0a304cc..47df148a8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformService.java @@ -29,7 +29,7 @@ public interface ProductToGLAccountMappingReadPlatformService { List fetchPaymentTypeToFundSourceMappingsForLoanProduct(Long loanProductId); - List fetchFeeToIncomeOrLiabilityAccountMappingsForLoanProduct(Long loanProductId); + List fetchFeeToGLAccountMappingsForLoanProduct(Long loanProductId); List fetchPenaltyToIncomeAccountMappingsForLoanProduct(Long loanProductId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java index 85718d93f..38bfabcdf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java @@ -279,7 +279,7 @@ public class ProductToGLAccountMappingReadPlatformServiceImpl implements Product } @Override - public List fetchFeeToIncomeOrLiabilityAccountMappingsForLoanProduct(final Long loanProductId) { + public List fetchFeeToGLAccountMappingsForLoanProduct(final Long loanProductId) { return fetchChargeToIncomeAccountMappings(PortfolioProductType.LOAN, loanProductId, false); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/SavingsProductToGLAccountMappingHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/SavingsProductToGLAccountMappingHelper.java index 37a4dc8f0..598f9c311 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/SavingsProductToGLAccountMappingHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/SavingsProductToGLAccountMappingHelper.java @@ -121,8 +121,8 @@ public class SavingsProductToGLAccountMappingHelper extends ProductToGLAccountMa public void saveChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, final Map changes) { // save both fee and penalty charges - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.SAVING, true); - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.SAVING, false); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.SAVING, true); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.SAVING, false); } public void updateChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ShareProductToGLAccountMappingHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ShareProductToGLAccountMappingHelper.java index 0ec048330..51ca34b3d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ShareProductToGLAccountMappingHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ShareProductToGLAccountMappingHelper.java @@ -114,8 +114,8 @@ public class ShareProductToGLAccountMappingHelper extends ProductToGLAccountMapp public void saveChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, final Map changes) { - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.SHARES, true); - saveChargesToIncomeOrLiabilityAccountMappings(command, element, productId, changes, PortfolioProductType.SHARES, false); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.SHARES, true); + saveChargesToGLAccountMappings(command, element, productId, changes, PortfolioProductType.SHARES, false); } public void updateChargesToIncomeAccountMappings(final JsonCommand command, final JsonElement element, final Long productId, diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java index b03c2a9d4..1f485f527 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ConfigurationDomainServiceJpa.java @@ -370,7 +370,7 @@ public class ConfigurationDomainServiceJpa implements ConfigurationDomainService final GlobalConfigurationPropertyData property = getGlobalConfigurationPropertyData(propertyName); if (property.isEnabled()) { String value = property.getStringValue(); - if (value == null) { + if (StringUtils.isBlank(value)) { return defaultValue; } return value; @@ -384,8 +384,8 @@ public class ConfigurationDomainServiceJpa implements ConfigurationDomainService String defaultValue = "Income"; // 1 Stands for Account mapped from income only final GlobalConfigurationPropertyData property = getGlobalConfigurationPropertyData(propertyName); if (property.isEnabled()) { - String value = property.getValue().toString(); - if (value == null) { + String value = property.getStringValue(); + if (StringUtils.isBlank(value)) { return defaultValue; } return value; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java index 63f68b32b..0b18874c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java @@ -184,7 +184,6 @@ public class ChargesApiResource { @DELETE @Path("{chargeId}") - @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Delete a Charge", description = "Deletes a Charge.") @ApiResponses({ diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java index 230b6d53b..684d88ef2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java @@ -77,6 +77,10 @@ public final class ChargeData implements Comparable, Serializable { private final Map> incomeOrLiabilityAccountOptions; private final Collection taxGroupOptions; + private final String accountMappingForChargeConfig; + private final List expenseAccountOptions; + private final List assetAccountOptions; + public static ChargeData template(final Collection currencyOptions, final List chargeCalculationTypeOptions, final List chargeAppliesToOptions, final List chargeTimeTypeOptions, final List chargePaymentModeOptions, @@ -85,7 +89,8 @@ public final class ChargeData implements Comparable, Serializable { final List clientChargeCalculationTypeOptions, final List clientChargeTimeTypeOptions, final List feeFrequencyOptions, final Map> incomeOrLiabilityAccountOptions, final Collection taxGroupOptions, final List shareChargeCalculationTypeOptions, - final List shareChargeTimeTypeOptions) { + final List shareChargeTimeTypeOptions, String accountMappingForChargeConfig, + List expenseAccountOptions, List assetAccountOptions) { final GLAccountData account = null; final TaxGroupData taxGroupData = null; @@ -94,7 +99,7 @@ public final class ChargeData implements Comparable, Serializable { loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, null, null, null, null, null, feeFrequencyOptions, account, incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, - shareChargeTimeTypeOptions); + shareChargeTimeTypeOptions, accountMappingForChargeConfig, expenseAccountOptions, assetAccountOptions); } public static ChargeData withTemplate(final ChargeData charge, final ChargeData template) { @@ -106,7 +111,8 @@ public final class ChargeData implements Comparable, Serializable { template.clientChargeCalculationTypeOptions, template.clientChargeTimeTypeOptions, charge.feeOnMonthDay, charge.feeInterval, charge.minCap, charge.maxCap, charge.feeFrequency, template.feeFrequencyOptions, charge.incomeOrLiabilityAccount, template.incomeOrLiabilityAccountOptions, template.taxGroupOptions, template.shareChargeCalculationTypeOptions, - template.shareChargeTimeTypeOptions); + template.shareChargeTimeTypeOptions, template.accountMappingForChargeConfig, template.expenseAccountOptions, + template.assetAccountOptions); } public static ChargeData instance(final Long id, final String name, final BigDecimal amount, final CurrencyData currency, @@ -131,12 +137,16 @@ public final class ChargeData implements Comparable, Serializable { final List shareChargeCalculationTypeOptions = null; final List shareChargeTimeTypeOptions = null; final Collection taxGroupOptions = null; + final String accountMappingForChargeConfig = null; + final List expenseAccountOptions = null; + final List assetAccountOptions = null; return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode, penalty, active, taxGroupData, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, feeOnMonthDay, feeInterval, minCap, maxCap, feeFrequency, feeFrequencyOptions, accountData, - incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions); + incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions, + accountMappingForChargeConfig, expenseAccountOptions, assetAccountOptions); } public static ChargeData lookup(final Long id, final String name, final boolean isPenalty) { @@ -171,12 +181,17 @@ public final class ChargeData implements Comparable, Serializable { final List shareChargeTimeTypeOptions = null; final TaxGroupData taxGroupData = null; final Collection taxGroupOptions = null; + final String accountMappingForChargeConfig = null; + final List expenseAccountOptions = null; + final List assetAccountOptions = null; + return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode, penalty, active, taxGroupData, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, feeOnMonthDay, feeInterval, minCap, maxCap, feeFrequency, feeFrequencyOptions, account, - incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions); + incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions, + accountMappingForChargeConfig, expenseAccountOptions, assetAccountOptions); } private ChargeData(final Long id, final String name, final BigDecimal amount, final CurrencyData currency, @@ -191,7 +206,9 @@ public final class ChargeData implements Comparable, Serializable { final BigDecimal minCap, final BigDecimal maxCap, final EnumOptionData feeFrequency, final List feeFrequencyOptions, final GLAccountData account, final Map> incomeOrLiabilityAccountOptions, final Collection taxGroupOptions, - final List shareChargeCalculationTypeOptions, final List shareChargeTimeTypeOptions) { + final List shareChargeCalculationTypeOptions, final List shareChargeTimeTypeOptions, + final String accountMappingForChargeConfig, final List expenseAccountOptions, + final List assetAccountOptions) { this.id = id; this.name = name; this.amount = amount; @@ -225,6 +242,9 @@ public final class ChargeData implements Comparable, Serializable { this.taxGroupOptions = taxGroupOptions; this.shareChargeCalculationTypeOptions = shareChargeCalculationTypeOptions; this.shareChargeTimeTypeOptions = shareChargeTimeTypeOptions; + this.accountMappingForChargeConfig = accountMappingForChargeConfig; + this.assetAccountOptions = assetAccountOptions; + this.expenseAccountOptions = expenseAccountOptions; } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java index aad7e7b2a..20788025d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java @@ -579,7 +579,7 @@ public class Charge extends AbstractPersistableCustom { this.account = account; } - private Long getIncomeAccountId() { + public Long getIncomeAccountId() { Long incomeAccountId = null; if (this.account != null) { incomeAccountId = this.account.getId(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java index b2b62887f..9bf07033a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import org.apache.fineract.accounting.common.AccountingDropdownReadPlatformService; import org.apache.fineract.accounting.glaccount.data.GLAccountData; +import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainServiceJpa; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.service.DateUtils; @@ -67,13 +68,14 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService private final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService; private final NamedParameterJdbcTemplate namedParameterJdbcTemplate; private final TaxReadPlatformService taxReadPlatformService; + private final ConfigurationDomainServiceJpa configurationDomainServiceJpa; @Autowired public ChargeReadPlatformServiceImpl(final CurrencyReadPlatformService currencyReadPlatformService, final ChargeDropdownReadPlatformService chargeDropdownReadPlatformService, final RoutingDataSource dataSource, final DropdownReadPlatformService dropdownReadPlatformService, final FineractEntityAccessUtil fineractEntityAccessUtil, final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService, - final TaxReadPlatformService taxReadPlatformService) { + final TaxReadPlatformService taxReadPlatformService, final ConfigurationDomainServiceJpa configurationDomainServiceJpa) { this.chargeDropdownReadPlatformService = chargeDropdownReadPlatformService; this.jdbcTemplate = new JdbcTemplate(dataSource); this.currencyReadPlatformService = currencyReadPlatformService; @@ -82,6 +84,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService this.accountingDropdownReadPlatformService = accountingDropdownReadPlatformService; this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); this.taxReadPlatformService = taxReadPlatformService; + this.configurationDomainServiceJpa = configurationDomainServiceJpa; } @Override @@ -152,11 +155,16 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService .retrieveSharesCalculationTypes(); final List shareChargeTimeTypeOptions = this.chargeDropdownReadPlatformService.retrieveSharesCollectionTimeTypes(); final Collection taxGroupOptions = this.taxReadPlatformService.retrieveTaxGroupsForLookUp(); + final String accountMappingForChargeConfig = this.configurationDomainServiceJpa.getAccountMappingForCharge(); + final List expenseAccountOptions = this.accountingDropdownReadPlatformService.retrieveExpenseAccountOptions(); + final List assetAccountOptions = this.accountingDropdownReadPlatformService.retrieveAssetAccountOptions(); + return ChargeData.template(currencyOptions, allowedChargeCalculationTypeOptions, allowedChargeAppliesToOptions, allowedChargeTimeOptions, chargePaymentOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, feeFrequencyOptions, incomeOrLiabilityAccountOptions, taxGroupOptions, - shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions); + shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions, accountMappingForChargeConfig, expenseAccountOptions, + assetAccountOptions); } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java index d16c3448e..954f89e45 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java @@ -159,10 +159,16 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform final List shareChargeCalculationTypeOptions = null; final List shareChargeTimeTypeOptions = null; final Collection taxGroupOptions = null; + + final String accountMappingForChargeConfig = null; + final List expenseAccountOptions = null; + final List assetAccountOptions = null; + return ChargeData.template(null, allowedChargeCalculationTypeOptions, null, allowedChargeTimeOptions, null, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, feeFrequencyOptions, - incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions); + incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions, + accountMappingForChargeConfig, expenseAccountOptions, assetAccountOptions); } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java index b07cba39a..0799ebf20 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java @@ -275,8 +275,7 @@ public class LoanProductsApiResource { loanProduct.accountingRuleType().getId().intValue()); paymentChannelToFundSourceMappings = this.accountMappingReadPlatformService .fetchPaymentTypeToFundSourceMappingsForLoanProduct(productId); - feeToGLAccountMappings = this.accountMappingReadPlatformService - .fetchFeeToIncomeOrLiabilityAccountMappingsForLoanProduct(productId); + feeToGLAccountMappings = this.accountMappingReadPlatformService.fetchFeeToGLAccountMappingsForLoanProduct(productId); penaltyToGLAccountMappings = this.accountMappingReadPlatformService .fetchPenaltyToIncomeAccountMappingsForLoanProduct(productId); loanProduct = LoanProductData.withAccountingDetails(loanProduct, accountingMappings, paymentChannelToFundSourceMappings, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java index c46c41df1..4ea79eb6a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java @@ -192,4 +192,8 @@ public class SavingsAccountChargeData implements Serializable { return this.amountOutstanding; } + public long getAccountId() { + return this.accountId; + } + } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java index a9239a197..9416d743b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountChargeReadPlatformServiceImpl.java @@ -163,11 +163,17 @@ public class SavingsAccountChargeReadPlatformServiceImpl implements SavingsAccou final List shareChargeCalculationTypeOptions = null; final List shareChargeTimeTypeOptions = null; final Collection taxGroupOptions = null; + + final String accountMappingForChargeConfig = null; + final List expenseAccountOptions = null; + final List assetAccountOptions = null; + // TODO AA : revisit for merge conflict - Not sure method signature return ChargeData.template(null, allowedChargeCalculationTypeOptions, null, allowedChargeTimeOptions, null, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions, clientChargeTimeTypeOptions, feeFrequencyOptions, - incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions); + incomeOrLiabilityAccountOptions, taxGroupOptions, shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions, + accountMappingForChargeConfig, expenseAccountOptions, assetAccountOptions); } @Override