From a77ece75f80c793a3db6f2e038a17f5c000fa991 Mon Sep 17 00:00:00 2001 From: taskain7 Date: Tue, 23 Jan 2024 12:33:37 +0100 Subject: [PATCH] FINERACT-1971: remove disableScheduleExtensionForDownPayment --- .../domain/LoanApplicationTerms.java | 22 ++++---- .../loanproduct/LoanProductConstants.java | 1 - .../loanproduct/domain/LoanProduct.java | 21 ++------ .../domain/LoanProductRelatedDetail.java | 22 ++------ .../module/loan/module-changelog-master.xml | 1 + ...move_disable_schedule_extension_column.xml | 39 ++++++++++++++ .../api/LoansApiResourceSwagger.java | 2 - .../loanaccount/data/LoanAccountData.java | 7 +-- .../service/LoanScheduleAssembler.java | 5 +- .../service/LoanReadPlatformServiceImpl.java | 7 ++- .../api/LoanProductsApiResource.java | 4 +- .../api/LoanProductsApiResourceSwagger.java | 6 --- .../loanproduct/data/LoanProductData.java | 23 +++----- .../LoanProductDataValidator.java | 41 +------------- .../LoanProductReadPlatformServiceImpl.java | 7 ++- .../DefaultScheduledDateGeneratorTest.java | 2 +- ...oductWithDownPaymentConfigurationTest.java | 54 ++----------------- .../common/loans/LoanProductTestBuilder.java | 9 ---- 18 files changed, 82 insertions(+), 191 deletions(-) create mode 100644 fineract-loan/src/main/resources/db/changelog/tenant/module/loan/parts/1015_remove_disable_schedule_extension_column.xml diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java index 19bee527a..f908d0df4 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java @@ -248,8 +248,8 @@ public final class LoanApplicationTerms { final BigDecimal fixedPrincipalPercentagePerInstallment, final boolean isPrincipalCompoundingDisabledForOverdueLoans, final Boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, final Boolean isAutoRepaymentForDownPaymentEnabled, final RepaymentStartDateType repaymentStartDateType, - final LocalDate submittedOnDate, final Boolean isScheduleExtensionForDownPaymentDisabled, - final LoanScheduleType loanScheduleType, final LoanScheduleProcessingType loanScheduleProcessingType) { + final LocalDate submittedOnDate, final LoanScheduleType loanScheduleType, + final LoanScheduleProcessingType loanScheduleProcessingType) { final LoanRescheduleStrategyMethod rescheduleStrategyMethod = null; final CalendarHistoryDataWrapper calendarHistoryDataWrapper = null; @@ -267,8 +267,8 @@ public final class LoanApplicationTerms { isSkipRepaymentOnFirstDayOfMonth, holidayDetailDTO, allowCompoundingOnEod, isEqualAmortization, false, isInterestToBeRecoveredFirstWhenGreaterThanEMI, fixedPrincipalPercentagePerInstallment, isPrincipalCompoundingDisabledForOverdueLoans, enableDownPayment, disbursedAmountPercentageForDownPayment, - isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, isScheduleExtensionForDownPaymentDisabled, - loanScheduleType, loanScheduleProcessingType); + isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, loanScheduleType, + loanScheduleProcessingType); } @@ -318,11 +318,9 @@ public final class LoanApplicationTerms { final boolean isDownPaymentEnabled = loanProductRelatedDetail.isEnableDownPayment(); BigDecimal disbursedAmountPercentageForDownPayment = null; boolean isAutoRepaymentForDownPaymentEnabled = false; - boolean isScheduleExtensionForDownPaymentDisabled = false; if (isDownPaymentEnabled) { disbursedAmountPercentageForDownPayment = loanProductRelatedDetail.getDisbursedAmountPercentageForDownPayment(); isAutoRepaymentForDownPaymentEnabled = loanProductRelatedDetail.isEnableAutoRepaymentForDownPayment(); - isScheduleExtensionForDownPaymentDisabled = loanProductRelatedDetail.isDisableScheduleExtensionForDownPayment(); } LoanScheduleType loanScheduleType = loanProductRelatedDetail.getLoanScheduleType(); LoanScheduleProcessingType loanScheduleProcessingType = loanProductRelatedDetail.getLoanScheduleProcessingType(); @@ -341,8 +339,8 @@ public final class LoanApplicationTerms { allowCompoundingOnEod, isEqualAmortization, isFirstRepaymentDateAllowedOnHoliday, isInterestToBeRecoveredFirstWhenGreaterThanEMI, fixedPrincipalPercentagePerInstallment, isPrincipalCompoundingDisabledForOverdueLoans, isDownPaymentEnabled, disbursedAmountPercentageForDownPayment, - isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, isScheduleExtensionForDownPaymentDisabled, - loanScheduleType, loanScheduleProcessingType); + isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, loanScheduleType, + loanScheduleProcessingType); } private LoanApplicationTerms(final ApplicationCurrency currency, final Integer loanTermFrequency, @@ -370,8 +368,7 @@ public final class LoanApplicationTerms { final boolean isInterestToBeRecoveredFirstWhenGreaterThanEMI, final BigDecimal fixedPrincipalPercentagePerInstallment, final boolean isPrincipalCompoundingDisabledForOverdueLoans, final boolean isDownPaymentEnabled, final BigDecimal disbursedAmountPercentageForDownPayment, final boolean isAutoRepaymentForDownPaymentEnabled, - final RepaymentStartDateType repaymentStartDateType, final LocalDate submittedOnDate, - final boolean isScheduleExtensionForDownPaymentDisabled, final LoanScheduleType loanScheduleType, + final RepaymentStartDateType repaymentStartDateType, final LocalDate submittedOnDate, final LoanScheduleType loanScheduleType, final LoanScheduleProcessingType loanScheduleProcessingType) { this.currency = currency; @@ -464,7 +461,6 @@ public final class LoanApplicationTerms { this.isAutoRepaymentForDownPaymentEnabled = isAutoRepaymentForDownPaymentEnabled; this.repaymentStartDateType = repaymentStartDateType; this.submittedOnDate = submittedOnDate; - this.isScheduleExtensionForDownPaymentDisabled = isScheduleExtensionForDownPaymentDisabled; this.loanScheduleType = loanScheduleType; this.loanScheduleProcessingType = loanScheduleProcessingType; } @@ -1329,8 +1325,8 @@ public final class LoanApplicationTerms { this.interestPaymentGrace, this.interestChargingGrace, this.amortizationMethod, this.inArrearsTolerance.getAmount(), this.graceOnArrearsAgeing, this.daysInMonthType.getValue(), this.daysInYearType.getValue(), this.interestRecalculationEnabled, this.isEqualAmortization, this.isDownPaymentEnabled, - this.disbursedAmountPercentageForDownPayment, this.isAutoRepaymentForDownPaymentEnabled, - this.isScheduleExtensionForDownPaymentDisabled, this.loanScheduleType, this.loanScheduleProcessingType); + this.disbursedAmountPercentageForDownPayment, this.isAutoRepaymentForDownPaymentEnabled, this.loanScheduleType, + this.loanScheduleProcessingType); } public Integer getLoanTermFrequency() { diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/LoanProductConstants.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/LoanProductConstants.java index 9cfbd2512..532bd5efa 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/LoanProductConstants.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/LoanProductConstants.java @@ -152,7 +152,6 @@ public interface LoanProductConstants { String DISBURSED_AMOUNT_PERCENTAGE_DOWN_PAYMENT = "disbursedAmountPercentageForDownPayment"; String ENABLE_AUTO_REPAYMENT_DOWN_PAYMENT = "enableAutoRepaymentForDownPayment"; String REPAYMENT_START_DATE_TYPE = "repaymentStartDateType"; - String DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT = "disableScheduleExtensionForDownPayment"; String ENABLE_INSTALLMENT_LEVEL_DELINQUENCY = "enableInstallmentLevelDelinquency"; diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java index 4ef28165c..ad7864172 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java @@ -422,9 +422,6 @@ public class LoanProduct extends AbstractPersistableCustom { final RepaymentStartDateType repaymentStartDateType = RepaymentStartDateType .fromInt(command.integerValueOfParameterNamed(LoanProductConstants.REPAYMENT_START_DATE_TYPE)); - final boolean disableScheduleExtensionForDownPayment = command - .booleanPrimitiveValueOfParameterNamed(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT); - final boolean enableInstallmentLevelDelinquency = command .booleanPrimitiveValueOfParameterNamed(LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY); @@ -445,8 +442,8 @@ public class LoanProduct extends AbstractPersistableCustom { syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, productRates, fixedPrincipalPercentagePerInstallment, disallowExpectedDisbursements, allowApprovedDisbursedAmountsOverApplied, overAppliedCalculationType, overAppliedNumber, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageDownPayment, - enableAutoRepaymentForDownPayment, repaymentStartDateType, disableScheduleExtensionForDownPayment, - enableInstallmentLevelDelinquency, loanScheduleType, loanScheduleProcessingType); + enableAutoRepaymentForDownPayment, repaymentStartDateType, enableInstallmentLevelDelinquency, loanScheduleType, + loanScheduleProcessingType); } @@ -661,8 +658,8 @@ public class LoanProduct extends AbstractPersistableCustom { final Integer overAppliedNumber, final Integer dueDaysForRepaymentEvent, final Integer overDueDaysForRepaymentEvent, final boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, final boolean enableAutoRepaymentForDownPayment, final RepaymentStartDateType repaymentStartDateType, - final boolean disableScheduleExtensionForDownPayment, final boolean enableInstallmentLevelDelinquency, - final LoanScheduleType loanScheduleType, final LoanScheduleProcessingType loanScheduleProcessingType) { + final boolean enableInstallmentLevelDelinquency, final LoanScheduleType loanScheduleType, + final LoanScheduleProcessingType loanScheduleProcessingType) { this.fund = fund; this.transactionProcessingStrategyCode = transactionProcessingStrategyCode; @@ -704,7 +701,7 @@ public class LoanProduct extends AbstractPersistableCustom { recurringMoratoriumOnPrincipalPeriods, graceOnInterestPayment, graceOnInterestCharged, amortizationMethod, inArrearsTolerance, graceOnArrearsAgeing, daysInMonthType.getValue(), daysInYearType.getValue(), isInterestRecalculationEnabled, isEqualAmortization, enableDownPayment, disbursedAmountPercentageForDownPayment, - enableAutoRepaymentForDownPayment, disableScheduleExtensionForDownPayment, loanScheduleType, loanScheduleProcessingType); + enableAutoRepaymentForDownPayment, loanScheduleType, loanScheduleProcessingType); this.loanProductRelatedDetail.validateRepaymentPeriodWithGraceSettings(); @@ -1328,14 +1325,6 @@ public class LoanProduct extends AbstractPersistableCustom { this.repaymentStartDateType = RepaymentStartDateType.fromInt(newValue); } - if (command.isChangeInBooleanParameterNamed(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, - this.loanProductRelatedDetail.isDisableScheduleExtensionForDownPayment())) { - final boolean newValue = command - .booleanPrimitiveValueOfParameterNamed(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT); - actualChanges.put(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, newValue); - this.loanProductRelatedDetail.updateDisableScheduleExtensionForDownPayment(newValue); - } - if (command.isChangeInBooleanParameterNamed(LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY, this.isEnableInstallmentLevelDelinquency())) { final boolean newValue = command diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductRelatedDetail.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductRelatedDetail.java index 793241fd1..f956cf963 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductRelatedDetail.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductRelatedDetail.java @@ -140,9 +140,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche @Column(name = "enable_auto_repayment_for_down_payment", nullable = false) private boolean enableAutoRepaymentForDownPayment; - @Column(name = "disable_schedule_extension_for_down_payment", nullable = false) - private boolean disableScheduleExtensionForDownPayment; - @Column(name = "loan_schedule_type", nullable = false) @Enumerated(EnumType.STRING) private LoanScheduleType loanScheduleType; @@ -161,8 +158,8 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche final BigDecimal inArrearsTolerance, final Integer graceOnArrearsAgeing, final Integer daysInMonthType, final Integer daysInYearType, final boolean isInterestRecalculationEnabled, final boolean isEqualAmortization, final boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, - final boolean enableAutoRepaymentForDownPayment, final boolean disableScheduleExtensionForDownPayment, - final LoanScheduleType loanScheduleType, final LoanScheduleProcessingType loanScheduleProcessingType) { + final boolean enableAutoRepaymentForDownPayment, final LoanScheduleType loanScheduleType, + final LoanScheduleProcessingType loanScheduleProcessingType) { return new LoanProductRelatedDetail(currency, principal, nominalInterestRatePerPeriod, interestRatePeriodFrequencyType, nominalAnnualInterestRate, interestMethod, interestCalculationPeriodMethod, allowPartialPeriodInterestCalcualtion, @@ -170,7 +167,7 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche recurringMoratoriumOnPrincipalPeriods, graceOnInterestPayment, graceOnInterestCharged, amortizationMethod, inArrearsTolerance, graceOnArrearsAgeing, daysInMonthType, daysInYearType, isInterestRecalculationEnabled, isEqualAmortization, enableDownPayment, disbursedAmountPercentageForDownPayment, enableAutoRepaymentForDownPayment, - disableScheduleExtensionForDownPayment, loanScheduleType, loanScheduleProcessingType); + loanScheduleType, loanScheduleProcessingType); } protected LoanProductRelatedDetail() { @@ -187,8 +184,8 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche final BigDecimal inArrearsTolerance, final Integer graceOnArrearsAgeing, final Integer daysInMonthType, final Integer daysInYearType, final boolean isInterestRecalculationEnabled, final boolean isEqualAmortization, final boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, - final boolean enableAutoRepaymentForDownPayment, final boolean disableScheduleExtensionForDownPayment, - final LoanScheduleType loanScheduleType, final LoanScheduleProcessingType loanScheduleProcessingType) { + final boolean enableAutoRepaymentForDownPayment, final LoanScheduleType loanScheduleType, + final LoanScheduleProcessingType loanScheduleProcessingType) { this.currency = currency; this.principal = defaultPrincipal; this.nominalInterestRatePerPeriod = defaultNominalInterestRatePerPeriod; @@ -218,7 +215,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche this.enableDownPayment = enableDownPayment; this.disbursedAmountPercentageForDownPayment = disbursedAmountPercentageForDownPayment; this.enableAutoRepaymentForDownPayment = enableAutoRepaymentForDownPayment; - this.disableScheduleExtensionForDownPayment = disableScheduleExtensionForDownPayment; this.loanScheduleType = loanScheduleType; this.loanScheduleProcessingType = loanScheduleProcessingType; } @@ -750,14 +746,6 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche this.enableAutoRepaymentForDownPayment = enableAutoRepaymentForDownPayment; } - public boolean isDisableScheduleExtensionForDownPayment() { - return disableScheduleExtensionForDownPayment; - } - - public void updateDisableScheduleExtensionForDownPayment(boolean disableScheduleExtensionForDownPayment) { - this.disableScheduleExtensionForDownPayment = disableScheduleExtensionForDownPayment; - } - public LoanScheduleType getLoanScheduleType() { return loanScheduleType; } diff --git a/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/module-changelog-master.xml b/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/module-changelog-master.xml index 4d5fb3f2b..22bc477ab 100644 --- a/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/module-changelog-master.xml +++ b/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/module-changelog-master.xml @@ -37,4 +37,5 @@ + diff --git a/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/parts/1015_remove_disable_schedule_extension_column.xml b/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/parts/1015_remove_disable_schedule_extension_column.xml new file mode 100644 index 000000000..9c83355a5 --- /dev/null +++ b/fineract-loan/src/main/resources/db/changelog/tenant/module/loan/parts/1015_remove_disable_schedule_extension_column.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResourceSwagger.java index 4e20c9180..d93575ab6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResourceSwagger.java @@ -1126,8 +1126,6 @@ final class LoansApiResourceSwagger { public BigDecimal disbursedAmountPercentageForDownPayment; @Schema(example = "false") public Boolean enableAutoRepaymentForDownPayment; - @Schema(example = "false") - public Boolean disableScheduleExtensionForDownPayment; @Schema(example = "CUMULATIVE") public EnumOptionData loanScheduleType; @Schema(example = "HORIZONTAL") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java index acff5c52b..3e315a2ac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanAccountData.java @@ -262,7 +262,6 @@ public class LoanAccountData { private Boolean enableDownPayment; private BigDecimal disbursedAmountPercentageForDownPayment; private Boolean enableAutoRepaymentForDownPayment; - private Boolean disableScheduleExtensionForDownPayment; private EnumOptionData loanScheduleType; private EnumOptionData loanScheduleProcessingType; @@ -680,8 +679,8 @@ public class LoanAccountData { final DelinquencyRangeData delinquencyRange, final boolean disallowExpectedDisbursements, final boolean fraud, LocalDate lastClosedBusinessDate, LocalDate overpaidOnDate, final boolean chargedOff, final boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, final boolean enableAutoRepaymentForDownPayment, - final boolean disableScheduleExtensionForDownPayment, final boolean enableInstallmentLevelDelinquency, - final EnumOptionData loanScheduleType, final EnumOptionData loanScheduleProcessingType) { + final boolean enableInstallmentLevelDelinquency, final EnumOptionData loanScheduleType, + final EnumOptionData loanScheduleProcessingType) { final CollectionData delinquent = CollectionData.template(); @@ -724,7 +723,6 @@ public class LoanAccountData { .setLastClosedBusinessDate(lastClosedBusinessDate).setOverpaidOnDate(overpaidOnDate).setChargedOff(chargedOff) .setEnableDownPayment(enableDownPayment).setDisbursedAmountPercentageForDownPayment(disbursedAmountPercentageForDownPayment) .setEnableAutoRepaymentForDownPayment(enableAutoRepaymentForDownPayment) - .setDisableScheduleExtensionForDownPayment(disableScheduleExtensionForDownPayment) .setEnableInstallmentLevelDelinquency(enableInstallmentLevelDelinquency).setLoanScheduleType(loanScheduleType) .setLoanScheduleProcessingType(loanScheduleProcessingType); } @@ -815,7 +813,6 @@ public class LoanAccountData { .setChargedOff(acc.chargedOff).setEnableDownPayment(acc.enableDownPayment) .setDisbursedAmountPercentageForDownPayment(acc.disbursedAmountPercentageForDownPayment) .setEnableAutoRepaymentForDownPayment(acc.enableAutoRepaymentForDownPayment) - .setDisableScheduleExtensionForDownPayment(acc.disableScheduleExtensionForDownPayment) .setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType) .setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(loanScheduleTypeOptions) .setLoanScheduleProcessingTypeOptions(loanScheduleProcessingTypeOptions); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index 36764969e..b99e1bd31 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -459,13 +459,10 @@ public class LoanScheduleAssembler { final boolean isDownPaymentEnabled = loanProduct.getLoanProductRelatedDetail().isEnableDownPayment(); BigDecimal disbursedAmountPercentageForDownPayment = null; boolean isAutoRepaymentForDownPaymentEnabled = false; - boolean isScheduleExtensionForDownPaymentDisabled = false; if (isDownPaymentEnabled) { disbursedAmountPercentageForDownPayment = loanProduct.getLoanProductRelatedDetail() .getDisbursedAmountPercentageForDownPayment(); isAutoRepaymentForDownPaymentEnabled = loanProduct.getLoanProductRelatedDetail().isEnableAutoRepaymentForDownPayment(); - isScheduleExtensionForDownPaymentDisabled = loanProduct.getLoanProductRelatedDetail() - .isDisableScheduleExtensionForDownPayment(); } @@ -493,7 +490,7 @@ public class LoanScheduleAssembler { allowCompoundingOnEod, isEqualAmortization, isInterestToBeRecoveredFirstWhenGreaterThanEMI, fixedPrincipalPercentagePerInstallment, isPrincipalCompoundingDisabledForOverdueLoans, isDownPaymentEnabled, disbursedAmountPercentageForDownPayment, isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, - isScheduleExtensionForDownPaymentDisabled, loanScheduleType, loanScheduleProcessingType); + loanScheduleType, loanScheduleProcessingType); } private CalendarInstance createCalendarForSameAsRepayment(final Integer repaymentEvery, diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index ac88157cb..c804805a7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -694,7 +694,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa + " lp.can_use_for_topup as canUseForTopup, l.is_topup as isTopup, topup.closure_loan_id as closureLoanId, " + " l.total_recovered_derived as totalRecovered, topuploan.account_no as closureLoanAccountNo, " + " topup.topup_amount as topupAmount, l.last_closed_business_date as lastClosedBusinessDate,l.overpaidon_date as overpaidOnDate, " - + " l.is_charged_off as isChargedOff, l.charge_off_reason_cv_id as chargeOffReasonId, codec.code_value as chargeOffReason, l.charged_off_on_date as chargedOffOnDate, l.enable_down_payment as enableDownPayment, l.disbursed_amount_percentage_for_down_payment as disbursedAmountPercentageForDownPayment, l.enable_auto_repayment_for_down_payment as enableAutoRepaymentForDownPayment, l.disable_schedule_extension_for_down_payment as disableScheduleExtensionForDownPayment," + + " l.is_charged_off as isChargedOff, l.charge_off_reason_cv_id as chargeOffReasonId, codec.code_value as chargeOffReason, l.charged_off_on_date as chargedOffOnDate, l.enable_down_payment as enableDownPayment, l.disbursed_amount_percentage_for_down_payment as disbursedAmountPercentageForDownPayment, l.enable_auto_repayment_for_down_payment as enableAutoRepaymentForDownPayment," + " cobu.username as chargedOffByUsername, cobu.firstname as chargedOffByFirstname, cobu.lastname as chargedOffByLastname, l.loan_schedule_type as loanScheduleType, l.loan_schedule_processing_type as loanScheduleProcessingType " + " from m_loan l" // + " join m_product_loan lp on lp.id = l.product_id" // @@ -1041,7 +1041,6 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa final boolean enableDownPayment = rs.getBoolean("enableDownPayment"); final BigDecimal disbursedAmountPercentageForDownPayment = rs.getBigDecimal("disbursedAmountPercentageForDownPayment"); final boolean enableAutoRepaymentForDownPayment = rs.getBoolean("enableAutoRepaymentForDownPayment"); - final boolean disableScheduleExtensionForDownPayment = rs.getBoolean("disableScheduleExtensionForDownPayment"); final boolean enableInstallmentLevelDelinquency = rs.getBoolean("enableInstallmentLevelDelinquency"); final String loanScheduleTypeStr = rs.getString("loanScheduleType"); final LoanScheduleType loanScheduleType = LoanScheduleType.valueOf(loanScheduleTypeStr); @@ -1064,8 +1063,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa canUseForTopup, isTopup, closureLoanId, closureLoanAccountNo, topupAmount, isEqualAmortization, fixedPrincipalPercentagePerInstallment, delinquencyRange, disallowExpectedDisbursements, isFraud, lastClosedBusinessDate, overpaidOnDate, isChargedOff, enableDownPayment, disbursedAmountPercentageForDownPayment, - enableAutoRepaymentForDownPayment, disableScheduleExtensionForDownPayment, enableInstallmentLevelDelinquency, - loanScheduleType.asEnumOptionData(), loanScheduleProcessingType.asEnumOptionData()); + enableAutoRepaymentForDownPayment, enableInstallmentLevelDelinquency, loanScheduleType.asEnumOptionData(), + loanScheduleProcessingType.asEnumOptionData()); } } 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 e8fada65a..c87528c17 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 @@ -118,7 +118,7 @@ public class LoanProductsApiResource { LoanApiConstants.fixedPrincipalPercentagePerInstallmentParamName, LoanProductConstants.DUE_DAYS_FOR_REPAYMENT_EVENT, LoanProductConstants.OVER_DUE_DAYS_FOR_REPAYMENT_EVENT, LoanProductConstants.ENABLE_DOWN_PAYMENT, LoanProductConstants.DISBURSED_AMOUNT_PERCENTAGE_DOWN_PAYMENT, LoanProductConstants.ENABLE_AUTO_REPAYMENT_DOWN_PAYMENT, - LoanProductConstants.REPAYMENT_START_DATE_TYPE, LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT)); + LoanProductConstants.REPAYMENT_START_DATE_TYPE)); private static final Set PRODUCT_MIX_DATA_PARAMETERS = new HashSet<>( Arrays.asList("productId", "productName", "restrictedProducts", "allowedProducts", "productOptions")); @@ -153,7 +153,7 @@ public class LoanProductsApiResource { @Operation(summary = "Create a Loan Product", description = "Depending of the Accounting Rule (accountingRule) selected, additional fields with details of the appropriate Ledger Account identifiers would need to be passed in.\n" + "\n" + "Refer MifosX Accounting Specs Draft for more details regarding the significance of the selected accounting rule\n\n" + "Mandatory Fields: name, shortName, currencyCode, digitsAfterDecimal, inMultiplesOf, principal, numberOfRepayments, repaymentEvery, repaymentFrequencyType, interestRatePerPeriod, interestRateFrequencyType, amortizationType, interestType, interestCalculationPeriodType, transactionProcessingStrategyCode, accountingRule, isInterestRecalculationEnabled, daysInYearType, daysInMonthType\n\n" - + "Optional Fields: inArrearsTolerance, graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, graceOnArrearsAgeing, charges, paymentChannelToFundSourceMappings, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, includeInBorrowerCycle, useBorrowerCycle,principalVariationsForBorrowerCycle, numberOfRepaymentVariationsForBorrowerCycle, interestRateVariationsForBorrowerCycle, multiDisburseLoan,maxTrancheCount, outstandingLoanBalance,overdueDaysForNPA,holdGuaranteeFunds, principalThresholdForLastInstalment, accountMovesOutOfNPAOnlyOnArrearsCompletion, canDefineInstallmentAmount, installmentAmountInMultiplesOf, allowAttributeOverrides, allowPartialPeriodInterestCalcualtion,dueDaysForRepaymentEvent,overDueDaysForRepaymentEvent,enableDownPayment,disbursedAmountPercentageDownPayment,enableAutoRepaymentForDownPayment,repaymentStartDateType,disableScheduleExtensionForDownPayment\n\n" + + "Optional Fields: inArrearsTolerance, graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, graceOnArrearsAgeing, charges, paymentChannelToFundSourceMappings, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, includeInBorrowerCycle, useBorrowerCycle,principalVariationsForBorrowerCycle, numberOfRepaymentVariationsForBorrowerCycle, interestRateVariationsForBorrowerCycle, multiDisburseLoan,maxTrancheCount, outstandingLoanBalance,overdueDaysForNPA,holdGuaranteeFunds, principalThresholdForLastInstalment, accountMovesOutOfNPAOnlyOnArrearsCompletion, canDefineInstallmentAmount, installmentAmountInMultiplesOf, allowAttributeOverrides, allowPartialPeriodInterestCalcualtion,dueDaysForRepaymentEvent,overDueDaysForRepaymentEvent,enableDownPayment,disbursedAmountPercentageDownPayment,enableAutoRepaymentForDownPayment,repaymentStartDateType\n\n" + "Additional Mandatory Fields for Cash(2) based accounting: fundSourceAccountId, loanPortfolioAccountId, interestOnLoanAccountId, incomeFromFeeAccountId, incomeFromPenaltyAccountId, writeOffAccountId, transfersInSuspenseAccountId, overpaymentLiabilityAccountId\n\n" + "Additional Mandatory Fields for periodic (3) and upfront (4)accrual accounting: fundSourceAccountId, loanPortfolioAccountId, interestOnLoanAccountId, incomeFromFeeAccountId, incomeFromPenaltyAccountId, writeOffAccountId, receivableInterestAccountId, receivableFeeAccountId, receivablePenaltyAccountId, transfersInSuspenseAccountId, overpaymentLiabilityAccountId\n\n" + "Additional Mandatory Fields if interest recalculation is enabled(true): interestRecalculationCompoundingMethod, rescheduleStrategyMethod, recalculationRestFrequencyType\n\n" diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java index 5002f7e22..7804fc93d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java @@ -166,8 +166,6 @@ final class LoanProductsApiResourceSwagger { public Boolean enableAutoRepaymentForDownPayment; @Schema(example = "1") public Integer repaymentStartDateType; - @Schema(example = "false") - public Boolean disableScheduleExtensionForDownPayment; // Interest Recalculation @Schema(example = "false") @@ -1262,8 +1260,6 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "false") public Boolean enableAutoRepaymentForDownPayment; public GetLoanProductsRepaymentStartDateType repaymentStartDateType; - @Schema(example = "false") - public Boolean disableScheduleExtensionForDownPayment; @Schema(example = "CUMULATIVE") public EnumOptionData loanScheduleType; @Schema(example = "HORIZONTAL") @@ -1400,8 +1396,6 @@ final class LoanProductsApiResourceSwagger { public Boolean enableAutoRepaymentForDownPayment; @Schema(example = "1") public Integer repaymentStartDateType; - @Schema(example = "false") - public Boolean disableScheduleExtensionForDownPayment; // Interest Recalculation @Schema(example = "false") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java index 4b644380c..c721add00 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java @@ -210,7 +210,6 @@ public class LoanProductData implements Serializable { private final boolean enableDownPayment; private final BigDecimal disbursedAmountPercentageForDownPayment; private final boolean enableAutoRepaymentForDownPayment; - private final boolean disableScheduleExtensionForDownPayment; private final boolean enableInstallmentLevelDelinquency; private final EnumOptionData loanScheduleType; @@ -309,7 +308,6 @@ public class LoanProductData implements Serializable { final Collection paymentAllocation = null; final boolean enableAutoRepaymentForDownPayment = false; final EnumOptionData repaymentStartDateType = null; - final boolean disableScheduleExtensionForDownPayment = false; final boolean enableInstallmentLevelDelinquency = false; final EnumOptionData loanScheduleType = null; final EnumOptionData loanScheduleProcessingType = null; @@ -334,8 +332,7 @@ public class LoanProductData implements Serializable { syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, rateOptions, rates, isRatesEnabled, fixedPrincipalPercentagePerInstallment, delinquencyBucketOptions, delinquencyBucket, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageDownPayment, enableAutoRepaymentForDownPayment, - paymentAllocation, repaymentStartDateType, disableScheduleExtensionForDownPayment, enableInstallmentLevelDelinquency, - loanScheduleType, loanScheduleProcessingType); + paymentAllocation, repaymentStartDateType, enableInstallmentLevelDelinquency, loanScheduleType, loanScheduleProcessingType); } @@ -430,7 +427,6 @@ public class LoanProductData implements Serializable { final boolean enableAutoRepaymentForDownPayment = false; final Collection paymentAllocation = null; final EnumOptionData repaymentStartDateType = null; - final boolean disableScheduleExtensionForDownPayment = false; final boolean enableInstallmentLevelDelinquency = false; final EnumOptionData loanScheduleType = null; final EnumOptionData loanScheduleProcessingType = null; @@ -453,8 +449,7 @@ public class LoanProductData implements Serializable { syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, rateOptions, rates, isRatesEnabled, fixedPrincipalPercentagePerInstallment, delinquencyBucketOptions, delinquencyBucket, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageDownPayment, enableAutoRepaymentForDownPayment, - paymentAllocation, repaymentStartDateType, disableScheduleExtensionForDownPayment, enableInstallmentLevelDelinquency, - loanScheduleType, loanScheduleProcessingType); + paymentAllocation, repaymentStartDateType, enableInstallmentLevelDelinquency, loanScheduleType, loanScheduleProcessingType); } @@ -556,7 +551,6 @@ public class LoanProductData implements Serializable { final boolean enableAutoRepaymentForDownPayment = false; final Collection paymentAllocation = null; final EnumOptionData repaymentStartDateType = LoanEnumerations.repaymentStartDateType(RepaymentStartDateType.DISBURSEMENT_DATE); - final boolean disableScheduleExtensionForDownPayment = false; final boolean enableInstallmentLevelDelinquency = false; final EnumOptionData loanScheduleType = LoanScheduleType.CUMULATIVE.asEnumOptionData(); final EnumOptionData loanScheduleProcessingType = LoanScheduleProcessingType.HORIZONTAL.asEnumOptionData(); @@ -579,8 +573,7 @@ public class LoanProductData implements Serializable { syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, rateOptions, rates, isRatesEnabled, fixedPrincipalPercentagePerInstallment, delinquencyBucketOptions, delinquencyBucket, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageDownPayment, enableAutoRepaymentForDownPayment, - paymentAllocation, repaymentStartDateType, disableScheduleExtensionForDownPayment, enableInstallmentLevelDelinquency, - loanScheduleType, loanScheduleProcessingType); + paymentAllocation, repaymentStartDateType, enableInstallmentLevelDelinquency, loanScheduleType, loanScheduleProcessingType); } @@ -676,7 +669,6 @@ public class LoanProductData implements Serializable { final boolean enableAutoRepaymentForDownPayment = false; final Collection paymentAllocation = null; final EnumOptionData repaymentStartDateType = LoanEnumerations.repaymentStartDateType(RepaymentStartDateType.DISBURSEMENT_DATE); - final boolean disableScheduleExtensionForDownPayment = false; final boolean enableInstallmentLevelDelinquency = false; final EnumOptionData loanScheduleType = null; final EnumOptionData loanScheduleProcessingType = null; @@ -699,8 +691,7 @@ public class LoanProductData implements Serializable { syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, rateOptions, rates, isRatesEnabled, fixedPrincipalPercentagePerInstallment, delinquencyBucketOptions, delinquencyBucket, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageDownPayment, enableAutoRepaymentForDownPayment, - paymentAllocation, repaymentStartDateType, disableScheduleExtensionForDownPayment, enableInstallmentLevelDelinquency, - loanScheduleType, loanScheduleProcessingType); + paymentAllocation, repaymentStartDateType, enableInstallmentLevelDelinquency, loanScheduleType, loanScheduleProcessingType); } public static LoanProductData withAccountingDetails(final LoanProductData productData, final Map accountingMappings, @@ -749,8 +740,8 @@ public class LoanProductData implements Serializable { final Integer overDueDaysForRepaymentEvent, final boolean enableDownPayment, final BigDecimal disbursedAmountPercentageForDownPayment, final boolean enableAutoRepaymentForDownPayment, final Collection paymentAllocation, final EnumOptionData repaymentStartDateType, - final boolean disableScheduleExtensionForDownPayment, final boolean enableInstallmentLevelDelinquency, - final EnumOptionData loanScheduleType, final EnumOptionData loanScheduleProcessingType) { + final boolean enableInstallmentLevelDelinquency, final EnumOptionData loanScheduleType, + final EnumOptionData loanScheduleProcessingType) { this.id = id; this.name = name; this.shortName = shortName; @@ -877,7 +868,6 @@ public class LoanProductData implements Serializable { this.advancedPaymentAllocationTransactionTypes = PaymentAllocationTransactionType.getValuesAsEnumOptionDataList(); this.advancedPaymentAllocationFutureInstallmentAllocationRules = FutureInstallmentAllocationRule.getValuesAsEnumOptionDataList(); this.advancedPaymentAllocationTypes = PaymentAllocationType.getValuesAsEnumOptionDataList(); - this.disableScheduleExtensionForDownPayment = disableScheduleExtensionForDownPayment; this.enableInstallmentLevelDelinquency = enableInstallmentLevelDelinquency; this.loanScheduleType = loanScheduleType; this.loanScheduleProcessingType = loanScheduleProcessingType; @@ -1047,7 +1037,6 @@ public class LoanProductData implements Serializable { this.advancedPaymentAllocationTransactionTypes = advancedPaymentAllocationTransactionTypes; this.advancedPaymentAllocationFutureInstallmentAllocationRules = advancedPaymentAllocationFutureInstallmentAllocationRules; this.advancedPaymentAllocationTypes = advancedPaymentAllocationTypes; - this.disableScheduleExtensionForDownPayment = productData.disableScheduleExtensionForDownPayment; this.enableInstallmentLevelDelinquency = productData.enableInstallmentLevelDelinquency; this.loanScheduleType = productData.getLoanScheduleType(); this.loanScheduleProcessingType = productData.getLoanScheduleProcessingType(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java index ced5da046..5870ec09f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java @@ -170,8 +170,8 @@ public final class LoanProductDataValidator { LoanProductConstants.DUE_DAYS_FOR_REPAYMENT_EVENT, LoanProductConstants.OVER_DUE_DAYS_FOR_REPAYMENT_EVENT, LoanProductConstants.ENABLE_DOWN_PAYMENT, LoanProductConstants.DISBURSED_AMOUNT_PERCENTAGE_DOWN_PAYMENT, LoanProductConstants.ENABLE_AUTO_REPAYMENT_DOWN_PAYMENT, LoanProductConstants.REPAYMENT_START_DATE_TYPE, - LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY, - LoanProductConstants.LOAN_SCHEDULE_TYPE, LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE)); + LoanProductConstants.ENABLE_INSTALLMENT_LEVEL_DELINQUENCY, LoanProductConstants.LOAN_SCHEDULE_TYPE, + LoanProductConstants.LOAN_SCHEDULE_PROCESSING_TYPE)); private static final String[] SUPPORTED_LOAN_CONFIGURABLE_ATTRIBUTES = { LoanProductConstants.amortizationTypeParamName, LoanProductConstants.interestTypeParamName, LoanProductConstants.transactionProcessingStrategyCodeParamName, @@ -764,7 +764,6 @@ public final class LoanProductDataValidator { .validateForBooleanValue(); validateDownPaymentPercentage(enableDownPayment, baseDataValidator, element); validateAutoRepaymentForDownPayment(enableDownPayment, baseDataValidator, element); - validateScheduleExtensionForDownPayment(enableDownPayment, baseDataValidator, element, null); } if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.REPAYMENT_START_DATE_TYPE, element)) { @@ -821,41 +820,6 @@ public final class LoanProductDataValidator { throwExceptionIfValidationWarningsExist(dataValidationErrors); } - private void validateScheduleExtensionForDownPayment(Boolean enableDownPayment, DataValidatorBuilder baseDataValidator, - JsonElement element, final LoanProduct loanProduct) { - - Boolean multiDisburseLoan = null; - if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.MULTI_DISBURSE_LOAN_PARAMETER_NAME, element)) { - multiDisburseLoan = this.fromApiJsonHelper.extractBooleanNamed(LoanProductConstants.MULTI_DISBURSE_LOAN_PARAMETER_NAME, - element); - } else if (loanProduct != null) { - multiDisburseLoan = loanProduct.isMultiDisburseLoan(); - } - - if (multiDisburseLoan != null && multiDisburseLoan) { - if (enableDownPayment) { - if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, element)) { - final Boolean disableScheduleExtensionForDownPayment = this.fromApiJsonHelper - .extractBooleanNamed(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, element); - baseDataValidator.reset().parameter(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT) - .value(disableScheduleExtensionForDownPayment).ignoreIfNull().validateForBooleanValue(); - } - } else { - if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, element)) { - baseDataValidator.reset().parameter(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT).failWithCode( - "supported.only.for.multi.disburse.loan.with.enable.down.payment.true", - "Disable repayment schedule extension for down-payment is supported only for multi disburse loan with enable down-payment true"); - } - } - } else { - if (this.fromApiJsonHelper.parameterExists(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT, element)) { - baseDataValidator.reset().parameter(LoanProductConstants.DISABLE_SCHEDULE_EXTENSION_FOR_DOWN_PAYMENT).failWithCode( - "supported.only.for.multi.disburse.loan.with.enable.down.payment.true", - "Disable repayment schedule extension for down-payment is supported only for multi disburse loan with enable down-payment true"); - } - } - } - private void validateAutoRepaymentForDownPayment(Boolean enableDownPayment, DataValidatorBuilder baseDataValidator, JsonElement element) { if (enableDownPayment) { @@ -1777,7 +1741,6 @@ public final class LoanProductDataValidator { .validateForBooleanValue(); validateDownPaymentPercentage(enableDownPayment, baseDataValidator, element); validateAutoRepaymentForDownPayment(enableDownPayment, baseDataValidator, element); - validateScheduleExtensionForDownPayment(enableDownPayment, baseDataValidator, element, loanProduct); } Integer repaymentStartDateType = loanProduct.getRepaymentStartDateType().getValue(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java index 3b2327190..a672db512 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/service/LoanProductReadPlatformServiceImpl.java @@ -230,7 +230,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo + "lp.days_in_month_enum as daysInMonth, lp.days_in_year_enum as daysInYear, lp.interest_recalculation_enabled as isInterestRecalculationEnabled, " + "lp.can_define_fixed_emi_amount as canDefineInstallmentAmount, lp.instalment_amount_in_multiples_of as installmentAmountInMultiplesOf, " + "lp.due_days_for_repayment_event as dueDaysForRepaymentEvent, lp.overdue_days_for_repayment_event as overDueDaysForRepaymentEvent, lp.enable_down_payment as enableDownPayment, lp.disbursed_amount_percentage_for_down_payment as disbursedAmountPercentageForDownPayment, lp.enable_auto_repayment_for_down_payment as enableAutoRepaymentForDownPayment, lp.repayment_start_date_type_enum as repaymentStartDateType, " - + "lp.disable_schedule_extension_for_down_payment as disableScheduleExtensionForDownPayment, lp.enable_installment_level_delinquency as enableInstallmentLevelDelinquency, " + + "lp.enable_installment_level_delinquency as enableInstallmentLevelDelinquency, " + "lpr.pre_close_interest_calculation_strategy as preCloseInterestCalculationStrategy, " + "lpr.id as lprId, lpr.product_id as productId, lpr.compound_type_enum as compoundType, lpr.reschedule_strategy_enum as rescheduleStrategy, " + "lpr.rest_frequency_type_enum as restFrequencyEnum, lpr.rest_frequency_interval as restFrequencyInterval, " @@ -367,7 +367,6 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo final boolean enableAutoRepaymentForDownPayment = rs.getBoolean("enableAutoRepaymentForDownPayment"); final Integer repaymentStartDateTypeId = JdbcSupport.getInteger(rs, "repaymentStartDateType"); final EnumOptionData repaymentStartDateType = LoanEnumerations.repaymentStartDateType(repaymentStartDateTypeId); - final boolean disableScheduleExtensionForDownPayment = rs.getBoolean("disableScheduleExtensionForDownPayment"); final boolean enableInstallmentLevelDelinquency = rs.getBoolean("enableInstallmentLevelDelinquency"); String status = ""; @@ -531,8 +530,8 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo maximumGap, syncExpectedWithDisbursementDate, canUseForTopup, isEqualAmortization, rateOptions, this.rates, isRatesEnabled, fixedPrincipalPercentagePerInstallment, delinquencyBucketOptions, delinquencyBucket, dueDaysForRepaymentEvent, overDueDaysForRepaymentEvent, enableDownPayment, disbursedAmountPercentageForDownPayment, - enableAutoRepaymentForDownPayment, advancedPaymentData, repaymentStartDateType, disableScheduleExtensionForDownPayment, - enableInstallmentLevelDelinquency, loanScheduleType.asEnumOptionData(), loanScheduleProcessingType.asEnumOptionData()); + enableAutoRepaymentForDownPayment, advancedPaymentData, repaymentStartDateType, enableInstallmentLevelDelinquency, + loanScheduleType.asEnumOptionData(), loanScheduleProcessingType.asEnumOptionData()); } } diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGeneratorTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGeneratorTest.java index d2590947b..82421fa84 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGeneratorTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/DefaultScheduledDateGeneratorTest.java @@ -123,7 +123,7 @@ public class DefaultScheduledDateGeneratorTest { null, null, null, null, null, Money.of(fromApplicationCurrency(dollarCurrency), ZERO), false, null, EMPTY_LIST, BigDecimal.valueOf(36_000L), null, DaysInMonthType.ACTUAL, DaysInYearType.ACTUAL, false, null, null, null, null, null, ZERO, null, NONE, null, ZERO, EMPTY_LIST, true, 0, false, holidayDetailDTO, false, false, false, null, false, false, null, false, - DISBURSEMENT_DATE, submittedOnDate, false, CUMULATIVE, LoanScheduleProcessingType.HORIZONTAL); + DISBURSEMENT_DATE, submittedOnDate, CUMULATIVE, LoanScheduleProcessingType.HORIZONTAL); } private HolidayDetailDTO createHolidayDTO() { diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithDownPaymentConfigurationTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithDownPaymentConfigurationTest.java index f9dccc356..2b11a04b1 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithDownPaymentConfigurationTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithDownPaymentConfigurationTest.java @@ -502,19 +502,17 @@ public class LoanProductWithDownPaymentConfigurationTest { Boolean enableDownPayment = true; BigDecimal disbursedAmountPercentageForDownPayment = BigDecimal.valueOf(25); Boolean enableAutoRepaymentForDownPayment = false; - Boolean disableScheduleExtensionForDownPayment = true; final Integer clientId = clientHelper.createClient(ClientHelper.defaultClientCreationRequest()).getClientId().intValue(); // Loan Product creation with down-payment configuration GetLoanProductsProductIdResponse getLoanProductsProductResponse = createLoanProductWithEnableDownPaymentAndMultipleDisbursementsWithDisableRepaymentConfiguration( - loanTransactionHelper, enableDownPayment, "25", enableAutoRepaymentForDownPayment, disableScheduleExtensionForDownPayment); + loanTransactionHelper, enableDownPayment, "25", enableAutoRepaymentForDownPayment); assertNotNull(getLoanProductsProductResponse); assertEquals(enableDownPayment, getLoanProductsProductResponse.getEnableDownPayment()); assertEquals(0, getLoanProductsProductResponse.getDisbursedAmountPercentageForDownPayment() .compareTo(disbursedAmountPercentageForDownPayment)); assertEquals(enableAutoRepaymentForDownPayment, getLoanProductsProductResponse.getEnableAutoRepaymentForDownPayment()); - assertEquals(disableScheduleExtensionForDownPayment, getLoanProductsProductResponse.getDisableScheduleExtensionForDownPayment()); final Integer loanId = createLoanAccountMultipleRepaymentsDisbursement(clientId, getLoanProductsProductResponse.getId(), loanExternalIdStr); @@ -528,52 +526,6 @@ public class LoanProductWithDownPaymentConfigurationTest { assertEquals(enableDownPayment, loanDetails.getEnableDownPayment()); assertEquals(0, loanDetails.getDisbursedAmountPercentageForDownPayment().compareTo(disbursedAmountPercentageForDownPayment)); assertEquals(enableAutoRepaymentForDownPayment, loanDetails.getEnableAutoRepaymentForDownPayment()); - assertEquals(disableScheduleExtensionForDownPayment, loanDetails.getDisableScheduleExtensionForDownPayment()); - } - - @Test - public void loanProductCreationWithEnableDownPaymentAndDisableRepaymentScheduleExtensionConfigurationValidationTest() { - final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(400).build(); - final LoanTransactionHelper validationErrorHelper = new LoanTransactionHelper(this.requestSpec, errorResponse); - - // down-payment configuration - Boolean enableDownPayment = true; - Boolean enableAutoRepaymentForDownPayment = false; - Boolean disableScheduleExtensionForDownPayment = true; - - // Loan Product with no multi disbursement settings and enable down payment and with disable Schedule Extension - // For DownPayment - String loanProductJSON = new LoanProductTestBuilder().withPrincipal("1000").withRepaymentTypeAsMonth().withRepaymentAfterEvery("1") - .withNumberOfRepayments("3").withRepaymentTypeAsMonth().withinterestRatePerPeriod("0") - .withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsDecliningBalance() - .withInterestCalculationPeriodTypeAsRepaymentPeriod(true).withDaysInMonth("30").withDaysInYear("365") - .withMoratorium("0", "0").withEnableDownPayment(enableDownPayment, "25", enableAutoRepaymentForDownPayment) - .withDisableScheduleExtensionForDownPayment(disableScheduleExtensionForDownPayment).build(null); - - ArrayList> loanProductErrorData = validationErrorHelper.getLoanProductError(loanProductJSON, - CommonConstants.RESPONSE_ERROR); - assertNotNull(loanProductErrorData); - assertEquals( - "validation.msg.loanproduct.disableScheduleExtensionForDownPayment.supported.only.for.multi.disburse.loan.with.enable.down.payment.true", - loanProductErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - - // Loan Product with multi disbursement settings and disable down payment and with disable Schedule Extension - // For DownPayment - enableDownPayment = false; - loanProductJSON = new LoanProductTestBuilder().withPrincipal("1000").withRepaymentTypeAsMonth().withRepaymentAfterEvery("1") - .withNumberOfRepayments("3").withRepaymentTypeAsMonth().withinterestRatePerPeriod("0") - .withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsDecliningBalance() - .withInterestCalculationPeriodTypeAsRepaymentPeriod(true).withDaysInMonth("30").withDaysInYear("365") - .withMoratorium("0", "0").withMultiDisburse().withDisallowExpectedDisbursements(true) - .withEnableDownPayment(enableDownPayment, null, enableAutoRepaymentForDownPayment) - .withDisableScheduleExtensionForDownPayment(disableScheduleExtensionForDownPayment).build(null); - - loanProductErrorData = validationErrorHelper.getLoanProductError(loanProductJSON, CommonConstants.RESPONSE_ERROR); - assertNotNull(loanProductErrorData); - assertEquals( - "validation.msg.loanproduct.disableScheduleExtensionForDownPayment.supported.only.for.multi.disburse.loan.with.enable.down.payment.true", - loanProductErrorData.get(0).get(CommonConstants.RESPONSE_ERROR_MESSAGE_CODE)); - } private void checkNoDownPaymentTransaction(final Integer loanID) { @@ -695,14 +647,14 @@ public class LoanProductWithDownPaymentConfigurationTest { private GetLoanProductsProductIdResponse createLoanProductWithEnableDownPaymentAndMultipleDisbursementsWithDisableRepaymentConfiguration( LoanTransactionHelper loanTransactionHelper, Boolean enableDownPayment, String disbursedAmountPercentageForDownPayment, - boolean enableAutoRepaymentForDownPayment, boolean disableScheduleExtensionForDownPayment) { + boolean enableAutoRepaymentForDownPayment) { final String loanProductJSON = new LoanProductTestBuilder().withPrincipal("1000").withRepaymentTypeAsMonth() .withRepaymentAfterEvery("1").withNumberOfRepayments("3").withRepaymentTypeAsMonth().withinterestRatePerPeriod("0") .withInterestRateFrequencyTypeAsMonths().withAmortizationTypeAsEqualPrincipalPayment().withInterestTypeAsDecliningBalance() .withInterestCalculationPeriodTypeAsRepaymentPeriod(true).withDaysInMonth("30").withDaysInYear("365") .withMoratorium("0", "0").withMultiDisburse().withDisallowExpectedDisbursements(true) .withEnableDownPayment(enableDownPayment, disbursedAmountPercentageForDownPayment, enableAutoRepaymentForDownPayment) - .withDisableScheduleExtensionForDownPayment(disableScheduleExtensionForDownPayment).build(null); + .build(null); final Integer loanProductId = loanTransactionHelper.getLoanProductId(loanProductJSON); return loanTransactionHelper.getLoanProduct(loanProductId); } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java index df81e8931..5f2f5e2f5 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductTestBuilder.java @@ -153,7 +153,6 @@ public class LoanProductTestBuilder { private String disbursedAmountPercentageForDownPayment = null; private boolean enableAutoRepaymentForDownPayment = false; private Integer repaymentStartDateType = null; - private boolean disableScheduleExtensionForDownPayment = false; private String loanScheduleType = LoanScheduleType.CUMULATIVE.name(); private String loanScheduleProcessingType = LoanScheduleProcessingType.HORIZONTAL.name(); @@ -312,9 +311,6 @@ public class LoanProductTestBuilder { if (this.repaymentStartDateType != null) { map.put("repaymentStartDateType", repaymentStartDateType); } - if (disableScheduleExtensionForDownPayment) { - map.put("disableScheduleExtensionForDownPayment", disableScheduleExtensionForDownPayment); - } return map; } @@ -745,11 +741,6 @@ public class LoanProductTestBuilder { return this; } - public LoanProductTestBuilder withDisableScheduleExtensionForDownPayment(final Boolean disableScheduleExtensionForDownPayment) { - this.disableScheduleExtensionForDownPayment = disableScheduleExtensionForDownPayment; - return this; - } - public LoanProductTestBuilder withAllowPartialPeriodInterestCalculation(final Boolean allowPartialPeriodInterestCalcualtion) { this.allowPartialPeriodInterestCalcualtion = allowPartialPeriodInterestCalcualtion; return this;