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

adamsaghy 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 0358921d0 FINERACT-2103: refactor the boilerplate code for 
`ChargeData` class and its affiliate code
0358921d0 is described below

commit 0358921d02fe264aab02f9006a67d77b8bb74899
Author: zeyad2003 <[email protected]>
AuthorDate: Sat Jun 29 09:13:45 2024 +0300

    FINERACT-2103: refactor the boilerplate code for `ChargeData` class and its 
affiliate code
---
 ...tToGLAccountMappingReadPlatformServiceImpl.java |   2 +-
 .../fineract/portfolio/charge/domain/Charge.java   |  12 +-
 .../fineract/portfolio/charge/data/ChargeData.java | 232 +++------------------
 .../service/ChargeReadPlatformServiceImpl.java     |  30 ++-
 .../service/LoanChargeReadPlatformServiceImpl.java |  26 +--
 ...avingsAccountChargeReadPlatformServiceImpl.java |  25 +--
 6 files changed, 73 insertions(+), 254 deletions(-)

diff --git 
a/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java
 
b/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java
index 075bdd2b0..d32d02d56 100644
--- 
a/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java
+++ 
b/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingReadPlatformServiceImpl.java
@@ -334,7 +334,7 @@ public class 
ProductToGLAccountMappingReadPlatformServiceImpl implements Product
             final Long chargeId = (Long) 
chargeToIncomeAccountMap.get("chargeId");
             final String chargeName = (String) 
chargeToIncomeAccountMap.get("chargeName");
             final Boolean penalty1 = (Boolean) 
chargeToIncomeAccountMap.get("penalty");
-            final ChargeData chargeData = ChargeData.lookup(chargeId, 
chargeName, penalty1);
+            final ChargeData chargeData = 
ChargeData.builder().id(chargeId).name(chargeName).penalty(penalty1).build();
             final ChargeToGLAccountMapper chargeToGLAccountMapper = new 
ChargeToGLAccountMapper().setCharge(chargeData)
                     .setIncomeAccount(gLAccountData);
             chargeToGLAccountMappers.add(chargeToGLAccountMapper);
diff --git 
a/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
 
