FINERACT-2103: refactor the boilerplate code for ChargeData class and its affiliate code
This commit is contained in:
+31
-201
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user