Skip to content

Commit d88f634

Browse files
magyari-adamadamsaghy
authored andcommitted
FINERACT-2232: Capitalized income - income type config
1 parent 85fac1e commit d88f634

File tree

21 files changed

+242
-41
lines changed

21 files changed

+242
-41
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.fineract.portfolio.loanaccount.domain;
20+
21+
import lombok.Getter;
22+
import lombok.RequiredArgsConstructor;
23+
import org.apache.fineract.infrastructure.core.api.ApiFacingEnum;
24+
25+
@Getter
26+
@RequiredArgsConstructor
27+
public enum LoanCapitalizedIncomeType implements ApiFacingEnum<LoanCapitalizedIncomeType> {
28+
29+
FEE("capitalizedIncome.incomeType.fee", "Fee"), INTEREST("capitalizedIncome.incomeType.interest", "Interest");
30+
31+
private final String code;
32+
private final String humanReadableName;
33+
}

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanApplicationTerms.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsDataWrapper;
4949
import org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeCalculationType;
5050
import org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeStrategy;
51+
import org.apache.fineract.portfolio.loanaccount.domain.LoanCapitalizedIncomeType;
5152
import org.apache.fineract.portfolio.loanaccount.domain.LoanChargeOffBehaviour;
5253
import org.apache.fineract.portfolio.loanproduct.data.LoanProductRelatedDetailMinimumData;
5354
import org.apache.fineract.portfolio.loanproduct.domain.AmortizationMethod;
@@ -237,6 +238,7 @@ public final class LoanApplicationTerms {
237238
private boolean enableIncomeCapitalization;
238239
private LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType;
239240
private LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy;
241+
private LoanCapitalizedIncomeType capitalizedIncomeType;
240242

241243
private LoanApplicationTerms(Builder builder) {
242244
this.currency = builder.currency;
@@ -276,6 +278,7 @@ private LoanApplicationTerms(Builder builder) {
276278
this.enableIncomeCapitalization = builder.enableIncomeCapitalization;
277279
this.capitalizedIncomeCalculationType = builder.capitalizedIncomeCalculationType;
278280
this.capitalizedIncomeStrategy = builder.capitalizedIncomeStrategy;
281+
this.capitalizedIncomeType = builder.capitalizedIncomeType;
279282
}
280283

281284
public static class Builder {
@@ -308,6 +311,7 @@ public static class Builder {
308311
private boolean enableIncomeCapitalization;
309312
private LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType;
310313
private LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy;
314+
private LoanCapitalizedIncomeType capitalizedIncomeType;
311315

312316
public Builder currency(CurrencyData currency) {
313317
this.currency = currency;
@@ -439,6 +443,11 @@ public Builder capitalizedIncomeStrategy(LoanCapitalizedIncomeStrategy value) {
439443
return this;
440444
}
441445

446+
public Builder capitalizedIncomeType(LoanCapitalizedIncomeType value) {
447+
this.capitalizedIncomeType = value;
448+
return this;
449+
}
450+
442451
public LoanApplicationTerms build() {
443452
return new LoanApplicationTerms(this);
444453
}
@@ -508,7 +517,7 @@ public static LoanApplicationTerms assembleFrom(final CurrencyData currency, fin
508517
final LoanChargeOffBehaviour chargeOffBehaviour, final boolean interestRecognitionOnDisbursementDate,
509518
final DaysInYearCustomStrategyType daysInYearCustomStrategy, final boolean enableIncomeCapitalization,
510519
final LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType,
511-
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy) {
520+
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType) {
512521

513522
final LoanRescheduleStrategyMethod rescheduleStrategyMethod = null;
514523
final CalendarHistoryDataWrapper calendarHistoryDataWrapper = null;
@@ -529,7 +538,7 @@ public static LoanApplicationTerms assembleFrom(final CurrencyData currency, fin
529538
isAutoRepaymentForDownPaymentEnabled, repaymentStartDateType, submittedOnDate, loanScheduleType, loanScheduleProcessingType,
530539
fixedLength, enableAccrualActivityPosting, supportedInterestRefundTypes, chargeOffBehaviour,
531540
interestRecognitionOnDisbursementDate, daysInYearCustomStrategy, enableIncomeCapitalization,
532-
capitalizedIncomeCalculationType, capitalizedIncomeStrategy);
541+
capitalizedIncomeCalculationType, capitalizedIncomeStrategy, capitalizedIncomeType);
533542

534543
}
535544

@@ -605,7 +614,7 @@ public static LoanApplicationTerms assembleFrom(final CurrencyData currency, fin
605614
loanProductRelatedDetail.getSupportedInterestRefundTypes(), loanProductRelatedDetail.getChargeOffBehaviour(),
606615
loanProductRelatedDetail.isInterestRecognitionOnDisbursementDate(), loanProductRelatedDetail.getDaysInYearCustomStrategy(),
607616
loanProductRelatedDetail.isEnableIncomeCapitalization(), loanProductRelatedDetail.getCapitalizedIncomeCalculationType(),
608-
loanProductRelatedDetail.getCapitalizedIncomeStrategy());
617+
loanProductRelatedDetail.getCapitalizedIncomeStrategy(), loanProductRelatedDetail.getCapitalizedIncomeType());
609618
}
610619

611620
private LoanApplicationTerms(final CurrencyData currency, final Integer loanTermFrequency,
@@ -638,7 +647,7 @@ private LoanApplicationTerms(final CurrencyData currency, final Integer loanTerm
638647
final List<LoanSupportedInterestRefundTypes> supportedInterestRefundTypes, final LoanChargeOffBehaviour chargeOffBehaviour,
639648
final boolean interestRecognitionOnDisbursementDate, final DaysInYearCustomStrategyType daysInYearCustomStrategy,
640649
final boolean enableIncomeCapitalization, final LoanCapitalizedIncomeCalculationType capitalizedIncomeCalculationType,
641-
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy) {
650+
final LoanCapitalizedIncomeStrategy capitalizedIncomeStrategy, final LoanCapitalizedIncomeType capitalizedIncomeType) {
642651

643652
this.currency = currency;
644653
this.loanTermFrequency = loanTermFrequency;
@@ -743,6 +752,7 @@ private LoanApplicationTerms(final CurrencyData currency, final Integer loanTerm
743752
this.enableIncomeCapitalization = enableIncomeCapitalization;
744753
this.capitalizedIncomeCalculationType = capitalizedIncomeCalculationType;
745754
this.capitalizedIncomeStrategy = capitalizedIncomeStrategy;
755+
this.capitalizedIncomeType = capitalizedIncomeType;
746756
}
747757

748758
public Money adjustPrincipalIfLastRepaymentPeriod(final Money principalForPeriod, final Money totalCumulativePrincipalToDate,
@@ -1605,7 +1615,8 @@ public LoanProductRelatedDetail toLoanProductRelatedDetail() {
16051615
this.disbursedAmountPercentageForDownPayment, this.isAutoRepaymentForDownPaymentEnabled, this.loanScheduleType,
16061616
this.loanScheduleProcessingType, this.fixedLength, this.enableAccrualActivityPosting, this.supportedInterestRefundTypes,
16071617
this.chargeOffBehaviour, this.interestRecognitionOnDisbursementDate, this.daysInYearCustomStrategy,
1608-
this.enableIncomeCapitalization, this.capitalizedIncomeCalculationType, this.capitalizedIncomeStrategy);
1618+
this.enableIncomeCapitalization, this.capitalizedIncomeCalculationType, this.capitalizedIncomeStrategy,
1619+
this.capitalizedIncomeType);
16091620
}
16101621

16111622
public LoanProductMinimumRepaymentScheduleRelatedDetail toLoanProductRelatedDetailMinimumData() {

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/LoanProductConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,5 @@ public interface LoanProductConstants {
176176
String ENABLE_INCOME_CAPITALIZATION_PARAM_NAME = "enableIncomeCapitalization";
177177
String CAPITALIZED_INCOME_CALCULATION_TYPE_PARAM_NAME = "capitalizedIncomeCalculationType";
178178
String CAPITALIZED_INCOME_STRATEGY_PARAM_NAME = "capitalizedIncomeStrategy";
179+
String CAPITALIZED_INCOME_TYPE_PARAM_NAME = "capitalizedIncomeType";
179180
}

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResourceSwagger.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ private PostLoanProductsRequest() {}
201201
public String capitalizedIncomeCalculationType;
202202
@Schema(example = "EQUAL_AMORTIZATION", allowableValues = "EQUAL_AMORTIZATION")
203203
public String capitalizedIncomeStrategy;
204+
@Schema(example = "FEE", allowableValues = { "FEE", "INTEREST" })
205+
public String capitalizedIncomeType;
204206

205207
// Interest Recalculation
206208
@Schema(example = "false")
@@ -667,6 +669,8 @@ private GetLoanProductsAccountingRule() {}
667669
public StringEnumOptionData capitalizedIncomeCalculationType;
668670
@Schema(example = "EQUAL_AMORTIZATION")
669671
public StringEnumOptionData capitalizedIncomeStrategy;
672+
@Schema(example = "FEE")
673+
public StringEnumOptionData capitalizedIncomeType;
670674
}
671675

672676
@Schema(description = "GetLoanProductsTemplateResponse")
@@ -1119,8 +1123,11 @@ private GetLoanProductsValueConditionTypeOptions() {}
11191123
public StringEnumOptionData capitalizedIncomeCalculationType;
11201124
@Schema(example = "EQUAL_AMORTIZATION")
11211125
public StringEnumOptionData capitalizedIncomeStrategy;
1126+
@Schema(example = "FEE")
1127+
public StringEnumOptionData capitalizedIncomeType;
11221128
public List<StringEnumOptionData> capitalizedIncomeCalculationTypeOptions;
11231129
public List<StringEnumOptionData> capitalizedIncomeStrategyOptions;
1130+
public List<StringEnumOptionData> capitalizedIncomeTypeOptions;
11241131
}
11251132

11261133
@Schema(description = "GetLoanProductsProductIdResponse")
@@ -1448,8 +1455,11 @@ private GetLoanCharge() {}
14481455
public StringEnumOptionData capitalizedIncomeCalculationType;
14491456
@Schema(example = "EQUAL_AMORTIZATION")
14501457
public StringEnumOptionData capitalizedIncomeStrategy;
1458+
@Schema(example = "FEE")
1459+
public StringEnumOptionData capitalizedIncomeType;
14511460
public List<StringEnumOptionData> capitalizedIncomeCalculationTypeOptions;
14521461
public List<StringEnumOptionData> capitalizedIncomeStrategyOptions;
1462+
public List<StringEnumOptionData> capitalizedIncomeTypeOptions;
14531463
}
14541464

14551465
@Schema(description = "PutLoanProductsProductIdRequest")
@@ -1713,6 +1723,8 @@ private PutLoanProductsProductIdRequest() {}
17131723
public String capitalizedIncomeCalculationType;
17141724
@Schema(example = "EQUAL_AMORTIZATION", allowableValues = "EQUAL_AMORTIZATION")
17151725
public String capitalizedIncomeStrategy;
1726+
@Schema(example = "FEE", allowableValues = { "FEE", "INTEREST" })
1727+
public String capitalizedIncomeType;
17161728
}
17171729

17181730
public static final class AdvancedPaymentData {

0 commit comments

Comments
 (0)