b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
index 86e330243..9a7269c35 100644
--- 
a/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
+++ 
b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
@@ -677,10 +677,14 @@ public class Charge extends 
AbstractPersistableCustom<Long> {
         }
 
         final CurrencyData currency = new CurrencyData(this.currencyCode, 
null, 0, 0, null, null);
-        return ChargeData.instance(getId(), this.name, this.amount, currency, 
chargeTimeType, chargeAppliesTo, chargeCalculationType,
-                chargePaymentMode, getFeeOnMonthDay(), this.feeInterval, 
this.penalty, this.active, this.enableFreeWithdrawal,
-                this.freeWithdrawalFrequency, this.restartFrequency, 
this.restartFrequencyEnum, this.enablePaymentType, paymentTypeData,
-                this.minCap, this.maxCap, feeFrequencyType, accountData, 
taxGroupData);
+        return 
ChargeData.builder().id(getId()).name(this.name).amount(this.amount).currency(currency).chargeTimeType(chargeTimeType)
+                
.chargeAppliesTo(chargeAppliesTo).chargeCalculationType(chargeCalculationType).chargePaymentMode(chargePaymentMode)
+                
.feeOnMonthDay(getFeeOnMonthDay()).feeInterval(this.feeInterval).penalty(this.penalty).active(this.active)
+                
.freeWithdrawal(this.enableFreeWithdrawal).freeWithdrawalChargeFrequency(this.freeWithdrawalFrequency)
+                
.restartFrequency(this.restartFrequency).restartFrequencyEnum(this.restartFrequencyEnum)
+                
.isPaymentType(this.enablePaymentType).paymentTypeOptions(paymentTypeData).minCap(this.minCap).maxCap(this.maxCap)
+                
.feeFrequency(feeFrequencyType).incomeOrLiabilityAccount(accountData).taxGroup(taxGroupData).build();
+
     }
 
     public Integer getChargePaymentMode() {
diff --git 
a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java
 
b/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java
index 8696e2d6a..789c15491 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/portfolio/charge/data/ChargeData.java
@@ -24,6 +24,8 @@ import java.time.MonthDay;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import org.apache.fineract.accounting.glaccount.data.GLAccountData;
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
@@ -36,17 +38,25 @@ import org.apache.fineract.portfolio.tax.data.TaxGroupData;
  * Immutable data object for charge data.
  */
 @Getter
+@EqualsAndHashCode(of = "id")
+@Builder(toBuilder = true)
 public final class ChargeData implements Comparable<ChargeData>, Serializable {
 
     private final Long id;
     private final String name;
-    private final boolean active;
-    private final boolean penalty;
-    private final boolean freeWithdrawal;
+
+    @Builder.Default
+    private final boolean active = Boolean.FALSE;
+    @Builder.Default
+    private final boolean penalty = Boolean.FALSE;
+    @Builder.Default
+    private final boolean freeWithdrawal = Boolean.FALSE;
+    @Builder.Default
+    private final boolean isPaymentType = Boolean.FALSE;
+
     private final Integer freeWithdrawalChargeFrequency;
     private final Integer restartFrequency;
     private final Integer restartFrequencyEnum;
-    private final boolean isPaymentType;
     private final PaymentTypeData paymentTypeOptions;
     private final CurrencyData currency;
     private final BigDecimal amount;
@@ -87,204 +97,24 @@ public final class ChargeData implements 
Comparable<ChargeData>, Serializable {
     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,
-            final List<EnumOptionData> loansChargeCalculationTypeOptions, 
final List<EnumOptionData> loansChargeTimeTypeOptions,
-            final List<EnumOptionData> savingsChargeCalculationTypeOptions, 
final List<EnumOptionData> savingsChargeTimeTypeOptions,
-            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, String 
accountMappingForChargeConfig,
-            List<GLAccountData> expenseAccountOptions, List<GLAccountData> 
assetAccountOptions) {
-        final GLAccountData account = null;
-        final TaxGroupData taxGroupData = null;
-
-        return new ChargeData(null, null, null, null, null, null, null, null, 
false, false, false, null, null, null, false, null,
-                taxGroupData, currencyOptions, chargeCalculationTypeOptions, 
chargeAppliesToOptions, chargeTimeTypeOptions,
-                chargePaymentModeOptions, loansChargeCalculationTypeOptions, 
loansChargeTimeTypeOptions,
-                savingsChargeCalculationTypeOptions, 
savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions,
-                clientChargeTimeTypeOptions, null, null, null, null, null, 
feeFrequencyOptions, account, incomeOrLiabilityAccountOptions,
-                taxGroupOptions, shareChargeCalculationTypeOptions, 
shareChargeTimeTypeOptions, accountMappingForChargeConfig,
-                expenseAccountOptions, assetAccountOptions);
-    }
-
     public static ChargeData withTemplate(final ChargeData charge, final 
ChargeData template) {
-        return new ChargeData(charge.id, charge.name, charge.amount, 
charge.currency, charge.chargeTimeType, charge.chargeAppliesTo,
-                charge.chargeCalculationType, charge.chargePaymentMode, 
charge.penalty, charge.active, charge.freeWithdrawal,
-                charge.freeWithdrawalChargeFrequency, charge.restartFrequency, 
charge.restartFrequencyEnum, charge.isPaymentType,
-                charge.paymentTypeOptions, charge.taxGroup, 
template.currencyOptions, template.chargeCalculationTypeOptions,
-                template.chargeAppliesToOptions, 
template.chargeTimeTypeOptions, template.chargePaymetModeOptions,
-                template.loanChargeCalculationTypeOptions, 
template.loanChargeTimeTypeOptions, 
template.savingsChargeCalculationTypeOptions,
-                template.savingsChargeTimeTypeOptions, 
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.accountMappingForChargeConfig,
-                template.expenseAccountOptions, template.assetAccountOptions);
-    }
-
-    public static ChargeData instance(final Long id, final String name, final 
BigDecimal amount, final CurrencyData currency,
-            final EnumOptionData chargeTimeType, final EnumOptionData 
chargeAppliesTo, final EnumOptionData chargeCalculationType,
-            final EnumOptionData chargePaymentMode, final MonthDay 
feeOnMonthDay, final Integer feeInterval, final boolean penalty,
-            final boolean active, final boolean freeWithdrawal, final Integer 
freeWithdrawalChargeFrequency, final Integer restartFrequency,
-            final Integer restartFrequencyEnum, final boolean isPaymentType, 
final PaymentTypeData paymentTypeOptions,
-            final BigDecimal minCap, final BigDecimal maxCap, final 
EnumOptionData feeFrequency, final GLAccountData accountData,
-            TaxGroupData taxGroupData) {
-
-        final Collection<CurrencyData> currencyOptions = null;
-        final List<EnumOptionData> chargeCalculationTypeOptions = null;
-        final List<EnumOptionData> chargeAppliesToOptions = null;
-        final List<EnumOptionData> chargeTimeTypeOptions = null;
-        final List<EnumOptionData> chargePaymentModeOptions = null;
-        final List<EnumOptionData> loansChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> loansChargeTimeTypeOptions = null;
-        final List<EnumOptionData> savingsChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> savingsChargeTimeTypeOptions = null;
-        final List<EnumOptionData> feeFrequencyOptions = null;
-        final List<EnumOptionData> clientChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> clientChargeTimeTypeOptions = null;
-        final Map<String, List<GLAccountData>> incomeOrLiabilityAccountOptions 
= null;
-        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, freeWithdrawal, 
freeWithdrawalChargeFrequency, restartFrequency, restartFrequencyEnum, 
isPaymentType,
-                paymentTypeOptions, taxGroupData, currencyOptions, 
chargeCalculationTypeOptions, chargeAppliesToOptions,
-                chargeTimeTypeOptions, chargePaymentModeOptions, 
loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions,
-                savingsChargeCalculationTypeOptions, 
savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions,
-                clientChargeTimeTypeOptions, feeOnMonthDay, feeInterval, 
minCap, maxCap, feeFrequency, feeFrequencyOptions, accountData,
-                incomeOrLiabilityAccountOptions, taxGroupOptions, 
shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions,
-                accountMappingForChargeConfig, expenseAccountOptions, 
assetAccountOptions);
-    }
-
-    public static ChargeData lookup(final Long id, final String name, final 
boolean isPenalty) {
-        final BigDecimal amount = null;
-        final CurrencyData currency = null;
-        final EnumOptionData chargeTimeType = null;
-        final EnumOptionData chargeAppliesTo = null;
-        final EnumOptionData chargeCalculationType = null;
-        final EnumOptionData chargePaymentMode = null;
-        final MonthDay feeOnMonthDay = null;
-        final Integer feeInterval = null;
-        final Boolean penalty = isPenalty;
-        final Boolean active = false;
-        final Boolean freeWithdrawal = false;
-        final Integer freeWithdrawalChargeFrequency = null;
-        final Integer restartFrequency = null;
-        final Integer restartFrequencyEnum = null;
-        final Boolean isPaymentType = false;
-        final PaymentTypeData paymentTypeOptions = null;
-        final BigDecimal minCap = null;
-        final BigDecimal maxCap = null;
-        final Collection<CurrencyData> currencyOptions = null;
-        final List<EnumOptionData> chargeCalculationTypeOptions = null;
-        final List<EnumOptionData> chargeAppliesToOptions = null;
-        final List<EnumOptionData> chargeTimeTypeOptions = null;
-        final List<EnumOptionData> chargePaymentModeOptions = null;
-        final List<EnumOptionData> loansChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> loansChargeTimeTypeOptions = null;
-        final List<EnumOptionData> savingsChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> savingsChargeTimeTypeOptions = null;
-        final List<EnumOptionData> clientChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> clientChargeTimeTypeOptions = null;
-        final EnumOptionData feeFrequency = null;
-        final List<EnumOptionData> feeFrequencyOptions = null;
-        final GLAccountData account = null;
-        final Map<String, List<GLAccountData>> incomeOrLiabilityAccountOptions 
= null;
-        final List<EnumOptionData> shareChargeCalculationTypeOptions = null;
-        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, freeWithdrawal, 
freeWithdrawalChargeFrequency, restartFrequency, restartFrequencyEnum, 
isPaymentType,
-                paymentTypeOptions, taxGroupData, currencyOptions, 
chargeCalculationTypeOptions, chargeAppliesToOptions,
-                chargeTimeTypeOptions, chargePaymentModeOptions, 
loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions,
-                savingsChargeCalculationTypeOptions, 
savingsChargeTimeTypeOptions, clientChargeCalculationTypeOptions,
-                clientChargeTimeTypeOptions, feeOnMonthDay, feeInterval, 
minCap, maxCap, feeFrequency, feeFrequencyOptions, account,
-                incomeOrLiabilityAccountOptions, taxGroupOptions, 
shareChargeCalculationTypeOptions, shareChargeTimeTypeOptions,
-                accountMappingForChargeConfig, expenseAccountOptions, 
assetAccountOptions);
-    }
-
-    private ChargeData(final Long id, final String name, final BigDecimal 
amount, final CurrencyData currency,
-            final EnumOptionData chargeTimeType, final EnumOptionData 
chargeAppliesTo, final EnumOptionData chargeCalculationType,
-            final EnumOptionData chargePaymentMode, final boolean penalty, 
final boolean active, final boolean freeWithdrawal,
-            final Integer freeWithdrawalChargeFrequency, final Integer 
restartFrequency, final Integer restartFrequencyEnum,
-            final boolean isPaymentType, final PaymentTypeData 
paymentTypeOptions, final TaxGroupData taxGroupData,
-            final Collection<CurrencyData> currencyOptions, final 
List<EnumOptionData> chargeCalculationTypeOptions,
-            final List<EnumOptionData> chargeAppliesToOptions, final 
List<EnumOptionData> chargeTimeTypeOptions,
-            final List<EnumOptionData> chargePaymentModeOptions, final 
List<EnumOptionData> loansChargeCalculationTypeOptions,
-            final List<EnumOptionData> loansChargeTimeTypeOptions, final 
List<EnumOptionData> savingsChargeCalculationTypeOptions,
-            final List<EnumOptionData> savingsChargeTimeTypeOptions, final 
List<EnumOptionData> clientChargeCalculationTypeOptions,
-            final List<EnumOptionData> clientChargeTimeTypeOptions, final 
MonthDay feeOnMonthDay, final Integer feeInterval,
-            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 String accountMappingForChargeConfig, final 
List<GLAccountData> expenseAccountOptions,
-            final List<GLAccountData> assetAccountOptions) {
-        this.id = id;
-        this.name = name;
-        this.amount = amount;
-        this.currency = currency;
-        this.chargeTimeType = chargeTimeType;
-        this.chargeAppliesTo = chargeAppliesTo;
-        this.chargeCalculationType = chargeCalculationType;
-        this.chargePaymentMode = chargePaymentMode;
-        this.feeInterval = feeInterval;
-        this.feeOnMonthDay = feeOnMonthDay;
-        this.penalty = penalty;
-        this.active = active;
-        this.freeWithdrawal = freeWithdrawal;
-        this.freeWithdrawalChargeFrequency = freeWithdrawalChargeFrequency;
-        this.restartFrequency = restartFrequency;
-        this.restartFrequencyEnum = restartFrequencyEnum;
-        this.isPaymentType = isPaymentType;
-        this.paymentTypeOptions = paymentTypeOptions;
-        this.minCap = minCap;
-        this.maxCap = maxCap;
-        this.currencyOptions = currencyOptions;
-        this.chargeCalculationTypeOptions = chargeCalculationTypeOptions;
-        this.chargeAppliesToOptions = chargeAppliesToOptions;
-        this.chargeTimeTypeOptions = chargeTimeTypeOptions;
-        this.chargePaymetModeOptions = chargePaymentModeOptions;
-        this.savingsChargeCalculationTypeOptions = 
savingsChargeCalculationTypeOptions;
-        this.savingsChargeTimeTypeOptions = savingsChargeTimeTypeOptions;
-        this.clientChargeCalculationTypeOptions = 
clientChargeCalculationTypeOptions;
-        this.clientChargeTimeTypeOptions = clientChargeTimeTypeOptions;
-        this.loanChargeCalculationTypeOptions = 
loansChargeCalculationTypeOptions;
-        this.loanChargeTimeTypeOptions = loansChargeTimeTypeOptions;
-        this.feeFrequency = feeFrequency;
-        this.feeFrequencyOptions = feeFrequencyOptions;
-        this.incomeOrLiabilityAccount = account;
-        this.incomeOrLiabilityAccountOptions = incomeOrLiabilityAccountOptions;
-        this.taxGroup = taxGroupData;
-        this.taxGroupOptions = taxGroupOptions;
-        this.shareChargeCalculationTypeOptions = 
shareChargeCalculationTypeOptions;
-        this.shareChargeTimeTypeOptions = shareChargeTimeTypeOptions;
-        this.accountMappingForChargeConfig = accountMappingForChargeConfig;
-        this.assetAccountOptions = assetAccountOptions;
-        this.expenseAccountOptions = expenseAccountOptions;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (!(obj instanceof ChargeData)) {
-            return false;
-        }
-        final ChargeData chargeData = (ChargeData) obj;
-        return this.id.equals(chargeData.id);
-    }
-
-    @Override
-    public int hashCode() {
-        return this.id.hashCode();
+        return 
charge.toBuilder().currencyOptions(template.getCurrencyOptions())
+                
.chargeCalculationTypeOptions(template.getChargeCalculationTypeOptions())
+                
.chargeAppliesToOptions(template.getChargeAppliesToOptions()).chargeTimeTypeOptions(template.getChargeTimeTypeOptions())
+                .chargePaymetModeOptions(template.getChargePaymetModeOptions())
+                
.loanChargeCalculationTypeOptions(template.getLoanChargeCalculationTypeOptions())
+                
.loanChargeTimeTypeOptions(template.getLoanChargeTimeTypeOptions())
+                
.savingsChargeCalculationTypeOptions(template.getSavingsChargeCalculationTypeOptions())
+                
.savingsChargeTimeTypeOptions(template.getSavingsChargeTimeTypeOptions())
+                
.clientChargeCalculationTypeOptions(template.getClientChargeCalculationTypeOptions())
+                
.clientChargeTimeTypeOptions(template.getClientChargeTimeTypeOptions())
+                .feeFrequencyOptions(template.getFeeFrequencyOptions())
+                
.incomeOrLiabilityAccountOptions(template.getIncomeOrLiabilityAccountOptions())
+                .taxGroupOptions(template.getTaxGroupOptions())
+                
.shareChargeCalculationTypeOptions(template.getShareChargeCalculationTypeOptions())
+                
.shareChargeTimeTypeOptions(template.getShareChargeTimeTypeOptions())
+                
.accountMappingForChargeConfig(template.getAccountMappingForChargeConfig())
+                
.expenseAccountOptions(template.getExpenseAccountOptions()).assetAccountOptions(template.getAssetAccountOptions()).build();
     }
 
     @Override
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 ca0e7df46..35fb7e5e4 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
@@ -140,12 +140,18 @@ public class ChargeReadPlatformServiceImpl implements 
ChargeReadPlatformService
         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, 
