This is an automated email from the ASF dual-hosted git repository.

avikg pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new e942527   FINERACT-1411 Allow charges type saving to map to all types 
of Ledgers (#1935)
e942527 is described below

commit e942527efea0b04a23ef01c9e2a5f21d5f765300
Author: ankita10r <[email protected]>
AuthorDate: Fri Oct 29 16:35:02 2021 +0530

     FINERACT-1411 Allow charges type saving to map to all types of Ledgers 
(#1935)
---
 .../AccountingDropdownReadPlatformService.java     |  4 +++
 .../AccountingDropdownReadPlatformServiceImpl.java | 10 +++++++
 .../journalentry/data/ChargePaymentDTO.java        |  1 +
 .../service/AccountingProcessorHelper.java         | 20 +++++++++++---
 .../LoanProductToGLAccountMappingHelper.java       |  4 +--
 .../service/ProductToGLAccountMappingHelper.java   |  5 ++--
 ...oductToGLAccountMappingReadPlatformService.java |  2 +-
 ...tToGLAccountMappingReadPlatformServiceImpl.java |  2 +-
 .../SavingsProductToGLAccountMappingHelper.java    |  4 +--
 .../ShareProductToGLAccountMappingHelper.java      |  4 +--
 .../domain/ConfigurationDomainServiceJpa.java      |  6 ++--
 .../portfolio/charge/api/ChargesApiResource.java   |  1 -
 .../fineract/portfolio/charge/data/ChargeData.java | 32 ++++++++++++++++++----
 .../fineract/portfolio/charge/domain/Charge.java   |  2 +-
 .../service/ChargeReadPlatformServiceImpl.java     | 12 ++++++--
 .../service/LoanChargeReadPlatformServiceImpl.java |  8 +++++-
 .../loanproduct/api/LoanProductsApiResource.java   |  3 +-
 .../savings/data/SavingsAccountChargeData.java     |  4 +++
 ...avingsAccountChargeReadPlatformServiceImpl.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 b1da6b7..d6a23a3 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<String, List<GLAccountData>> 
retrieveAccountMappingOptionsForShareProducts();
 
+    List<GLAccountData> retrieveExpenseAccountOptions();
+
+    List<GLAccountData> 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 d73a824..6e0014c 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<GLAccountData> retrieveExpenseAccountOptions() {
+        return 
accountReadPlatformService.retrieveAllEnabledDetailGLAccounts(GLAccountType.EXPENSE);
+    }
+
+    @Override
+    public List<GLAccountData> retrieveAssetAccountOptions() {
+        return 
accountReadPlatformService.retrieveAllEnabledDetailGLAccounts(GLAccountType.ASSET);
+    }
+
     private Map<String, List<GLAccountData>> 
retrieveAccountMappingOptions(boolean includeAssetAccounts, boolean 
includeIncomeAccounts,
             boolean includeExpenseAccounts, boolean includeLiabilityAccounts, 
boolean includeEquityAccounts) {
         final Map<String, List<GLAccountData>> 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 27efe3b..9154286 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 cda9f52..026fddd 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<String, Object> 
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<ChargePaymentDTO> 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 9dd074e..24cfcf3 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<String, Object> 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 2e44ad9..f29a849 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<String, Object> 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 3b0a304..47df148 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<PaymentTypeToGLAccountMapper> 
fetchPaymentTypeToFundSourceMappingsForLoanProduct(Long loanProductId);
 
-    List<ChargeToGLAccountMapper> 
fetchFeeToIncomeOrLiabilityAccountMappingsForLoanProduct(Long loanProductId);
+    List<ChargeToGLAccountMapper> 
fetchFeeToGLAccountMappingsForLoanProduct(Long loanProductId);
 
     List<ChargeToGLAccountMapper> 
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 85718d9..38bfabc 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<ChargeToGLAccountMapper> 
fetchFeeToIncomeOrLiabilityAccountMappingsForLoanProduct(final Long 
loanProductId) {
+    public List<ChargeToGLAccountMapper> 
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 37a4dc8..598f9c3 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<String, Object> 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 0ec0483..51ca34b 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<String, Object> 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 b03c2a9..1f485f5 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 63f68b3..0b18874 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 230b6d5..684d88e 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<ChargeData>, Serializable {
     private final Map<String, List<GLAccountData>> 
incomeOrLiabilityAccountOptions;
     private final Collection<TaxGroupData> taxGroupOptions;
 
+    private final String accountMappingForChargeConfig;
+    private final List<GLAccountData> expenseAccountOptions;
+    private final List<GLAccountData> assetAccountOptions;
+
     public static ChargeData template(final Collection<CurrencyData> 
currencyOptions,
             final List<EnumOptionData> chargeCalculationTypeOptions, final 
List<EnumOptionData> chargeAppliesToOptions,
             final List<EnumOptionData> chargeTimeTypeOptions, final 
List<EnumOptionData> chargePaymentModeOptions,
@@ -85,7 +89,8 @@ public final class ChargeData implements 
Comparable<ChargeData>, Serializable {
             final List<EnumOptionData> clientChargeCalculationTypeOptions, 
final List<EnumOptionData> clientChargeTimeTypeOptions,
             final List<EnumOptionData> feeFrequencyOptions, final Map<String, 
List<GLAccountData>> incomeOrLiabilityAccountOptions,
             final Collection<TaxGroupData> taxGroupOptions, final 
List<EnumOptionData> shareChargeCalculationTypeOptions,
-            final List<EnumOptionData> shareChargeTimeTypeOptions) {
+            final List<EnumOptionData> shareChargeTimeTypeOptions, String 
accountMappingForChargeConfig,
+            List<GLAccountData> expenseAccountOptions, List<GLAccountData> 
assetAccountOptions) {
         final GLAccountData account = null;
         final TaxGroupData taxGroupData = null;
 
@@ -94,7 +99,7 @@ public final class ChargeData implements 
Comparable<ChargeData>, 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<ChargeData>, 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<ChargeData>, Serializable {
         final List<EnumOptionData> shareChargeCalculationTypeOptions = null;
         final List<EnumOptionData> shareChargeTimeTypeOptions = null;
         final Collection<TaxGroupData> taxGroupOptions = null;
+        final String accountMappingForChargeConfig = null;
+        final List<GLAccountData> expenseAccountOptions = null;
+        final List<GLAccountData> 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<ChargeData>, Serializable {
         final List<EnumOptionData> shareChargeTimeTypeOptions = null;
         final TaxGroupData taxGroupData = null;
         final Collection<TaxGroupData> taxGroupOptions = null;
+        final String accountMappingForChargeConfig = null;
+        final List<GLAccountData> expenseAccountOptions = null;
+        final List<GLAccountData> 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<ChargeData>, Serializable {
             final BigDecimal minCap, final BigDecimal maxCap, final 
EnumOptionData feeFrequency,
             final List<EnumOptionData> feeFrequencyOptions, final 
GLAccountData account,
             final Map<String, List<GLAccountData>> 
incomeOrLiabilityAccountOptions, final Collection<TaxGroupData> taxGroupOptions,
-            final List<EnumOptionData> shareChargeCalculationTypeOptions, 
final List<EnumOptionData> shareChargeTimeTypeOptions) {
+            final List<EnumOptionData> shareChargeCalculationTypeOptions, 
final List<EnumOptionData> shareChargeTimeTypeOptions,
+            final String accountMappingForChargeConfig, final 
List<GLAccountData> expenseAccountOptions,
+            final List<GLAccountData> assetAccountOptions) {
         this.id = id;
         this.name = name;
         this.amount = amount;
@@ -225,6 +242,9 @@ public final class ChargeData implements 
Comparable<ChargeData>, 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 aad7e7b..2078802 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 b2b6288..9bf0703 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<EnumOptionData> shareChargeTimeTypeOptions = 
this.chargeDropdownReadPlatformService.retrieveSharesCollectionTimeTypes();
         final Collection<TaxGroupData> taxGroupOptions = 
this.taxReadPlatformService.retrieveTaxGroupsForLookUp();
+        final String accountMappingForChargeConfig = 
this.configurationDomainServiceJpa.getAccountMappingForCharge();
+        final List<GLAccountData> expenseAccountOptions = 
this.accountingDropdownReadPlatformService.retrieveExpenseAccountOptions();
+        final List<GLAccountData> 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 d16c344..954f89e 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<EnumOptionData> shareChargeCalculationTypeOptions = null;
         final List<EnumOptionData> shareChargeTimeTypeOptions = null;
         final Collection<TaxGroupData> taxGroupOptions = null;
+
+        final String accountMappingForChargeConfig = null;
+        final List<GLAccountData> expenseAccountOptions = null;
+        final List<GLAccountData> 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 b07cba3..0799ebf 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 c46c41d..4ea79eb 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 a9239a1..9416d74 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<EnumOptionData> shareChargeCalculationTypeOptions = null;
         final List<EnumOptionData> shareChargeTimeTypeOptions = null;
         final Collection<TaxGroupData> taxGroupOptions = null;
+
+        final String accountMappingForChargeConfig = null;
+        final List<GLAccountData> expenseAccountOptions = null;
+        final List<GLAccountData> 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

Reply via email to