FINERACT-2330: Buy-Down fees Accounting for non merchant product
This commit is contained in:
committed by
Arnold Gálovics
parent
125c8b4db2
commit
6bbc4bd3f3
+6
-4
@@ -256,7 +256,7 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi
|
||||
*/
|
||||
public void handleChangesToLoanProductToGLAccountMappings(final Long loanProductId, final Map<String, Object> changes,
|
||||
final JsonElement element, final AccountingRuleType accountingRuleType, final boolean enableIncomeCapitalization,
|
||||
final boolean enableBuyDownFee) {
|
||||
final boolean enableBuyDownFee, final boolean merchantBuyDownFee) {
|
||||
switch (accountingRuleType) {
|
||||
case NONE:
|
||||
break;
|
||||
@@ -399,9 +399,11 @@ public class LoanProductToGLAccountMappingHelper extends ProductToGLAccountMappi
|
||||
deleteProductToGLAccountMapping(loanProductId, PortfolioProductType.LOAN,
|
||||
AccrualAccountsForLoan.BUY_DOWN_EXPENSE.getValue());
|
||||
} else {
|
||||
mergeLoanToExpenseAccountMappingChanges(element, LoanProductAccountingParams.BUY_DOWN_EXPENSE.getValue(), loanProductId,
|
||||
AccrualAccountsForLoan.BUY_DOWN_EXPENSE.getValue(), AccrualAccountsForLoan.BUY_DOWN_EXPENSE.toString(),
|
||||
changes);
|
||||
if (merchantBuyDownFee) {
|
||||
mergeLoanToExpenseAccountMappingChanges(element, LoanProductAccountingParams.BUY_DOWN_EXPENSE.getValue(),
|
||||
loanProductId, AccrualAccountsForLoan.BUY_DOWN_EXPENSE.getValue(),
|
||||
AccrualAccountsForLoan.BUY_DOWN_EXPENSE.toString(), changes);
|
||||
}
|
||||
}
|
||||
|
||||
// liabilities
|
||||
|
||||
+1
@@ -46,5 +46,6 @@ public class AccountingBridgeDataDTO {
|
||||
private Long chargeOffReasonCodeValue;
|
||||
private boolean isWrittenOff;
|
||||
private List<AccountingBridgeLoanTransactionDTO> newLoanTransactions = new ArrayList<>();
|
||||
private boolean merchantBuyDownFee;
|
||||
|
||||
}
|
||||
|
||||
+5
-2
@@ -288,6 +288,7 @@ public class LoanAccountData {
|
||||
private StringEnumOptionData buyDownFeeCalculationType;
|
||||
private StringEnumOptionData buyDownFeeStrategy;
|
||||
private StringEnumOptionData buyDownFeeIncomeType;
|
||||
private Boolean merchantBuyDownFee;
|
||||
|
||||
public static LoanAccountData importInstanceIndividual(EnumOptionData loanTypeEnumOption, Long clientId, Long productId,
|
||||
Long loanOfficerId, LocalDate submittedOnDate, Long fundId, BigDecimal principal, Integer numberOfRepayments,
|
||||
@@ -483,7 +484,8 @@ public class LoanAccountData {
|
||||
final boolean enableIncomeCapitalization, final StringEnumOptionData capitalizedIncomeCalculationType,
|
||||
final StringEnumOptionData capitalizedIncomeStrategy, StringEnumOptionData capitalizedIncomeType,
|
||||
final boolean enableBuyDownFee, final StringEnumOptionData buyDownFeeCalculationType,
|
||||
final StringEnumOptionData buyDownFeeStrategy, final StringEnumOptionData buyDownFeeIncomeType) {
|
||||
final StringEnumOptionData buyDownFeeStrategy, final StringEnumOptionData buyDownFeeIncomeType,
|
||||
final boolean merchantBuyDownFee) {
|
||||
|
||||
final CollectionData delinquent = CollectionData.template();
|
||||
|
||||
@@ -533,7 +535,8 @@ public class LoanAccountData {
|
||||
.setCapitalizedIncomeCalculationType(capitalizedIncomeCalculationType)
|
||||
.setCapitalizedIncomeStrategy(capitalizedIncomeStrategy).setCapitalizedIncomeType(capitalizedIncomeType)
|
||||
.setEnableBuyDownFee(enableBuyDownFee).setBuyDownFeeCalculationType(buyDownFeeCalculationType)
|
||||
.setBuyDownFeeStrategy(buyDownFeeStrategy).setBuyDownFeeIncomeType(buyDownFeeIncomeType);
|
||||
.setBuyDownFeeStrategy(buyDownFeeStrategy).setBuyDownFeeIncomeType(buyDownFeeIncomeType)
|
||||
.setMerchantBuyDownFee(merchantBuyDownFee);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+17
-5
@@ -246,6 +246,7 @@ public final class LoanApplicationTerms {
|
||||
private LoanBuyDownFeeCalculationType buyDownFeeCalculationType;
|
||||
private LoanBuyDownFeeStrategy buyDownFeeStrategy;
|
||||
private LoanBuyDownFeeIncomeType buyDownFeeIncomeType;
|
||||
private boolean merchantBuyDownFee;
|
||||
|
||||
private LoanApplicationTerms(Builder builder) {
|
||||
this.currency = builder.currency;
|
||||
@@ -290,6 +291,7 @@ public final class LoanApplicationTerms {
|
||||
this.buyDownFeeCalculationType = builder.buyDownFeeCalculationType;
|
||||
this.buyDownFeeStrategy = builder.buyDownFeeStrategy;
|
||||
this.buyDownFeeIncomeType = builder.buyDownFeeIncomeType;
|
||||
this.merchantBuyDownFee = builder.merchantBuyDownFee;
|
||||
this.interestMethod = builder.interestMethod;
|
||||
this.allowPartialPeriodInterestCalcualtion = builder.allowPartialPeriodInterestCalculation;
|
||||
}
|
||||
@@ -330,6 +332,7 @@ public final class LoanApplicationTerms {
|
||||
private LoanBuyDownFeeCalculationType buyDownFeeCalculationType;
|
||||
private LoanBuyDownFeeStrategy buyDownFeeStrategy;
|
||||
private LoanBuyDownFeeIncomeType buyDownFeeIncomeType;
|
||||
private boolean merchantBuyDownFee;
|
||||
private boolean allowPartialPeriodInterestCalculation;
|
||||
|
||||
public Builder interestMethod(InterestMethod interestMethod) {
|
||||
@@ -492,6 +495,11 @@ public final class LoanApplicationTerms {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder merchantBuyDownFee(boolean value) {
|
||||
this.merchantBuyDownFee = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LoanApplicationTerms build() {
|
||||
return new LoanApplicationTerms(this);
|
||||
}
|
||||
@@ -570,7 +578,8 @@ public final class LoanApplicationTerms {
|
||||
final LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType,
|
||||
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType,
|
||||
final boolean enableBuyDownFee, final LoanBuyDownFeeCalculationType buyDownFeeCalculationType,
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType) {
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType,
|
||||
final boolean merchantBuyDownFee) {
|
||||
|
||||
final LoanRescheduleStrategyMethod rescheduleStrategyMethod = null;
|
||||
final CalendarHistoryDataWrapper calendarHistoryDataWrapper = null;
|
||||
@@ -592,7 +601,7 @@ public final class LoanApplicationTerms {
|
||||
fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
|
||||
interestRecognitionOnDisbursementDate, daysInYearCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, enableBuyDownFee,
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
|
||||
}
|
||||
|
||||
@@ -670,7 +679,8 @@ public final class LoanApplicationTerms {
|
||||
loanProductRelatedDetail.isEnableIncomeCapitalization(), loanProductRelatedDetail.getCapitalizedIncomeCalculationType(),
|
||||
loanProductRelatedDetail.getCapitalizedIncomeStrategy(), loanProductRelatedDetail.getCapitalizedIncomeType(),
|
||||
loanProductRelatedDetail.isEnableBuyDownFee(), loanProductRelatedDetail.getBuyDownFeeCalculationType(),
|
||||
loanProductRelatedDetail.getBuyDownFeeStrategy(), loanProductRelatedDetail.getBuyDownFeeIncomeType());
|
||||
loanProductRelatedDetail.getBuyDownFeeStrategy(), loanProductRelatedDetail.getBuyDownFeeIncomeType(),
|
||||
loanProductRelatedDetail.isMerchantBuyDownFee());
|
||||
}
|
||||
|
||||
private LoanApplicationTerms(final CurrencyData currency, final Integer loanTermFrequency,
|
||||
@@ -705,7 +715,8 @@ public final class LoanApplicationTerms {
|
||||
final boolean enableIncomeCapitalization, final LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType,
|
||||
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType,
|
||||
final boolean enableBuyDownFee, final LoanBuyDownFeeCalculationType buyDownFeeCalculationType,
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType) {
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType,
|
||||
final boolean merchantBuyDownFee) {
|
||||
|
||||
this.currency = currency;
|
||||
this.loanTermFrequency = loanTermFrequency;
|
||||
@@ -815,6 +826,7 @@ public final class LoanApplicationTerms {
|
||||
this.buyDownFeeCalculationType = buyDownFeeCalculationType;
|
||||
this.buyDownFeeStrategy = buyDownFeeStrategy;
|
||||
this.buyDownFeeIncomeType = buyDownFeeIncomeType;
|
||||
this.merchantBuyDownFee = merchantBuyDownFee;
|
||||
}
|
||||
|
||||
public Money adjustPrincipalIfLastRepaymentPeriod(final Money principalForPeriod, final Money totalCumulativePrincipalToDate,
|
||||
@@ -1679,7 +1691,7 @@ public final class LoanApplicationTerms {
|
||||
this.chargeOffBehaviour, this.interestRecognitionOnDisbursementDate, this.daysInYearCustomStrategy,
|
||||
this.enableIncomeCapitalization, this.capitalizedIncomeCalculationType, this.capitalizedIncomeStrategy,
|
||||
this.capitalizedIncomeType, this.installmentAmountInMultiplesOf, this.enableBuyDownFee, this.buyDownFeeCalculationType,
|
||||
this.buyDownFeeStrategy, this.buyDownFeeIncomeType);
|
||||
this.buyDownFeeStrategy, this.buyDownFeeIncomeType, this.merchantBuyDownFee);
|
||||
}
|
||||
|
||||
public LoanProductMinimumRepaymentScheduleRelatedDetail toLoanProductRelatedDetailMinimumData() {
|
||||
|
||||
+3
-3
@@ -59,13 +59,13 @@ public class LoanAccountingBridgeMapper {
|
||||
currencyCode, loan.getSummary().getTotalInterestCharged(), loan.isCashBasedAccountingEnabledOnLoanProduct(),
|
||||
loan.isUpfrontAccrualAccountingEnabledOnLoanProduct(), loan.isPeriodicAccrualAccountingEnabledOnLoanProduct(),
|
||||
isAccountTransfer, false, loan.isFraud(), loan.fetchChargeOffReasonId(), loan.isClosedWrittenOff(),
|
||||
newLoanTransactionsBeforeChargeOff);
|
||||
newLoanTransactionsBeforeChargeOff, loan.getLoanProductRelatedDetail().isMerchantBuyDownFee());
|
||||
|
||||
AccountingBridgeDataDTO afterChargeOff = new AccountingBridgeDataDTO(loan.getId(), loan.productId(), loan.getOfficeId(),
|
||||
currencyCode, loan.getSummary().getTotalInterestCharged(), loan.isCashBasedAccountingEnabledOnLoanProduct(),
|
||||
loan.isUpfrontAccrualAccountingEnabledOnLoanProduct(), loan.isPeriodicAccrualAccountingEnabledOnLoanProduct(),
|
||||
isAccountTransfer, true, loan.isFraud(), loan.fetchChargeOffReasonId(), loan.isClosedWrittenOff(),
|
||||
newLoanTransactionsAfterChargeOff);
|
||||
newLoanTransactionsAfterChargeOff, loan.getLoanProductRelatedDetail().isMerchantBuyDownFee());
|
||||
|
||||
List<AccountingBridgeDataDTO> result = new ArrayList<>();
|
||||
result.add(beforeChargeOff);
|
||||
@@ -86,7 +86,7 @@ public class LoanAccountingBridgeMapper {
|
||||
loan.getSummary().getTotalInterestCharged(), loan.isCashBasedAccountingEnabledOnLoanProduct(),
|
||||
loan.isUpfrontAccrualAccountingEnabledOnLoanProduct(), loan.isPeriodicAccrualAccountingEnabledOnLoanProduct(),
|
||||
isAccountTransfer, loan.isChargedOff(), loan.isFraud(), loan.fetchChargeOffReasonId(), loan.isClosedWrittenOff(),
|
||||
newLoanTransactions);
|
||||
newLoanTransactions, loan.getLoanProductRelatedDetail().isMerchantBuyDownFee());
|
||||
}
|
||||
|
||||
public AccountingBridgeLoanTransactionDTO mapToLoanTransactionData(final LoanTransaction transaction, final String currencyCode) {
|
||||
|
||||
+1
@@ -183,4 +183,5 @@ public interface LoanProductConstants {
|
||||
String BUY_DOWN_FEE_CALCULATION_TYPE_PARAM_NAME = "buyDownFeeCalculationType";
|
||||
String BUY_DOWN_FEE_STRATEGY_PARAM_NAME = "buyDownFeeStrategy";
|
||||
String BUY_DOWN_FEE_INCOME_TYPE_PARAM_NAME = "buyDownFeeIncomeType";
|
||||
String MERCHANT_BUY_DOWN_FEE_PARAM_NAME = "merchantBuyDownFee";
|
||||
}
|
||||
|
||||
+10
@@ -213,6 +213,8 @@ public final class LoanProductsApiResourceSwagger {
|
||||
public String buyDownFeeStrategy;
|
||||
@Schema(example = "FEE", allowableValues = { "FEE", "INTEREST" })
|
||||
public String buyDownFeeIncomeType;
|
||||
@Schema(example = "false")
|
||||
public Boolean merchantBuyDownFee;
|
||||
|
||||
// Interest Recalculation
|
||||
@Schema(example = "false")
|
||||
@@ -693,6 +695,8 @@ public final class LoanProductsApiResourceSwagger {
|
||||
public StringEnumOptionData buyDownFeeStrategy;
|
||||
@Schema(example = "FEE")
|
||||
public StringEnumOptionData buyDownFeeIncomeType;
|
||||
@Schema(example = "false")
|
||||
public Boolean merchantBuyDownFee;
|
||||
}
|
||||
|
||||
@Schema(description = "GetLoanProductsTemplateResponse")
|
||||
@@ -1157,6 +1161,8 @@ public final class LoanProductsApiResourceSwagger {
|
||||
public StringEnumOptionData buyDownFeeCalculationType;
|
||||
@Schema(example = "EQUAL_AMORTIZATION")
|
||||
public StringEnumOptionData buyDownFeeStrategy;
|
||||
@Schema(example = "false")
|
||||
public Boolean merchantBuyDownFee;
|
||||
@Schema(example = "FEE")
|
||||
public StringEnumOptionData buyDownFeeIncomeType;
|
||||
public List<StringEnumOptionData> buyDownFeeCalculationTypeOptions;
|
||||
@@ -1505,6 +1511,8 @@ public final class LoanProductsApiResourceSwagger {
|
||||
public StringEnumOptionData buyDownFeeStrategy;
|
||||
@Schema(example = "FEE")
|
||||
public StringEnumOptionData buyDownFeeIncomeType;
|
||||
@Schema(example = "false")
|
||||
public Boolean merchantBuyDownFee;
|
||||
public List<StringEnumOptionData> buyDownFeeCalculationTypeOptions;
|
||||
public List<StringEnumOptionData> buyDownFeeStrategyOptions;
|
||||
public List<StringEnumOptionData> buyDownFeeIncomeTypeOptions;
|
||||
@@ -1787,6 +1795,8 @@ public final class LoanProductsApiResourceSwagger {
|
||||
public String buyDownFeeStrategy;
|
||||
@Schema(example = "FEE", allowableValues = { "FEE", "INTEREST" })
|
||||
public String buyDownFeeIncomeType;
|
||||
@Schema(example = "false")
|
||||
public Boolean merchantBuyDownFee;
|
||||
}
|
||||
|
||||
public static final class AdvancedPaymentData {
|
||||
|
||||
+13
-5
@@ -256,6 +256,7 @@ public class LoanProductData implements Serializable {
|
||||
private StringEnumOptionData buyDownFeeCalculationType;
|
||||
private StringEnumOptionData buyDownFeeStrategy;
|
||||
private StringEnumOptionData buyDownFeeIncomeType;
|
||||
private boolean merchantBuyDownFee;
|
||||
private List<StringEnumOptionData> buyDownFeeCalculationTypeOptions;
|
||||
private List<StringEnumOptionData> buyDownFeeStrategyOptions;
|
||||
private List<StringEnumOptionData> buyDownFeeIncomeTypeOptions;
|
||||
@@ -371,6 +372,7 @@ public class LoanProductData implements Serializable {
|
||||
final StringEnumOptionData buyDownFeeCalculationType = null;
|
||||
final StringEnumOptionData buyDownFeeStrategy = null;
|
||||
final StringEnumOptionData buyDownFeeIncomeType = null;
|
||||
final boolean merchantBuyDownFee = false;
|
||||
|
||||
return new LoanProductData(id, name, shortName, description, currency, principal, minPrincipal, maxPrincipal, tolerance,
|
||||
numberOfRepayments, minNumberOfRepayments, maxNumberOfRepayments, repaymentEvery, interestRatePerPeriod,
|
||||
@@ -394,7 +396,7 @@ public class LoanProductData implements Serializable {
|
||||
loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
|
||||
interestRecognitionOnDisbursementDate, daysInYearTypeCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, enableBuyDownFee,
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
|
||||
}
|
||||
|
||||
@@ -507,6 +509,7 @@ public class LoanProductData implements Serializable {
|
||||
final StringEnumOptionData buyDownFeeCalculationType = null;
|
||||
final StringEnumOptionData buyDownFeeStrategy = null;
|
||||
final StringEnumOptionData buyDownFeeIncomeType = null;
|
||||
final boolean merchantBuyDownFee = false;
|
||||
|
||||
return new LoanProductData(id, name, shortName, description, currency, principal, minPrincipal, maxPrincipal, tolerance,
|
||||
numberOfRepayments, minNumberOfRepayments, maxNumberOfRepayments, repaymentEvery, interestRatePerPeriod,
|
||||
@@ -530,7 +533,7 @@ public class LoanProductData implements Serializable {
|
||||
loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
|
||||
interestRecognitionOnDisbursementDate, daysInYearTypeCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, enableBuyDownFee,
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
|
||||
}
|
||||
|
||||
@@ -650,6 +653,7 @@ public class LoanProductData implements Serializable {
|
||||
final StringEnumOptionData buyDownFeeCalculationType = null;
|
||||
final StringEnumOptionData buyDownFeeStrategy = null;
|
||||
final StringEnumOptionData buyDownFeeIncomeType = null;
|
||||
final boolean merchantBuyDownFee = false;
|
||||
|
||||
return new LoanProductData(id, name, shortName, description, currency, principal, minPrincipal, maxPrincipal, tolerance,
|
||||
numberOfRepayments, minNumberOfRepayments, maxNumberOfRepayments, repaymentEvery, interestRatePerPeriod,
|
||||
@@ -673,7 +677,7 @@ public class LoanProductData implements Serializable {
|
||||
loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
|
||||
interestRecognitionOnDisbursementDate, daysInYearTypeCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, enableBuyDownFee,
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
|
||||
}
|
||||
|
||||
@@ -787,6 +791,7 @@ public class LoanProductData implements Serializable {
|
||||
final StringEnumOptionData buyDownFeeCalculationType = null;
|
||||
final StringEnumOptionData buyDownFeeStrategy = null;
|
||||
final StringEnumOptionData buyDownFeeIncomeType = null;
|
||||
final boolean merchantBuyDownFee = false;
|
||||
|
||||
return new LoanProductData(id, name, shortName, description, currency, principal, minPrincipal, maxPrincipal, tolerance,
|
||||
numberOfRepayments, minNumberOfRepayments, maxNumberOfRepayments, repaymentEvery, interestRatePerPeriod,
|
||||
@@ -810,7 +815,7 @@ public class LoanProductData implements Serializable {
|
||||
loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
|
||||
interestRecognitionOnDisbursementDate, daysInYearTypeCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, enableBuyDownFee,
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
}
|
||||
|
||||
public static LoanProductData withAccountingDetails(final LoanProductData productData, final Map<String, Object> accountingMappings,
|
||||
@@ -869,7 +874,7 @@ public class LoanProductData implements Serializable {
|
||||
final StringEnumOptionData capitalizedIncomeCalculationType, final StringEnumOptionData capitalizedIncomeStrategy,
|
||||
final StringEnumOptionData capitalizedIncomeType, final boolean enableBuyDownFee,
|
||||
final StringEnumOptionData buyDownFeeCalculationType, final StringEnumOptionData buyDownFeeStrategy,
|
||||
final StringEnumOptionData buyDownFeeIncomeType) {
|
||||
final StringEnumOptionData buyDownFeeIncomeType, final boolean merchantBuyDownFee) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.shortName = shortName;
|
||||
@@ -934,6 +939,7 @@ public class LoanProductData implements Serializable {
|
||||
this.buyDownFeeCalculationType = buyDownFeeCalculationType;
|
||||
this.buyDownFeeStrategy = buyDownFeeStrategy;
|
||||
this.buyDownFeeIncomeType = buyDownFeeIncomeType;
|
||||
this.merchantBuyDownFee = merchantBuyDownFee;
|
||||
|
||||
this.chargeOptions = null;
|
||||
this.penaltyOptions = null;
|
||||
@@ -1238,6 +1244,8 @@ public class LoanProductData implements Serializable {
|
||||
this.buyDownFeeCalculationTypeOptions = buyDownFeeCalculationTypeOptions;
|
||||
this.buyDownFeeStrategyOptions = buyDownFeeStrategyOptions;
|
||||
this.buyDownFeeIncomeTypeOptions = buyDownFeeIncomeTypeOptions;
|
||||
|
||||
this.merchantBuyDownFee = productData.isMerchantBuyDownFee();
|
||||
}
|
||||
|
||||
private Collection<ChargeData> nullIfEmpty(final Collection<ChargeData> charges) {
|
||||
|
||||
+4
-2
@@ -287,7 +287,8 @@ public class LoanProduct extends AbstractPersistableCustom<Long> {
|
||||
final LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType,
|
||||
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType,
|
||||
final boolean enableBuyDownFee, final LoanBuyDownFeeCalculationType buyDownFeeCalculationType,
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType) {
|
||||
final LoanBuyDownFeeStrategy buyDownFeeStrategy, final LoanBuyDownFeeIncomeType buyDownFeeIncomeType,
|
||||
final boolean merchantBuyDownFee) {
|
||||
this.fund = fund;
|
||||
this.transactionProcessingStrategyCode = transactionProcessingStrategyCode;
|
||||
|
||||
@@ -339,7 +340,8 @@ public class LoanProduct extends AbstractPersistableCustom<Long> {
|
||||
enableAutoRepaymentForDownPayment, loanScheduleType, loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting,
|
||||
supportedInterestRefundTypes, chargeOffBehaviour, isInterestRecognitionOnDisbursementDate, daysInYearCustomStrategy,
|
||||
enableIncomeCapitalization, capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType,
|
||||
installmentAmountInMultiplesOf, enableBuyDownFee, buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
installmentAmountInMultiplesOf, enableBuyDownFee, buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType,
|
||||
merchantBuyDownFee);
|
||||
|
||||
this.loanProductMinMaxConstraints = new LoanProductMinMaxConstraints(defaultMinPrincipal, defaultMaxPrincipal,
|
||||
defaultMinNominalInterestRatePerPeriod, defaultMaxNominalInterestRatePerPeriod, defaultMinNumberOfInstallments,
|
||||
|
||||
+7
-3
@@ -204,6 +204,9 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
@Column(name = "buy_down_fee_income_type")
|
||||
private LoanBuyDownFeeIncomeType buyDownFeeIncomeType;
|
||||
|
||||
@Column(name = "is_merchant_buy_down_fee")
|
||||
private boolean merchantBuyDownFee = true;
|
||||
|
||||
@Column(name = "installment_amount_in_multiples_of")
|
||||
private Integer installmentAmountInMultiplesOf;
|
||||
|
||||
@@ -226,7 +229,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType,
|
||||
final Integer installmentAmountInMultiplesOf, final boolean enableBuyDownFee,
|
||||
final LoanBuyDownFeeCalculationType buyDownFeeCalculationType, final LoanBuyDownFeeStrategy buyDownFeeStrategy,
|
||||
final LoanBuyDownFeeIncomeType buyDownFeeIncomeType) {
|
||||
final LoanBuyDownFeeIncomeType buyDownFeeIncomeType, final boolean merchantBuyDownFee) {
|
||||
|
||||
final MonetaryCurrency currency = MonetaryCurrency.fromCurrencyData(currencyData);
|
||||
return new LoanProductRelatedDetail(currency, principal, nominalInterestRatePerPeriod, interestRatePeriodFrequencyType,
|
||||
@@ -238,7 +241,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
loanScheduleType, loanScheduleProcessingType, fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes,
|
||||
chargeOffBehaviour, interestRecognitionOnDisbursementDate, daysInYearCustomStrategy, enableIncomeCapitalization,
|
||||
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType, installmentAmountInMultiplesOf,
|
||||
enableBuyDownFee, buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType);
|
||||
enableBuyDownFee, buyDownFeeCalculationType, buyDownFeeStrategy, buyDownFeeIncomeType, merchantBuyDownFee);
|
||||
}
|
||||
|
||||
protected LoanProductRelatedDetail() {
|
||||
@@ -264,7 +267,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType,
|
||||
final Integer installmentAmountInMultiplesOf, final boolean enableBuyDownFee,
|
||||
final LoanBuyDownFeeCalculationType buyDownFeeCalculationType, final LoanBuyDownFeeStrategy buyDownFeeStrategy,
|
||||
final LoanBuyDownFeeIncomeType buyDownFeeIncomeType) {
|
||||
final LoanBuyDownFeeIncomeType buyDownFeeIncomeType, final boolean merchantBuyDownFee) {
|
||||
this.currency = currency;
|
||||
this.principal = defaultPrincipal;
|
||||
this.nominalInterestRatePerPeriod = defaultNominalInterestRatePerPeriod;
|
||||
@@ -311,6 +314,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche
|
||||
this.buyDownFeeCalculationType = buyDownFeeCalculationType;
|
||||
this.buyDownFeeStrategy = buyDownFeeStrategy;
|
||||
this.buyDownFeeIncomeType = buyDownFeeIncomeType;
|
||||
this.merchantBuyDownFee = merchantBuyDownFee;
|
||||
}
|
||||
|
||||
private Integer defaultToNullIfZero(final Integer value) {
|
||||
|
||||
+1
@@ -53,4 +53,5 @@
|
||||
<include relativeToChangelogFile="true" file="parts/1028_remove_suboptimal_indexes.xml"/>
|
||||
<include relativeToChangelogFile="true" file="parts/1029_add_installment_amount_in_multiples_of_to_loan.xml"/>
|
||||
<include relativeToChangelogFile="true" file="parts/1030_add_loan_undo_contract_termination_event.xml"/>
|
||||
<include relativeToChangelogFile="true" file="parts/1031_loan_merchant_buy_down_fee.xml"/>
|
||||
</databaseChangeLog>
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
-->
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
|
||||
<changeSet author="fineract" id="1">
|
||||
<addColumn tableName="m_loan">
|
||||
<column name="is_merchant_buy_down_fee" type="boolean" defaultValueBoolean="true">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
</addColumn>
|
||||
<addColumn tableName="m_product_loan">
|
||||
<column name="is_merchant_buy_down_fee" type="boolean" defaultValueBoolean="true">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
</addColumn>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
Reference in New Issue
Block a user