Skip to content

Commit a849e9b

Browse files
Jose Alberto Hernandezadamsaghy
authored andcommitted
FINERACT-2398: Re-amortization Interest Handling configuration
1 parent 8a86759 commit a849e9b

File tree

22 files changed

+294
-35
lines changed

22 files changed

+294
-35
lines changed

fineract-investor/src/main/resources/jpa/static-weaving/module/fineract-investor/persistence.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
<class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelation</class>
121121
<class>org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionToRepaymentScheduleMapping</class>
122122
<class>org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter</class>
123+
<class>org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter</class>
123124
<class>org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory</class>
124125
<class>org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest</class>
125126
<class>org.apache.fineract.portfolio.loanproduct.domain.LoanProduct</class>

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanApiConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ public interface LoanApiConstants {
142142
String CHARGE_OFF_REASONS = "ChargeOffReasons";
143143
// loan ReAge
144144
String REAGE_REASONS = "ReAgeReasons";
145+
// loan ReAmortization
146+
String REAMORTIZATION_REASONS = "ReAmortizationReasons";
145147
// fore closure constants
146148
String transactionDateParamName = "transactionDate";
147149
String noteParamName = "note";
@@ -186,6 +188,7 @@ public interface LoanApiConstants {
186188
String BUY_DOWN_FEE_COMMAND = "buyDownFee";
187189
String BUY_DOWN_FEE_ADJUSTMENT_COMMAND = "buyDownFeeAdjustment";
188190
String REAGE_COMMAND = "reAge";
191+
String REAMORTIZATION_COMMAND = "reAmortization";
189192

190193
// Data Validator names
191194
String LOAN_FRAUD_DATAVALIDATOR_PREFIX = "loans.fraud";

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanReAmortizationApiConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ public interface LoanReAmortizationApiConstants {
2323
String localeParameterName = "locale";
2424
String dateFormatParameterName = "dateFormat";
2525
String externalIdParameterName = "externalId";
26+
27+
String reAmortizationInterestHandlingParamName = "reAmortizationInterestHandling";
28+
String reasonCodeValueIdParamName = "reasonCodeValueId";
2629
}

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResourceSwagger.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ private PostLoansLoanIdTransactionsRequest() {}
370370
public Integer numberOfInstallments;
371371
@Schema(example = "DEFAULT")
372372
public String reAgeInterestHandling;
373+
@Schema(example = "DEFAULT")
374+
public String reAmortizationInterestHandling;
373375
@Schema(example = "1")
374376
public Long reasonCodeValueId;
375377

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ public class LoanTransactionData implements Serializable {
121121
private Collection<CodeValueData> reAgeReasonOptions = null;
122122
private Collection<PeriodFrequencyType> periodFrequencyOptions = null;
123123
private Collection<StringEnumOptionData> reAgeInterestHandlingOptions = null;
124+
private Collection<CodeValueData> reAmortizationReasonOptions = null;
125+
private Collection<StringEnumOptionData> reAmortizationInterestHandlingOptions = null;
124126

125127
public static LoanTransactionData importInstance(BigDecimal repaymentAmount, LocalDate lastRepaymentDate, Long repaymentTypeId,
126128
Integer rowIndex, String locale, String dateFormat) {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.fineract.organisation.monetary.domain.Money;
4949
import org.apache.fineract.organisation.office.domain.Office;
5050
import org.apache.fineract.portfolio.loanaccount.domain.reaging.LoanReAgeParameter;
51+
import org.apache.fineract.portfolio.loanaccount.domain.reamortization.LoanReAmortizationParameter;
5152
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
5253
import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
5354

@@ -145,6 +146,10 @@ public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long
145146
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY, mappedBy = "loanTransaction")
146147
private LoanReAgeParameter loanReAgeParameter;
147148

149+
@Setter
150+
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY, mappedBy = "loanTransaction")
151+
private LoanReAmortizationParameter loanReAmortizationParameter;
152+
148153
@Setter
149154
@ManyToOne(fetch = FetchType.LAZY)
150155
@JoinColumn(name = "classification_cv_id")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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.reamortization;
20+
21+
import java.util.Arrays;
22+
import java.util.List;
23+
import lombok.Getter;
24+
import lombok.RequiredArgsConstructor;
25+
import org.apache.fineract.infrastructure.core.data.StringEnumOptionData;
26+
27+
@Getter
28+
@RequiredArgsConstructor
29+
public enum LoanReAmortizationInterestHandlingType {
30+
31+
DEFAULT("loanReAmortizationInterestHandlingType.default", "Default"), //
32+
WAIVE_INTEREST("loanReAmortizationInterestHandlingType.waiveInterest", "Waive Interest"), //
33+
EQUAL_AMORTIZATION_INTEREST_SPLIT("loanReAmortizationInterestHandlingType.equalAmortizationInterestSplit",
34+
"Equal Amortization Interest Split"), ///
35+
;
36+
37+
private final String code;
38+
private final String humanReadableName;
39+
40+
public static List<StringEnumOptionData> getValuesAsEnumOptionDataList() {
41+
return Arrays.stream(values()).map(v -> new StringEnumOptionData(v.name(), v.getCode(), v.getHumanReadableName())).toList();
42+
}
43+
44+
public StringEnumOptionData asEnumOptionData() {
45+
return new StringEnumOptionData(name(), getCode(), getHumanReadableName());
46+
}
47+
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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.reamortization;
20+
21+
import jakarta.persistence.Column;
22+
import jakarta.persistence.Entity;
23+
import jakarta.persistence.EnumType;
24+
import jakarta.persistence.Enumerated;
25+
import jakarta.persistence.JoinColumn;
26+
import jakarta.persistence.ManyToOne;
27+
import jakarta.persistence.OneToOne;
28+
import jakarta.persistence.Table;
29+
import lombok.AllArgsConstructor;
30+
import lombok.Getter;
31+
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
32+
import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom;
33+
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
34+
35+
@Entity
36+
@Table(name = "m_loan_reamortization_parameter")
37+
@AllArgsConstructor
38+
@Getter
39+
public class LoanReAmortizationParameter extends AbstractAuditableWithUTCDateTimeCustom<Long> {
40+
41+
@OneToOne
42+
@JoinColumn(name = "loan_transaction_id", nullable = false)
43+
private LoanTransaction loanTransaction;
44+
45+
@Enumerated(EnumType.STRING)
46+
@Column(name = "interest_handling_type")
47+
private LoanReAmortizationInterestHandlingType interestHandlingType;
48+
49+
@ManyToOne
50+
@JoinColumn(name = "reamortization_reason_code_value_id", nullable = true)
51+
private CodeValue reamortizationReason;
52+
53+
// for JPA, don't use
54+
protected LoanReAmortizationParameter() {}
55+
}

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/mapper/LoanTransactionMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ public interface LoanTransactionMapper {
3434
@Mapping(target = "writeOffReasonOptions", ignore = true)
3535
@Mapping(target = "chargeOffReasonOptions", ignore = true)
3636
@Mapping(target = "reAgeReasonOptions", ignore = true)
37+
@Mapping(target = "reAmortizationReasonOptions", ignore = true)
3738
@Mapping(target = "periodFrequencyOptions", ignore = true)
3839
@Mapping(target = "reAgeInterestHandlingOptions", ignore = true)
40+
@Mapping(target = "reAmortizationInterestHandlingOptions", ignore = true)
3941
@Mapping(target = "classificationOptions", ignore = true)
4042
@Mapping(target = "paymentTypeOptions", ignore = true)
4143
@Mapping(target = "overpaymentPortion", ignore = true)

fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,6 @@ org.springframework.data.domain.Page<LoanTransactionData> retrieveLoanTransactio
166166
Long getResolvedLoanTransactionId(Long transactionId, ExternalId externalTransactionId);
167167

168168
LoanTransactionData retrieveLoanReAgeTemplate(Long loanId);
169+
170+
LoanTransactionData retrieveLoanReAmortizationTemplate(Long loanId);
169171
}

0 commit comments

Comments
 (0)