diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/FutureInstallmentAllocationRule.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/FutureInstallmentAllocationRule.java index 3fbe4ab83..ad2ba886f 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/FutureInstallmentAllocationRule.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/FutureInstallmentAllocationRule.java @@ -18,8 +18,23 @@ */ package org.apache.fineract.portfolio.loanproduct.domain; +import java.util.Arrays; +import java.util.List; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; + +@Getter +@RequiredArgsConstructor public enum FutureInstallmentAllocationRule { - NEXT_INSTALLMENT, // - LAST_INSTALLMENT, // - REAMORTIZATION // + + NEXT_INSTALLMENT("Next installment"), // + LAST_INSTALLMENT("Last installment"), // + REAMORTIZATION("Reamortization"); // + + private final String humanReadableName; + + public static List getValuesAsEnumOptionDataList() { + return Arrays.stream(values()).map(v -> new EnumOptionData((long) (v.ordinal() + 1), v.name(), v.getHumanReadableName())).toList(); + } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationTransactionType.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationTransactionType.java index 3e95b1bd2..adf967f6c 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationTransactionType.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationTransactionType.java @@ -18,24 +18,31 @@ */ package org.apache.fineract.portfolio.loanproduct.domain; +import java.util.Arrays; +import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; @Getter @RequiredArgsConstructor public enum PaymentAllocationTransactionType { - DEFAULT(null), // - REPAYMENT(LoanTransactionType.REPAYMENT), // - DOWN_PAYMENT(LoanTransactionType.DOWN_PAYMENT), // - MERCHANT_ISSUED_REFUND(LoanTransactionType.MERCHANT_ISSUED_REFUND), // - PAYOUT_REFUND(LoanTransactionType.PAYOUT_REFUND), // - GOODWILL_CREDIT(LoanTransactionType.GOODWILL_CREDIT), // - CHARGE_REFUND(LoanTransactionType.CHARGE_REFUND), // - CHARGE_ADJUSTMENT(LoanTransactionType.CHARGE_ADJUSTMENT), // - WAIVE_INTEREST(LoanTransactionType.WAIVE_INTEREST),// - ; // + DEFAULT(null, "Default"), // + REPAYMENT(LoanTransactionType.REPAYMENT, "Repayment"), // + DOWN_PAYMENT(LoanTransactionType.DOWN_PAYMENT, "Down payment"), // + MERCHANT_ISSUED_REFUND(LoanTransactionType.MERCHANT_ISSUED_REFUND, "Merchant issued refund"), // + PAYOUT_REFUND(LoanTransactionType.PAYOUT_REFUND, "Payout refund"), // + GOODWILL_CREDIT(LoanTransactionType.GOODWILL_CREDIT, "Goodwill credit"), // + CHARGE_REFUND(LoanTransactionType.CHARGE_REFUND, "Charge refund"), // + CHARGE_ADJUSTMENT(LoanTransactionType.CHARGE_ADJUSTMENT, "Charge adjustment"), // + WAIVE_INTEREST(LoanTransactionType.WAIVE_INTEREST, "Waive interest");// private final LoanTransactionType loanTransactionType; + private final String humanReadableName; + + public static List getValuesAsEnumOptionDataList() { + return Arrays.stream(values()).map(v -> new EnumOptionData((long) (v.ordinal() + 1), v.name(), v.getHumanReadableName())).toList(); + } } diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationType.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationType.java index 2ddca9dbb..574c309e0 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationType.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/PaymentAllocationType.java @@ -26,27 +26,35 @@ import static org.apache.fineract.portfolio.loanproduct.domain.DueType.DUE; import static org.apache.fineract.portfolio.loanproduct.domain.DueType.IN_ADVANCE; import static org.apache.fineract.portfolio.loanproduct.domain.DueType.PAST_DUE; +import java.util.Arrays; +import java.util.List; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; @Getter @RequiredArgsConstructor public enum PaymentAllocationType { - PAST_DUE_PENALTY(PAST_DUE, PENALTY), // - PAST_DUE_FEE(PAST_DUE, FEE), // - PAST_DUE_PRINCIPAL(PAST_DUE, PRINCIPAL), // - PAST_DUE_INTEREST(PAST_DUE, INTEREST), // - DUE_PENALTY(DUE, PENALTY), // - DUE_FEE(DUE, FEE), // - DUE_PRINCIPAL(DUE, PRINCIPAL), // - DUE_INTEREST(DUE, INTEREST), // - IN_ADVANCE_PENALTY(IN_ADVANCE, PENALTY), // - IN_ADVANCE_FEE(IN_ADVANCE, FEE), // - IN_ADVANCE_PRINCIPAL(IN_ADVANCE, PRINCIPAL), // - IN_ADVANCE_INTEREST(IN_ADVANCE, INTEREST); // + PAST_DUE_PENALTY(PAST_DUE, PENALTY, "Past due penalty"), // + PAST_DUE_FEE(PAST_DUE, FEE, "Past due fee"), // + PAST_DUE_PRINCIPAL(PAST_DUE, PRINCIPAL, "Past due principal"), // + PAST_DUE_INTEREST(PAST_DUE, INTEREST, "Past due interest"), // + DUE_PENALTY(DUE, PENALTY, "Due penalty"), // + DUE_FEE(DUE, FEE, "Due fee"), // + DUE_PRINCIPAL(DUE, PRINCIPAL, "Due principal"), // + DUE_INTEREST(DUE, INTEREST, "Due interest"), // + IN_ADVANCE_PENALTY(IN_ADVANCE, PENALTY, "In advance penalty"), // + IN_ADVANCE_FEE(IN_ADVANCE, FEE, "In advance fee"), // + IN_ADVANCE_PRINCIPAL(IN_ADVANCE, PRINCIPAL, "In advance principal"), // + IN_ADVANCE_INTEREST(IN_ADVANCE, INTEREST, "In advanced interest"); // private final DueType dueType; private final AllocationType allocationType; + private final String humanReadableName; + + public static List getValuesAsEnumOptionDataList() { + return Arrays.stream(values()).map(v -> new EnumOptionData((long) (v.ordinal() + 1), v.name(), v.getHumanReadableName())).toList(); + } } 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 67fda06e3..c607f4314 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 @@ -79,6 +79,9 @@ import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; import org.apache.fineract.portfolio.loanproduct.data.TransactionProcessingStrategyData; +import org.apache.fineract.portfolio.loanproduct.domain.FutureInstallmentAllocationRule; +import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTransactionType; +import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType; import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException; import org.apache.fineract.portfolio.loanproduct.productmix.data.ProductMixData; import org.apache.fineract.portfolio.loanproduct.productmix.service.ProductMixReadPlatformService; @@ -407,6 +410,11 @@ public class LoanProductsApiResource { .retrievePreCloseInterestCalculationStrategyOptions(); final List floatingRateOptions = this.floatingRateReadPlatformService.retrieveLookupActive(); final List repaymentStartDateTypeOptions = dropdownReadPlatformService.retrieveRepaymentStartDateTypeOptions(); + final List advancedPaymentAllocationTransactionTypes = PaymentAllocationTransactionType + .getValuesAsEnumOptionDataList(); + final List advancedPaymentAllocationFutureInstallmentAllocationRules = FutureInstallmentAllocationRule + .getValuesAsEnumOptionDataList(); + final List advancedPaymentAllocationTypes = PaymentAllocationType.getValuesAsEnumOptionDataList(); return new LoanProductData(productData, chargeOptions, penaltyOptions, paymentTypeOptions, currencyOptions, amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, repaymentFrequencyTypeOptions, interestRateFrequencyTypeOptions, @@ -414,7 +422,9 @@ public class LoanProductsApiResource { loanCycleValueConditionTypeOptions, daysInMonthTypeOptions, daysInYearTypeOptions, interestRecalculationCompoundingTypeOptions, rescheduleStrategyTypeOptions, interestRecalculationFrequencyTypeOptions, preCloseInterestCalculationStrategyOptions, floatingRateOptions, interestRecalculationNthDayTypeOptions, - interestRecalculationDayOfWeekTypeOptions, isRatesEnabled, delinquencyBucketOptions, repaymentStartDateTypeOptions); + interestRecalculationDayOfWeekTypeOptions, isRatesEnabled, delinquencyBucketOptions, repaymentStartDateTypeOptions, + advancedPaymentAllocationTransactionTypes, advancedPaymentAllocationFutureInstallmentAllocationRules, + advancedPaymentAllocationTypes); } } 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 2b586572f..024cb74da 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 @@ -813,7 +813,7 @@ final class LoanProductsApiResourceSwagger { public Boolean penalty; public GetLoanProductsCurrencyOptions currency; @Schema(example = "100") - public Long amount; + public BigDecimal amount; public GetLoanChargeTimeType chargeTimeType; public GetLoanProductsChargeAppliesTo chargeAppliesTo; public GetLoanChargeCalculationType chargeCalculationType; @@ -865,7 +865,7 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "over payment") public String name; @Schema(example = "13") - public Integer glCode; + public String glCode; @Schema(example = "false") public Boolean disabled; @Schema(example = "true") @@ -888,7 +888,7 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "Loan portfolio") public String name; @Schema(example = "02") - public Integer glCode; + public String glCode; @Schema(example = "false") public Boolean disabled; @Schema(example = "true") @@ -923,7 +923,7 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "loans written off 2") public String name; @Schema(example = "12") - public Integer glCode; + public String glCode; @Schema(example = "false") public Boolean disabled; @Schema(example = "true") @@ -958,7 +958,7 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "income from interest") public String name; @Schema(example = "04") - public Integer glCode; + public String glCode; @Schema(example = "false") public Boolean disabled; @Schema(example = "true") @@ -1031,6 +1031,9 @@ final class LoanProductsApiResourceSwagger { public Set rescheduleStrategyTypeOptions; public Set interestRecalculationFrequencyTypeOptions; public Set repaymentStartDateTypeOptions; + public List advancedPaymentAllocationTransactionTypes; + public List advancedPaymentAllocationFutureInstallmentAllocationRules; + public List advancedPaymentAllocationTypes; } @Schema(description = "GetLoanProductsProductIdResponse") 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 014ac6d75..8cba2c7ff 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 @@ -167,6 +167,9 @@ public class LoanProductData implements Serializable { private final List interestRecalculationDayOfWeekTypeOptions; private final List rescheduleStrategyTypeOptions; private final List preClosureInterestCalculationStrategyOptions; + private final List advancedPaymentAllocationTransactionTypes; + private final List advancedPaymentAllocationFutureInstallmentAllocationRules; + private final List advancedPaymentAllocationTypes; private final List interestRecalculationFrequencyTypeOptions; private final List floatingRateOptions; @@ -835,6 +838,9 @@ public class LoanProductData implements Serializable { this.enableAutoRepaymentForDownPayment = enableAutoRepaymentForDownPayment; this.repaymentStartDateType = repaymentStartDateType; this.repaymentStartDateTypeOptions = null; + this.advancedPaymentAllocationTransactionTypes = null; + this.advancedPaymentAllocationFutureInstallmentAllocationRules = null; + this.advancedPaymentAllocationTypes = null; } public LoanProductData(final LoanProductData productData, final Collection chargeOptions, @@ -851,7 +857,10 @@ public class LoanProductData implements Serializable { final List preCloseInterestCalculationStrategyOptions, final List floatingRateOptions, final List interestRecalculationNthDayTypeOptions, final List interestRecalculationDayOfWeekTypeOptions, final boolean isRatesEnabled, - final Collection delinquencyBucketOptions, final List repaymentStartDateTypeOptions) { + final Collection delinquencyBucketOptions, final List repaymentStartDateTypeOptions, + final List advancedPaymentAllocationTransactionTypes, + final List advancedPaymentAllocationFutureInstallmentAllocationRules, + final List advancedPaymentAllocationTypes) { this.id = productData.id; this.name = productData.name; this.shortName = productData.shortName; @@ -992,6 +1001,9 @@ public class LoanProductData implements Serializable { this.paymentAllocation = productData.paymentAllocation; this.repaymentStartDateType = productData.repaymentStartDateType; this.repaymentStartDateTypeOptions = repaymentStartDateTypeOptions; + this.advancedPaymentAllocationTransactionTypes = advancedPaymentAllocationTransactionTypes; + this.advancedPaymentAllocationFutureInstallmentAllocationRules = advancedPaymentAllocationFutureInstallmentAllocationRules; + this.advancedPaymentAllocationTypes = advancedPaymentAllocationTypes; } private Collection nullIfEmpty(final Collection charges) { diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductTemplateTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductTemplateTest.java new file mode 100644 index 000000000..269244416 --- /dev/null +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductTemplateTest.java @@ -0,0 +1,101 @@ +/** + * 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. + */ +package org.apache.fineract.integrationtests; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.apache.fineract.client.models.GetLoanProductsTemplateResponse; +import org.apache.fineract.integrationtests.common.loans.LoanProductHelper; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class LoanProductTemplateTest { + + private static LoanProductHelper loanProductHelper; + + @BeforeAll + public static void setup() { + loanProductHelper = new LoanProductHelper(); + } + + @Test + public void testLoanProductTemplateForAdvancedPaymentAllocation() { + GetLoanProductsTemplateResponse loanProductsTemplateResponse = loanProductHelper.getLoanProductTemplate(false); + + // assert payment allocation types + assertEquals("PAST_DUE_PENALTY", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(0).getCode()); + assertEquals("Past due penalty", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(0).getValue()); + assertEquals("PAST_DUE_FEE", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(1).getCode()); + assertEquals("Past due fee", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(1).getValue()); + assertEquals("PAST_DUE_PRINCIPAL", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(2).getCode()); + assertEquals("Past due principal", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(2).getValue()); + assertEquals("PAST_DUE_INTEREST", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(3).getCode()); + assertEquals("Past due interest", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(3).getValue()); + assertEquals("DUE_PENALTY", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(4).getCode()); + assertEquals("Due penalty", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(4).getValue()); + assertEquals("DUE_FEE", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(5).getCode()); + assertEquals("Due fee", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(5).getValue()); + assertEquals("DUE_PRINCIPAL", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(6).getCode()); + assertEquals("Due principal", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(6).getValue()); + assertEquals("DUE_INTEREST", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(7).getCode()); + assertEquals("Due interest", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(7).getValue()); + assertEquals("IN_ADVANCE_PENALTY", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(8).getCode()); + assertEquals("In advance penalty", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(8).getValue()); + assertEquals("IN_ADVANCE_FEE", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(9).getCode()); + assertEquals("In advance fee", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(9).getValue()); + assertEquals("IN_ADVANCE_PRINCIPAL", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(10).getCode()); + assertEquals("In advance principal", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(10).getValue()); + assertEquals("IN_ADVANCE_INTEREST", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(11).getCode()); + assertEquals("In advanced interest", loanProductsTemplateResponse.getAdvancedPaymentAllocationTypes().get(11).getValue()); + // assert payment allocation transaction types + assertEquals("DEFAULT", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(0).getCode()); + assertEquals("Default", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(0).getValue()); + assertEquals("REPAYMENT", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(1).getCode()); + assertEquals("Repayment", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(1).getValue()); + assertEquals("DOWN_PAYMENT", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(2).getCode()); + assertEquals("Down payment", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(2).getValue()); + assertEquals("MERCHANT_ISSUED_REFUND", + loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(3).getCode()); + assertEquals("Merchant issued refund", + loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(3).getValue()); + assertEquals("PAYOUT_REFUND", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(4).getCode()); + assertEquals("Payout refund", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(4).getValue()); + assertEquals("GOODWILL_CREDIT", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(5).getCode()); + assertEquals("Goodwill credit", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(5).getValue()); + assertEquals("CHARGE_REFUND", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(6).getCode()); + assertEquals("Charge refund", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(6).getValue()); + assertEquals("CHARGE_ADJUSTMENT", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(7).getCode()); + assertEquals("Charge adjustment", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(7).getValue()); + assertEquals("WAIVE_INTEREST", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(8).getCode()); + assertEquals("Waive interest", loanProductsTemplateResponse.getAdvancedPaymentAllocationTransactionTypes().get(8).getValue()); + // assert future installment rules + assertEquals("NEXT_INSTALLMENT", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(0).getCode()); + assertEquals("Next installment", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(0).getValue()); + assertEquals("LAST_INSTALLMENT", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(1).getCode()); + assertEquals("Last installment", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(1).getValue()); + assertEquals("REAMORTIZATION", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(2).getCode()); + assertEquals("Reamortization", + loanProductsTemplateResponse.getAdvancedPaymentAllocationFutureInstallmentAllocationRules().get(2).getValue()); + } +} diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java index 46c7aa1ff..d5873c82e 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java @@ -19,6 +19,7 @@ package org.apache.fineract.integrationtests.common.loans; import org.apache.fineract.client.models.GetLoanProductsProductIdResponse; +import org.apache.fineract.client.models.GetLoanProductsTemplateResponse; import org.apache.fineract.client.models.PostLoanProductsRequest; import org.apache.fineract.client.models.PostLoanProductsResponse; import org.apache.fineract.client.models.PutLoanProductsProductIdRequest; @@ -40,4 +41,8 @@ public class LoanProductHelper extends IntegrationTest { public PutLoanProductsProductIdResponse updateLoanProductByExternalId(String externalId, PutLoanProductsProductIdRequest request) { return ok(fineract().loanProducts.updateLoanProduct1(externalId, request)); } + + public GetLoanProductsTemplateResponse getLoanProductTemplate(boolean isProductMixTemplate) { + return ok(fineract().loanProducts.retrieveTemplate11(isProductMixTemplate)); + } }