diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java index 955db97c6..56a557b71 100644 --- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java +++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java @@ -350,6 +350,30 @@ final class LoanProductsApiResourceSwagger { public Long resourceId; } + public static final class GetLoanProductsDaysInMonthType { + + private GetLoanProductsDaysInMonthType() {} + + @Schema(example = "1") + public Long id; + @Schema(example = "DaysInMonthType.actual") + public String code; + @Schema(example = "Actual") + public String description; + } + + public static final class GetLoanProductsDaysInYearType { + + private GetLoanProductsDaysInYearType() {} + + @Schema(example = "1") + public Long id; + @Schema(example = "DaysInYearType.actual") + public String code; + @Schema(example = "Actual") + public String description; + } + @Schema(description = "GetLoanProductsResponse") public static final class GetLoanProductsResponse { @@ -435,30 +459,6 @@ final class LoanProductsApiResourceSwagger { public String description; } - static final class GetLoansProductsDaysInMonthType { - - private GetLoansProductsDaysInMonthType() {} - - @Schema(example = "30") - public Long id; - @Schema(example = "DaysInMonthType.days360") - public String code; - @Schema(example = "30 Days") - public String description; - } - - static final class GetLoansProductsDaysInYearType { - - private GetLoansProductsDaysInYearType() {} - - @Schema(example = "360") - public Long id; - @Schema(example = "DaysInYearType.days360") - public String code; - @Schema(example = "360 Days") - public String description; - } - static final class GetLoanProductsDaysInYearCustomStrategy { private GetLoanProductsDaysInYearCustomStrategy() {} @@ -626,8 +626,8 @@ final class LoanProductsApiResourceSwagger { public List interestRateVariationsForBorrowerCycle; @Schema(example = "[]") public List numberOfRepaymentVariationsForBorrowerCycle; - public GetLoansProductsDaysInMonthType daysInMonthType; - public GetLoansProductsDaysInYearType daysInYearType; + public GetLoanProductsDaysInMonthType daysInMonthType; + public GetLoanProductsDaysInYearType daysInYearType; public GetLoanProductsDaysInYearCustomStrategy daysInYearCustomStrategy; @Schema(example = "true") public Boolean isInterestRecalculationEnabled; @@ -713,42 +713,6 @@ final class LoanProductsApiResourceSwagger { public String description; } - static final class GetLoansProductsDaysInMonthTemplateType { - - private GetLoansProductsDaysInMonthTemplateType() {} - - @Schema(example = "1") - public Long id; - @Schema(example = "DaysInMonthType.actual") - public String code; - @Schema(example = "Actual") - public String description; - } - - static final class GetLoanProductsDaysInYearTemplateType { - - private GetLoanProductsDaysInYearTemplateType() {} - - @Schema(example = "1") - public Long id; - @Schema(example = "DaysInYearType.actual") - public String code; - @Schema(example = "Actual") - public String description; - } - - static final class GetLoanProductsDaysInYearCustomStrategyTemplateType { - - private GetLoanProductsDaysInYearCustomStrategyTemplateType() {} - - @Schema(example = "FULL_LEAP_YEAR") - public String id; - @Schema(example = "DaysInYearCustomStrategyType.fullLeapYear") - public String code; - @Schema(example = "Full Leap Year") - public String description; - } - static final class GetLoanProductsInterestRecalculationTemplateData { private GetLoanProductsInterestRecalculationTemplateData() {} @@ -1098,9 +1062,9 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "[]") public List numberOfRepaymentVariationsForBorrowerCycle; public GetLoanProductsTemplateResponse.GetLoanProductsAccountingRule accountingRule; - public GetLoansProductsDaysInMonthTemplateType daysInMonthType; - public GetLoanProductsDaysInYearTemplateType daysInYearType; - public GetLoanProductsDaysInYearCustomStrategyTemplateType daysInYearCustomStrategy; + public GetLoanProductsDaysInMonthType daysInMonthType; + public GetLoanProductsDaysInYearType daysInYearType; + public StringEnumOptionData daysInYearCustomStrategy; @Schema(example = "false") public Boolean isInterestRecalculationEnabled; public GetLoanProductsInterestRecalculationTemplateData interestRecalculationData; @@ -1117,9 +1081,9 @@ final class LoanProductsApiResourceSwagger { public Set accountingRuleOptions; public GetLoanProductsAccountingMappingOptions accountingMappingOptions; public Set valueConditionTypeOptions; - public Set daysInMonthTypeOptions; + public Set daysInMonthTypeOptions; public Set daysInYearTypeOptions; - public Set daysInYearTypeCustomStrategyOptions; + public Set daysInYearTypeCustomStrategyOptions; public Set interestRecalculationCompoundingTypeOptions; public Set rescheduleStrategyTypeOptions; public Set interestRecalculationFrequencyTypeOptions; @@ -1402,6 +1366,9 @@ final class LoanProductsApiResourceSwagger { @Schema(example = "[]") public List numberOfRepaymentVariationsForBorrowerCycle; public GetLoanProductsResponse.GetLoanProductsAccountingRule accountingRule; + public GetLoanProductsDaysInMonthType daysInMonthType; + public GetLoanProductsDaysInYearType daysInYearType; + public StringEnumOptionData daysInYearCustomStrategy; @Schema(example = "false") public Boolean canUseForTopup; public GetLoanAccountingMappings accountingMappings; @@ -1555,6 +1522,8 @@ final class LoanProductsApiResourceSwagger { public Long daysInMonthType; @Schema(example = "1") public Long daysInYearType; + @Schema(example = "FULL_LEAP_YEAR") + public String daysInYearCustomStrategy; @Schema(example = "true") public Boolean allowPartialPeriodInterestCalcualtion; @Schema(example = "179") 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 912d75712..8f8574a33 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 @@ -523,6 +523,13 @@ public class LoanProductRelatedDetail implements LoanProductMinimumRepaymentSche this.daysInYearType = newValue; } + if (command.parameterExists(LoanProductConstants.DAYS_IN_YEAR_CUSTOM_STRATEGY_TYPE_PARAMETER_NAME)) { + final DaysInYearCustomStrategyType newValue = DaysInYearCustomStrategyType + .valueOf(command.stringValueOfParameterNamed(LoanProductConstants.DAYS_IN_YEAR_CUSTOM_STRATEGY_TYPE_PARAMETER_NAME)); + actualChanges.put(LoanProductConstants.DAYS_IN_YEAR_CUSTOM_STRATEGY_TYPE_PARAMETER_NAME, newValue.name()); + this.daysInYearCustomStrategy = newValue; + } + if (command.isChangeInBooleanParameterNamed(LoanProductConstants.IS_INTEREST_RECALCULATION_ENABLED_PARAMETER_NAME, this.isInterestRecalculationEnabled)) { final boolean newValue = command diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DaysInYearCustomStrategyTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DaysInYearCustomStrategyTest.java index e330d0a4d..f8b8a3f4e 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/DaysInYearCustomStrategyTest.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/DaysInYearCustomStrategyTest.java @@ -20,7 +20,9 @@ package org.apache.fineract.integrationtests; import java.io.IOException; import java.math.BigDecimal; +import org.apache.fineract.client.models.GetLoanProductsProductIdResponse; import org.apache.fineract.client.models.PostLoanProductsResponse; +import org.apache.fineract.client.models.PutLoanProductsProductIdRequest; import org.apache.fineract.integrationtests.common.ClientHelper; import org.apache.fineract.integrationtests.common.FineractClientHelper; import org.junit.jupiter.api.Assertions; @@ -46,6 +48,22 @@ public class DaysInYearCustomStrategyTest extends BaseLoanIntegrationTest { } } + @Test + public void test_Update_DaysInYearsCustomStrategy_Value() { + PostLoanProductsResponse postLoanProduct = loanProductHelper.createLoanProduct(create4IProgressive().currencyCode("USD") + .daysInYearType(DaysInYearType.ACTUAL).daysInYearCustomStrategy(DaysInYearCustomStrategy.FEB_29_PERIOD_ONLY)); + Assertions.assertNotNull(postLoanProduct.getResourceId()); + final Long loanProductId = postLoanProduct.getResourceId(); + + GetLoanProductsProductIdResponse loanProduct = loanTransactionHelper.getLoanProduct(loanProductId.intValue()); + Assertions.assertEquals("FEB_29_PERIOD_ONLY", loanProduct.getDaysInYearCustomStrategy().getId()); + + loanProductHelper.updateLoanProductById(loanProductId, + new PutLoanProductsProductIdRequest().daysInYearCustomStrategy(DaysInYearCustomStrategy.FULL_LEAP_YEAR)); + loanProduct = loanTransactionHelper.getLoanProduct(loanProductId.intValue()); + Assertions.assertEquals("FULL_LEAP_YEAR", loanProduct.getDaysInYearCustomStrategy().getId()); + } + @Test public void testFEB_29_PERIOD_ONLY() { runAt("1 January 2024", () -> {