accountMappingForChargeConfig, expenseAccountOptions,
-                assetAccountOptions);
+        return 
ChargeData.builder().currencyOptions(currencyOptions).chargeCalculationTypeOptions(allowedChargeCalculationTypeOptions)
+                
.chargeAppliesToOptions(allowedChargeAppliesToOptions).chargeTimeTypeOptions(allowedChargeTimeOptions)
+                
.chargePaymetModeOptions(chargePaymentOptions).loanChargeCalculationTypeOptions(loansChargeCalculationTypeOptions)
+                .loanChargeTimeTypeOptions(loansChargeTimeTypeOptions)
+                
.savingsChargeCalculationTypeOptions(savingsChargeCalculationTypeOptions)
+                .savingsChargeTimeTypeOptions(savingsChargeTimeTypeOptions)
+                
.clientChargeCalculationTypeOptions(clientChargeCalculationTypeOptions)
+                
.clientChargeTimeTypeOptions(clientChargeTimeTypeOptions).feeFrequencyOptions(feeFrequencyOptions)
+                
.incomeOrLiabilityAccountOptions(incomeOrLiabilityAccountOptions).taxGroupOptions(taxGroupOptions)
+                
.shareChargeCalculationTypeOptions(shareChargeCalculationTypeOptions).shareChargeTimeTypeOptions(shareChargeTimeTypeOptions)
+                
.accountMappingForChargeConfig(accountMappingForChargeConfig).expenseAccountOptions(expenseAccountOptions)
+                .assetAccountOptions(assetAccountOptions).build();
     }
 
     @Override
