FINERACT-2081: Rework Loan Account data

This commit is contained in:
Adam Saghy
2024-08-15 13:19:01 +02:00
parent 22b10d933b
commit 2a445a5862
11 changed files with 239 additions and 902 deletions
@@ -22,14 +22,10 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Collection;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.Data;
@Data
@AllArgsConstructor
@ToString
@Getter
@Setter
public final class CollectionData {
private BigDecimal availableDisbursementAmount;
@@ -18,108 +18,58 @@
*/
package org.apache.fineract.portfolio.loanaccount.data;
import java.math.BigDecimal;
import java.time.LocalDate;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* Immutable data object represent the important time-line events of a loan application and loan.
* Data object represent the important time-line events of a loan application and loan.
*/
@Getter
@RequiredArgsConstructor
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class LoanApplicationTimelineData {
private final LocalDate submittedOnDate;
private final String submittedByUsername;
private final String submittedByFirstname;
private final String submittedByLastname;
private final LocalDate rejectedOnDate;
private final String rejectedByUsername;
private final String rejectedByFirstname;
private final String rejectedByLastname;
private final LocalDate withdrawnOnDate;
private final String withdrawnByUsername;
private final String withdrawnByFirstname;
private final String withdrawnByLastname;
private final LocalDate approvedOnDate;
private final String approvedByUsername;
private final String approvedByFirstname;
private final String approvedByLastname;
private final LocalDate expectedDisbursementDate;
private final LocalDate actualDisbursementDate;
private final String disbursedByUsername;
private final String disbursedByFirstname;
private final String disbursedByLastname;
private final LocalDate closedOnDate;
private final String closedByUsername;
private final String closedByFirstname;
private final String closedByLastname;
private LocalDate submittedOnDate;
private String submittedByUsername;
private String submittedByFirstname;
private String submittedByLastname;
private LocalDate rejectedOnDate;
private String rejectedByUsername;
private String rejectedByFirstname;
private String rejectedByLastname;
private LocalDate withdrawnOnDate;
private String withdrawnByUsername;
private String withdrawnByFirstname;
private String withdrawnByLastname;
private LocalDate approvedOnDate;
private String approvedByUsername;
private String approvedByFirstname;
private String approvedByLastname;
private LocalDate expectedDisbursementDate;
private LocalDate actualDisbursementDate;
private String disbursedByUsername;
private String disbursedByFirstname;
private String disbursedByLastname;
private LocalDate closedOnDate;
private String closedByUsername;
private String closedByFirstname;
private String closedByLastname;
private final LocalDate actualMaturityDate;
private final LocalDate expectedMaturityDate;
private final LocalDate writeOffOnDate;
private final String writeOffByUsername;
private final String writeOffByFirstname;
private final String writeOffByLastname;
private LocalDate actualMaturityDate;
private LocalDate expectedMaturityDate;
private LocalDate writeOffOnDate;
private String writeOffByUsername;
private String writeOffByFirstname;
private String writeOffByLastname;
private final LocalDate chargedOffOnDate;
private final String chargedOffByUsername;
private final String chargedOffByFirstname;
private final String chargedOffByLastname;
public static LoanApplicationTimelineData templateDefault(final LocalDate expectedDisbursementDate) {
final LocalDate submittedOnDate = null;
final String submittedByUsername = null;
final String submittedByFirstname = null;
final String submittedByLastname = null;
final LocalDate rejectedOnDate = null;
final String rejectedByUsername = null;
final String rejectedByFirstname = null;
final String rejectedByLastname = null;
final LocalDate withdrawnOnDate = null;
final String withdrawnByUsername = null;
final String withdrawnByFirstname = null;
final String withdrawnByLastname = null;
final LocalDate approvedOnDate = null;
final String approvedByUsername = null;
final String approvedByFirstname = null;
final String approvedByLastname = null;
final LocalDate actualDisbursementDate = null;
final String disbursedByUsername = null;
final String disbursedByFirstname = null;
final String disbursedByLastname = null;
final LocalDate closedOnDate = null;
final String closedByUsername = null;
final String closedByFirstname = null;
final String closedByLastname = null;
final LocalDate expectedMaturityDate = null;
final LocalDate writeOffOnDate = null;
final String writeOffByUsername = null;
final String writeOffByFirstname = null;
final String writeOffByLastname = null;
final LocalDate chargedOffOnDate = null;
final String chargedOffByUsername = null;
final String chargedOffByFirstname = null;
final String chargedOffByLastname = null;
final LocalDate actualMaturityDate = null;
return new LoanApplicationTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname,
rejectedOnDate, rejectedByUsername, rejectedByFirstname, rejectedByLastname, withdrawnOnDate, withdrawnByUsername,
withdrawnByFirstname, withdrawnByLastname, approvedOnDate, approvedByUsername, approvedByFirstname, approvedByLastname,
expectedDisbursementDate, actualDisbursementDate, disbursedByUsername, disbursedByFirstname, disbursedByLastname,
closedOnDate, closedByUsername, closedByFirstname, closedByLastname, actualMaturityDate, expectedMaturityDate,
writeOffOnDate, writeOffByUsername, writeOffByFirstname, writeOffByLastname, chargedOffOnDate, chargedOffByUsername,
chargedOffByFirstname, chargedOffByLastname);
}
public RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData(final CurrencyData currency, final BigDecimal principal,
final BigDecimal approvedPrincipal, final BigDecimal inArrearsTolerance, final BigDecimal totalFeeChargesAtDisbursement) {
return new RepaymentScheduleRelatedLoanData(this.expectedDisbursementDate, this.actualDisbursementDate, currency, principal,
inArrearsTolerance, totalFeeChargesAtDisbursement);
}
private LocalDate chargedOffOnDate;
private String chargedOffByUsername;
private String chargedOffByFirstname;
private String chargedOffByLastname;
public LocalDate getDisbursementDate() {
LocalDate disbursementDate = this.expectedDisbursementDate;
@@ -18,31 +18,35 @@
*/
package org.apache.fineract.portfolio.loanaccount.data;
import lombok.Getter;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.portfolio.calendar.data.CalendarData;
@Getter
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class LoanInterestRecalculationData {
private final Long id;
private final Long loanId;
private final EnumOptionData interestRecalculationCompoundingType;
private final EnumOptionData rescheduleStrategyType;
private final CalendarData calendarData;
private final EnumOptionData recalculationRestFrequencyType;
private final Integer recalculationRestFrequencyInterval;
private final EnumOptionData recalculationRestFrequencyNthDay;
private final EnumOptionData recalculationRestFrequencyWeekday;
private final Integer recalculationRestFrequencyOnDay;
private final EnumOptionData recalculationCompoundingFrequencyType;
private final Integer recalculationCompoundingFrequencyInterval;
private final EnumOptionData recalculationCompoundingFrequencyNthDay;
private final EnumOptionData recalculationCompoundingFrequencyWeekday;
private final Integer recalculationCompoundingFrequencyOnDay;
private final Boolean isCompoundingToBePostedAsTransaction;
private final CalendarData compoundingCalendarData;
private final Boolean allowCompoundingOnEod;
private Long id;
private Long loanId;
private EnumOptionData interestRecalculationCompoundingType;
private EnumOptionData rescheduleStrategyType;
private CalendarData calendarData;
private EnumOptionData recalculationRestFrequencyType;
private Integer recalculationRestFrequencyInterval;
private EnumOptionData recalculationRestFrequencyNthDay;
private EnumOptionData recalculationRestFrequencyWeekday;
private Integer recalculationRestFrequencyOnDay;
private EnumOptionData recalculationCompoundingFrequencyType;
private Integer recalculationCompoundingFrequencyInterval;
private EnumOptionData recalculationCompoundingFrequencyNthDay;
private EnumOptionData recalculationCompoundingFrequencyWeekday;
private Integer recalculationCompoundingFrequencyOnDay;
private Boolean isCompoundingToBePostedAsTransaction;
private CalendarData compoundingCalendarData;
private Boolean allowCompoundingOnEod;
public LoanInterestRecalculationData(final Long id, final Long loanId, final EnumOptionData interestRecalculationCompoundingType,
final EnumOptionData rescheduleStrategyType, final CalendarData calendarData,
@@ -73,17 +77,8 @@ public class LoanInterestRecalculationData {
this.allowCompoundingOnEod = allowCompoundingOnEod;
}
public static LoanInterestRecalculationData withCalendarData(final LoanInterestRecalculationData recalculationData,
final CalendarData calendarData, CalendarData compoundingCalendarData) {
return new LoanInterestRecalculationData(recalculationData.id, recalculationData.loanId,
recalculationData.interestRecalculationCompoundingType, recalculationData.rescheduleStrategyType, calendarData,
recalculationData.recalculationRestFrequencyType, recalculationData.recalculationRestFrequencyInterval,
recalculationData.recalculationRestFrequencyNthDay, recalculationData.recalculationRestFrequencyWeekday,
recalculationData.recalculationRestFrequencyOnDay, compoundingCalendarData,
recalculationData.recalculationCompoundingFrequencyType, recalculationData.recalculationCompoundingFrequencyInterval,
recalculationData.recalculationCompoundingFrequencyNthDay, recalculationData.recalculationCompoundingFrequencyWeekday,
recalculationData.recalculationCompoundingFrequencyOnDay, recalculationData.isCompoundingToBePostedAsTransaction,
recalculationData.allowCompoundingOnEod);
public LoanInterestRecalculationData withCalendarData(final CalendarData calendarData, CalendarData compoundingCalendarData) {
return this.setCalendarData(calendarData).setCompoundingCalendarData(compoundingCalendarData);
}
}