@@ -368,10 +374,14 @@ public class ChargeReadPlatformServiceImpl implements 
ChargeReadPlatformService
                 paymentTypeData = PaymentTypeData.instance(paymentTypeId, 
paymentTypeName);
             }
 
-            return ChargeData.instance(id, name, amount, currency, 
chargeTimeType, chargeAppliesToType, chargeCalculationType,
-                    chargePaymentMode, feeOnMonthDay, feeInterval, penalty, 
active, isFreeWithdrawal, freeWithdrawalChargeFrequency,
-                    restartFrequency, restartFrequencyEnum, isPaymentType, 
paymentTypeData, minCap, maxCap, feeFrequencyType, glAccountData,
-                    taxGroupData);
+            return 
ChargeData.builder().id(id).name(name).amount(amount).currency(currency).chargeTimeType(chargeTimeType)
+                    
.chargeAppliesTo(chargeAppliesToType).chargeCalculationType(chargeCalculationType).chargePaymentMode(chargePaymentMode)
+                    
.feeOnMonthDay(feeOnMonthDay).feeInterval(feeInterval).penalty(penalty).active(active).freeWithdrawal(isFreeWithdrawal)
+                    
.freeWithdrawalChargeFrequency(freeWithdrawalChargeFrequency).restartFrequency(restartFrequency)
+                    
.restartFrequencyEnum(restartFrequencyEnum).isPaymentType(isPaymentType).paymentTypeOptions(paymentTypeData)
+                    
.minCap(minCap).maxCap(maxCap).feeFrequency(feeFrequencyType).incomeOrLiabilityAccount(glAccountData)
+                    .taxGroup(taxGroupData).build();
+
         }
     }
 
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 79d2e4532..2ebaaf1f8 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
@@ -28,7 +28,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import lombok.RequiredArgsConstructor;
-import org.apache.fineract.accounting.glaccount.data.GLAccountData;
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 import org.apache.fineract.infrastructure.core.domain.ExternalId;
 import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
@@ -47,7 +46,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanChargeRepository;
 import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
-import org.apache.fineract.portfolio.tax.data.TaxGroupData;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
@@ -149,25 +147,15 @@ public class LoanChargeReadPlatformServiceImpl implements 
LoanChargeReadPlatform
                 .retrieveSavingsCalculationTypes();
         final List<EnumOptionData> savingsChargeTimeTypeOptions = 
this.chargeDropdownReadPlatformService
                 .retrieveSavingsCollectionTimeTypes();
-        final List<EnumOptionData> clientChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> clientChargeTimeTypeOptions = null;
 
         final List<EnumOptionData> feeFrequencyOptions = 
this.dropdownReadPlatformService.retrievePeriodFrequencyTypeOptions();
-        // this field is applicable only for client charges
-        final Map<String, List<GLAccountData>> incomeOrLiabilityAccountOptions 
= null;
-        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,
-                accountMappingForChargeConfig, expenseAccountOptions, 
assetAccountOptions);
+        // other fields is applicable only for client charges
+
+        return 
ChargeData.builder().chargeCalculationTypeOptions(allowedChargeCalculationTypeOptions)
+                
.chargeTimeTypeOptions(allowedChargeTimeOptions).loanChargeCalculationTypeOptions(loansChargeCalculationTypeOptions)
+                .loanChargeTimeTypeOptions(loansChargeTimeTypeOptions)
+                
.savingsChargeCalculationTypeOptions(savingsChargeCalculationTypeOptions)
+                
.savingsChargeTimeTypeOptions(savingsChargeTimeTypeOptions).feeFrequencyOptions(feeFrequencyOptions).build();
     }
 
     @Override
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 cae4b15d0..b28b2ec92 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
@@ -25,8 +25,6 @@ import java.time.LocalDate;
 import java.time.MonthDay;
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
-import org.apache.fineract.accounting.glaccount.data.GLAccountData;
 import org.apache.fineract.infrastructure.core.data.EnumOptionData;
 import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
 import org.apache.fineract.infrastructure.core.service.DateUtils;
@@ -42,7 +40,6 @@ import 
org.apache.fineract.portfolio.common.service.DropdownReadPlatformService;
 import org.apache.fineract.portfolio.savings.data.SavingsAccountAnnualFeeData;
 import org.apache.fineract.portfolio.savings.data.SavingsAccountChargeData;
 import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType;
-import org.apache.fineract.portfolio.tax.data.TaxGroupData;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
@@ -158,26 +155,16 @@ public class SavingsAccountChargeReadPlatformServiceImpl 
implements SavingsAccou
                 .retrieveSavingsCalculationTypes();
         final List<EnumOptionData> savingsChargeTimeTypeOptions = 
this.chargeDropdownReadPlatformService
                 .retrieveSavingsCollectionTimeTypes();
-        final List<EnumOptionData> clientChargeCalculationTypeOptions = null;
-        final List<EnumOptionData> clientChargeTimeTypeOptions = null;
 
         final List<EnumOptionData> feeFrequencyOptions = 
this.dropdownReadPlatformService.retrievePeriodFrequencyTypeOptions();
-        // this field is applicable only for client charges
-        final Map<String, List<GLAccountData>> incomeOrLiabilityAccountOptions 
= null;
-        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;
+        // other fields is applicable only for client charges
 
         // 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,
-                accountMappingForChargeConfig, expenseAccountOptions, 
assetAccountOptions);
+        return 
ChargeData.builder().chargeCalculationTypeOptions(allowedChargeCalculationTypeOptions)
+                
.chargeTimeTypeOptions(allowedChargeTimeOptions).loanChargeCalculationTypeOptions(loansChargeCalculationTypeOptions)
+                .loanChargeTimeTypeOptions(loansChargeTimeTypeOptions)
+                
.savingsChargeCalculationTypeOptions(savingsChargeCalculationTypeOptions)
+                
.savingsChargeTimeTypeOptions(savingsChargeTimeTypeOptions).feeFrequencyOptions(feeFrequencyOptions).build();
     }
 
     @Override


Reply via email to