FINERACT-2081: Rework Loan Account data
This commit is contained in:
+2
-6
@@ -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;
|
||||
|
||||
+44
-94
@@ -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;
|
||||
|
||||
+26
-31
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -147,7 +147,7 @@ public class GuarantorWorkbookPopulator extends AbstractWorkbookPopulator {
|
||||
dateCellStyle.setDataFormat(df);
|
||||
int rowIndex = 1;
|
||||
Row row;
|
||||
Collections.sort(loans, LoanAccountData.ClientNameComparator);
|
||||
loans.sort(LoanAccountData.LOAN_ACCOUNT_DATA_COMPARATOR_BY_CLIENT_NAME);
|
||||
for (LoanAccountData loan : loans) {
|
||||
if (addGuarantorSheet.getRow(rowIndex) == null) {
|
||||
row = addGuarantorSheet.createRow(rowIndex++);
|
||||
|
||||
+2
@@ -37,4 +37,6 @@ public interface GroupReadPlatformService {
|
||||
Collection<GroupGeneralData> retrieveGroupsForLookup(Long officeId);
|
||||
|
||||
GroupGeneralData retrieveGroupWithClosureReasons();
|
||||
|
||||
GroupGeneralData retrieveGroupAndMembersDetails(Long groupId);
|
||||
}
|
||||
|
||||
+21
@@ -43,10 +43,13 @@ import org.apache.fineract.organisation.office.data.OfficeData;
|
||||
import org.apache.fineract.organisation.office.service.OfficeReadPlatformService;
|
||||
import org.apache.fineract.organisation.staff.data.StaffData;
|
||||
import org.apache.fineract.organisation.staff.service.StaffReadPlatformService;
|
||||
import org.apache.fineract.portfolio.calendar.data.CalendarData;
|
||||
import org.apache.fineract.portfolio.client.data.ClientData;
|
||||
import org.apache.fineract.portfolio.client.service.ClientReadPlatformService;
|
||||
import org.apache.fineract.portfolio.group.api.GroupingTypesApiConstants;
|
||||
import org.apache.fineract.portfolio.group.data.CenterData;
|
||||
import org.apache.fineract.portfolio.group.data.GroupGeneralData;
|
||||
import org.apache.fineract.portfolio.group.data.GroupRoleData;
|
||||
import org.apache.fineract.portfolio.group.domain.GroupTypes;
|
||||
import org.apache.fineract.portfolio.group.exception.GroupNotFoundException;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
@@ -74,6 +77,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
||||
private final DatabaseSpecificSQLGenerator sqlGenerator;
|
||||
private final PaginationParametersDataValidator paginationParametersDataValidator;
|
||||
private final ColumnValidator columnValidator;
|
||||
private final ClientReadPlatformService clientReadPlatformService;
|
||||
|
||||
@Override
|
||||
public GroupGeneralData retrieveTemplate(final Long officeId, final boolean isCenterGroup, final boolean staffInSelectedOfficeOnly) {
|
||||
@@ -246,6 +250,23 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
|
||||
return GroupGeneralData.withClosureReasons(closureReasons);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupGeneralData retrieveGroupAndMembersDetails(Long groupId) {
|
||||
GroupGeneralData groupAccount = retrieveOne(groupId);
|
||||
|
||||
// get group associations
|
||||
final Collection<ClientData> membersOfGroup = clientReadPlatformService.retrieveActiveClientMembersOfGroup(groupId);
|
||||
if (!CollectionUtils.isEmpty(membersOfGroup)) {
|
||||
final Collection<ClientData> activeClientMembers = null;
|
||||
final Collection<CalendarData> calendarsData = null;
|
||||
final CalendarData collectionMeetingCalendar = null;
|
||||
final Collection<GroupRoleData> groupRoles = null;
|
||||
groupAccount = GroupGeneralData.withAssocations(groupAccount, membersOfGroup, activeClientMembers, groupRoles, calendarsData,
|
||||
collectionMeetingCalendar);
|
||||
}
|
||||
return groupAccount;
|
||||
}
|
||||
|
||||
private static final class GroupLookupDataMapper implements RowMapper<GroupGeneralData> {
|
||||
|
||||
public static final String G_ID_AS_ID_G_ACCOUNT_NO_AS_ACCOUNT_NO_G_DISPLAY_NAME_AS_DISPLAY_NAME_FROM_M_GROUP_G_WHERE_G_LEVEL_ID_2 = "g.id as id, g.account_no as accountNo, g.display_name as displayName from m_group g where g.level_id = 2 ";
|
||||
|
||||
+3
-2
@@ -114,10 +114,11 @@ public class GroupConfiguration {
|
||||
OfficeReadPlatformService officeReadPlatformService, StaffReadPlatformService staffReadPlatformService,
|
||||
CenterReadPlatformService centerReadPlatformService, CodeValueReadPlatformService codeValueReadPlatformService,
|
||||
PaginationHelper paginationHelper, DatabaseSpecificSQLGenerator sqlGenerator,
|
||||
PaginationParametersDataValidator paginationParametersDataValidator, ColumnValidator columnValidator) {
|
||||
PaginationParametersDataValidator paginationParametersDataValidator, ColumnValidator columnValidator,
|
||||
ClientReadPlatformService clientReadPlatformService) {
|
||||
return new GroupReadPlatformServiceImpl(jdbcTemplate, context, officeReadPlatformService, staffReadPlatformService,
|
||||
centerReadPlatformService, codeValueReadPlatformService, paginationHelper, sqlGenerator, paginationParametersDataValidator,
|
||||
columnValidator);
|
||||
columnValidator, clientReadPlatformService);
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
+58
-65
@@ -47,6 +47,7 @@ import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -78,6 +79,7 @@ import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSeria
|
||||
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
import org.apache.fineract.infrastructure.core.service.CommandParameterUtil;
|
||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||
import org.apache.fineract.infrastructure.core.service.ExternalIdFactory;
|
||||
import org.apache.fineract.infrastructure.core.service.Page;
|
||||
import org.apache.fineract.infrastructure.core.service.SearchParameters;
|
||||
@@ -104,6 +106,7 @@ import org.apache.fineract.portfolio.charge.data.ChargeData;
|
||||
import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
|
||||
import org.apache.fineract.portfolio.charge.service.ChargeReadPlatformService;
|
||||
import org.apache.fineract.portfolio.client.data.ClientData;
|
||||
import org.apache.fineract.portfolio.client.service.ClientReadPlatformService;
|
||||
import org.apache.fineract.portfolio.collateralmanagement.data.LoanCollateralResponseData;
|
||||
import org.apache.fineract.portfolio.collateralmanagement.service.LoanCollateralManagementReadPlatformService;
|
||||
import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType;
|
||||
@@ -283,6 +286,7 @@ public class LoansApiResource {
|
||||
private final DelinquencyReadPlatformService delinquencyReadPlatformService;
|
||||
private final SqlValidator sqlValidator;
|
||||
private final LoanSummaryBalancesRepository loanSummaryBalancesRepository;
|
||||
private final ClientReadPlatformService clientReadPlatformService;
|
||||
|
||||
/*
|
||||
* This template API is used for loan approval, ideally this should be invoked on loan that are pending for
|
||||
@@ -326,10 +330,11 @@ public class LoansApiResource {
|
||||
final Collection<LoanProductData> productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup(onlyActive);
|
||||
|
||||
// options
|
||||
Collection<StaffData> allowedLoanOfficers = null;
|
||||
Collection<CodeValueData> loanCollateralOptions = null;
|
||||
Collection<StaffData> allowedLoanOfficers;
|
||||
Collection<CodeValueData> loanCollateralOptions;
|
||||
Collection<CalendarData> calendarOptions = null;
|
||||
LoanAccountData newLoanAccount = null;
|
||||
LoanAccountData newLoanAccount = new LoanAccountData();
|
||||
LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
Long officeId = null;
|
||||
Collection<PortfolioAccountData> accountLinkingOptions = null;
|
||||
boolean isRatesEnabled = this.configurationDomainService.isSubRatesEnabled();
|
||||
@@ -343,66 +348,54 @@ public class LoansApiResource {
|
||||
throw new LoanTemplateTypeRequiredException(errorMsg);
|
||||
} else if (templateType.equals("collateral")) {
|
||||
loanCollateralOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanCollateral");
|
||||
newLoanAccount = LoanAccountData.collateralTemplate(loanCollateralOptions);
|
||||
newLoanAccount = newLoanAccount.setLoanCollateralOptions(loanCollateralOptions);
|
||||
} else {
|
||||
// for JLG loan both client and group details are required
|
||||
if (templateType.equals("individual") || templateType.equals("jlg")) {
|
||||
|
||||
if (clientId == null) {
|
||||
newLoanAccount = newLoanAccount == null ? LoanAccountData.collateralTemplate(null) : newLoanAccount;
|
||||
} else {
|
||||
final LoanAccountData loanAccountClientDetails = this.loanReadPlatformService.retrieveClientDetailsTemplate(clientId);
|
||||
|
||||
officeId = loanAccountClientDetails.getClientOfficeId();
|
||||
|
||||
if (officeId == null && loanAccountClientDetails.getGroup() != null) {
|
||||
officeId = loanAccountClientDetails.getGroup().getOfficeId();
|
||||
switch (templateType) {
|
||||
case "individual", "jlg" -> {
|
||||
if (clientId != null) {
|
||||
final ClientData clientData = this.clientReadPlatformService.retrieveOne(clientId);
|
||||
officeId = clientData.getOfficeId();
|
||||
newLoanAccount = newLoanAccount.withClientData(clientData).withExpectedDisbursementDate(expectedDisbursementDate);
|
||||
}
|
||||
// if it's JLG loan add group details
|
||||
if (templateType.equals("jlg")) {
|
||||
final GroupGeneralData groupData = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
newLoanAccount = newLoanAccount.setGroup(groupData);
|
||||
calendarOptions = this.loanReadPlatformService.retrieveCalendars(groupId);
|
||||
}
|
||||
newLoanAccount = newLoanAccount == null ? loanAccountClientDetails
|
||||
: LoanAccountData.populateClientDefaults(newLoanAccount, loanAccountClientDetails);
|
||||
}
|
||||
|
||||
// if it's JLG loan add group details
|
||||
if (templateType.equals("jlg")) {
|
||||
final GroupGeneralData group = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
newLoanAccount = LoanAccountData.associateGroup(newLoanAccount, group);
|
||||
case "group" -> {
|
||||
final GroupGeneralData groupData = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
officeId = groupData.getOfficeId();
|
||||
calendarOptions = this.loanReadPlatformService.retrieveCalendars(groupId);
|
||||
newLoanAccount = newLoanAccount.setGroup(groupData).withExpectedDisbursementDate(expectedDisbursementDate);
|
||||
accountLinkingOptions = getAccountLinkingOptions(newLoanAccount, clientId, groupId);
|
||||
}
|
||||
|
||||
} else if (templateType.equals("group")) {
|
||||
|
||||
final LoanAccountData loanAccountGroupData = this.loanReadPlatformService.retrieveGroupDetailsTemplate(groupId);
|
||||
officeId = loanAccountGroupData.getGroup() != null ? loanAccountGroupData.getGroup().getOfficeId() : null;
|
||||
calendarOptions = this.loanReadPlatformService.retrieveCalendars(groupId);
|
||||
newLoanAccount = newLoanAccount == null ? loanAccountGroupData
|
||||
: LoanAccountData.populateGroupDefaults(newLoanAccount, loanAccountGroupData);
|
||||
accountLinkingOptions = getAccountLinkingOptions(newLoanAccount, clientId, groupId);
|
||||
|
||||
} else if (templateType.equals("jlgbulk")) {
|
||||
// get group details along with members in that group
|
||||
final LoanAccountData loanAccountGroupData = this.loanReadPlatformService.retrieveGroupAndMembersDetailsTemplate(groupId);
|
||||
officeId = loanAccountGroupData.getGroup() != null ? loanAccountGroupData.getGroup().getOfficeId() : null;
|
||||
calendarOptions = this.loanReadPlatformService.retrieveCalendars(groupId);
|
||||
newLoanAccount = newLoanAccount == null ? loanAccountGroupData
|
||||
: LoanAccountData.populateGroupDefaults(newLoanAccount, loanAccountGroupData);
|
||||
if (productId != null) {
|
||||
Map<Long, Integer> memberLoanCycle = new HashMap<>();
|
||||
Collection<ClientData> members = loanAccountGroupData.getGroup().clientMembers();
|
||||
accountLinkingOptions = new ArrayList<>();
|
||||
if (members != null) {
|
||||
for (ClientData clientData : members) {
|
||||
Integer loanCounter = this.loanReadPlatformService.retriveLoanCounter(clientData.getId(), productId);
|
||||
memberLoanCycle.put(clientData.getId(), loanCounter);
|
||||
accountLinkingOptions.addAll(getAccountLinkingOptions(newLoanAccount, clientData.getId(), groupId));
|
||||
case "jlgbulk" -> {
|
||||
// get group details along with members in that group
|
||||
final GroupGeneralData groupData = this.groupReadPlatformService.retrieveGroupAndMembersDetails(groupId);
|
||||
officeId = groupData.getOfficeId();
|
||||
calendarOptions = this.loanReadPlatformService.retrieveCalendars(groupId);
|
||||
newLoanAccount = newLoanAccount.setGroup(groupData).withExpectedDisbursementDate(expectedDisbursementDate);
|
||||
if (productId != null) {
|
||||
Map<Long, Integer> memberLoanCycle = new HashMap<>();
|
||||
Collection<ClientData> members = groupData.clientMembers();
|
||||
accountLinkingOptions = new ArrayList<>();
|
||||
if (members != null) {
|
||||
for (ClientData clientData : members) {
|
||||
Integer loanCounter = this.loanReadPlatformService.retriveLoanCounter(clientData.getId(), productId);
|
||||
memberLoanCycle.put(clientData.getId(), loanCounter);
|
||||
accountLinkingOptions.addAll(getAccountLinkingOptions(newLoanAccount, clientData.getId(), groupId));
|
||||
}
|
||||
}
|
||||
newLoanAccount = newLoanAccount.associateMemberVariations(memberLoanCycle);
|
||||
}
|
||||
|
||||
newLoanAccount = LoanAccountData.associateMemberVariations(newLoanAccount, memberLoanCycle);
|
||||
}
|
||||
|
||||
} else {
|
||||
final String errorMsg = "Loan template type '" + templateType + "' is not supported";
|
||||
throw new NotSupportedLoanTemplateTypeException(errorMsg, templateType);
|
||||
default -> {
|
||||
final String errorMsg = "Loan template type '" + templateType + "' is not supported";
|
||||
throw new NotSupportedLoanTemplateTypeException(errorMsg, templateType);
|
||||
}
|
||||
}
|
||||
|
||||
allowedLoanOfficers = this.loanReadPlatformService.retrieveAllowedLoanOfficers(officeId, staffInSelectedOfficeOnly);
|
||||
@@ -413,7 +406,7 @@ public class LoansApiResource {
|
||||
|
||||
// add product options, allowed loan officers and calendar options
|
||||
// (calendar options will be null in individual loan)
|
||||
newLoanAccount = LoanAccountData.associationsAndTemplate(newLoanAccount, productOptions, allowedLoanOfficers, calendarOptions,
|
||||
newLoanAccount = newLoanAccount.associationsAndTemplate(productOptions, allowedLoanOfficers, calendarOptions,
|
||||
accountLinkingOptions, isRatesEnabled);
|
||||
}
|
||||
final List<DatatableData> datatableTemplates = this.entityDatatableChecksReadService.retrieveTemplates(StatusEnum.CREATE.getValue(),
|
||||
@@ -880,8 +873,7 @@ public class LoansApiResource {
|
||||
if (!CollectionUtils.isEmpty(interestRecalculationCompoundingCalendarDatas)) {
|
||||
compoundingCalendarData = interestRecalculationCompoundingCalendarDatas.iterator().next();
|
||||
}
|
||||
loanBasicDetails = LoanAccountData.withInterestRecalculationCalendarData(loanBasicDetails, calendarData,
|
||||
compoundingCalendarData);
|
||||
loanBasicDetails = loanBasicDetails.withInterestRecalculationCalendarData(calendarData, compoundingCalendarData);
|
||||
}
|
||||
if (loanBasicDetails.getRepaymentFrequencyType() != null
|
||||
&& loanBasicDetails.getRepaymentFrequencyType().getId().intValue() == PeriodFrequencyType.MONTHS.getValue()) {
|
||||
@@ -892,7 +884,7 @@ public class LoansApiResource {
|
||||
calendarData = loanCalendarDatas.iterator().next();
|
||||
}
|
||||
if (calendarData != null) {
|
||||
loanBasicDetails = LoanAccountData.withLoanCalendarData(loanBasicDetails, calendarData);
|
||||
loanBasicDetails = loanBasicDetails.setMeeting(calendarData);
|
||||
}
|
||||
}
|
||||
Collection<InterestRatePeriodData> interestRatesPeriods = this.loanReadPlatformService
|
||||
@@ -952,10 +944,11 @@ public class LoansApiResource {
|
||||
|
||||
if (associationParameters.contains(DataTableApiConstant.repaymentScheduleAssociateParamName)) {
|
||||
mandatoryResponseParameters.add(DataTableApiConstant.repaymentScheduleAssociateParamName);
|
||||
final RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData = loanBasicDetails.getTimeline()
|
||||
.repaymentScheduleRelatedData(loanBasicDetails.getCurrency(), loanBasicDetails.getPrincipal(),
|
||||
loanBasicDetails.getApprovedPrincipal(), loanBasicDetails.getInArrearsTolerance(),
|
||||
loanBasicDetails.getFeeChargesAtDisbursementCharged());
|
||||
final RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData = new RepaymentScheduleRelatedLoanData(
|
||||
loanBasicDetails.getTimeline().getExpectedDisbursementDate(),
|
||||
loanBasicDetails.getTimeline().getActualDisbursementDate(), loanBasicDetails.getCurrency(),
|
||||
loanBasicDetails.getPrincipal(), loanBasicDetails.getInArrearsTolerance(),
|
||||
loanBasicDetails.getFeeChargesAtDisbursementCharged());
|
||||
repaymentSchedule = this.loanReadPlatformService.retrieveRepaymentSchedule(resolvedLoanId, repaymentScheduleRelatedData,
|
||||
disbursementData, loanBasicDetails.isInterestRecalculationEnabled(),
|
||||
LoanScheduleType.fromEnumOptionData(loanBasicDetails.getLoanScheduleType()));
|
||||
@@ -973,7 +966,7 @@ public class LoansApiResource {
|
||||
LoanScheduleData loanScheduleData = this.loanScheduleHistoryReadPlatformService.retrieveRepaymentArchiveSchedule(
|
||||
resolvedLoanId, repaymentScheduleRelatedData, disbursementData,
|
||||
LoanScheduleType.fromEnumOptionData(loanBasicDetails.getLoanScheduleType()));
|
||||
loanBasicDetails = LoanAccountData.withOriginalSchedule(loanBasicDetails, loanScheduleData);
|
||||
loanBasicDetails = loanBasicDetails.setOriginalSchedule(loanScheduleData);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1118,8 +1111,8 @@ public class LoansApiResource {
|
||||
LoanApiConstants.LOAN_SUMMARY_TRANSACTION_TYPES)));
|
||||
}
|
||||
|
||||
final LoanAccountData loanAccount = LoanAccountData.associationsAndTemplate(loanBasicDetails, repaymentSchedule, loanRepayments,
|
||||
charges, loanCollateralManagementData, guarantors, meeting, productOptions, loanTermFrequencyTypeOptions,
|
||||
final LoanAccountData loanAccount = loanBasicDetails.associationsAndTemplate(repaymentSchedule, loanRepayments, charges,
|
||||
loanCollateralManagementData, guarantors, meeting, productOptions, loanTermFrequencyTypeOptions,
|
||||
repaymentFrequencyTypeOptions, repaymentFrequencyNthDayTypeOptions, repaymentFrequencyDayOfWeekTypeOptions,
|
||||
repaymentStrategyOptions, interestRateFrequencyTypeOptions, amortizationTypeOptions, interestTypeOptions,
|
||||
interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, chargeTemplate, allowedLoanOfficers, loanPurposeOptions,
|
||||
|
||||
+52
-641
@@ -42,6 +42,7 @@ import org.apache.fineract.portfolio.accountdetails.data.LoanAccountSummaryData;
|
||||
import org.apache.fineract.portfolio.calendar.data.CalendarData;
|
||||
import org.apache.fineract.portfolio.charge.data.ChargeData;
|
||||
import org.apache.fineract.portfolio.charge.util.ConvertChargeDataToSpecificChargeData;
|
||||
import org.apache.fineract.portfolio.client.data.ClientData;
|
||||
import org.apache.fineract.portfolio.delinquency.data.DelinquencyRangeData;
|
||||
import org.apache.fineract.portfolio.floatingrates.data.InterestRatePeriodData;
|
||||
import org.apache.fineract.portfolio.fund.data.FundData;
|
||||
@@ -230,7 +231,7 @@ public class LoanAccountData {
|
||||
private Integer minimumGap;
|
||||
private Integer maximumGap;
|
||||
|
||||
private List<DatatableData> datatables = null;
|
||||
private List<DatatableData> datatables;
|
||||
// TODO: avoid prefix "is"
|
||||
private Boolean isEqualAmortization;
|
||||
private BigDecimal fixedPrincipalPercentagePerInstallment;
|
||||
@@ -316,176 +317,23 @@ public class LoanAccountData {
|
||||
.setFixedLength(fixedLength);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to produce a {@link LoanAccountData} with only collateral options for now.
|
||||
*/
|
||||
public static LoanAccountData collateralTemplate(final Collection<CodeValueData> loanCollateralOptions) {
|
||||
|
||||
return new LoanAccountData().setIsVariableInstallmentsAllowed(false).setDelinquent(CollectionData.template())
|
||||
.setLoanCollateralOptions(loanCollateralOptions);
|
||||
public LoanAccountData withClientData(final ClientData clientData) {
|
||||
return this.setClientId(clientData.getId()) //
|
||||
.setClientAccountNo(clientData.getAccountNo()) //
|
||||
.setClientName(clientData.getDisplayName()) //
|
||||
.setClientOfficeId(clientData.getOfficeId()) //
|
||||
.setClientExternalId(clientData.getExternalId()); //
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to produce a {@link LoanAccountData} with only client information defaulted.
|
||||
*/
|
||||
public static LoanAccountData clientDefaults(final Long clientId, final String clientAccountNo, final String clientName,
|
||||
final Long clientOfficeId, final ExternalId clientExternalId, final LocalDate expectedDisbursementDate) {
|
||||
|
||||
return new LoanAccountData().setTimeline(LoanApplicationTimelineData.templateDefault(expectedDisbursementDate))
|
||||
.setIsVariableInstallmentsAllowed(false).setDelinquent(CollectionData.template()).setClientId(clientId)
|
||||
.setClientAccountNo(clientAccountNo).setClientName(clientName).setClientOfficeId(clientOfficeId)
|
||||
.setClientExternalId(clientExternalId).setExpectedDisbursementDate(expectedDisbursementDate);
|
||||
public LoanAccountData withExpectedDisbursementDate(final LocalDate expectedDisbursementDate) {
|
||||
if (getTimeline() == null) {
|
||||
setTimeline(new LoanApplicationTimelineData());
|
||||
}
|
||||
this.getTimeline().setExpectedDisbursementDate(expectedDisbursementDate);
|
||||
return this.setExpectedDisbursementDate(expectedDisbursementDate);
|
||||
}
|
||||
|
||||
public static LoanAccountData populateClientDefaults(final LoanAccountData acc, final LoanAccountData clientAcc) {
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(clientAcc.clientId).setClientAccountNo(clientAcc.clientAccountNo).setClientName(clientAcc.clientName)
|
||||
.setClientOfficeId(clientAcc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(clientAcc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setLoanScheduleType(acc.loanScheduleType).setLoanScheduleProcessingType(acc.loanScheduleProcessingType)
|
||||
.setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to produce a {@link LoanAccountData} with only group information defaulted.
|
||||
*/
|
||||
public static LoanAccountData groupDefaults(final GroupGeneralData group, final LocalDate expectedDisbursementDate) {
|
||||
|
||||
return new LoanAccountData().setTimeline(LoanApplicationTimelineData.templateDefault(expectedDisbursementDate))
|
||||
.setIsVariableInstallmentsAllowed(false).setDelinquent(CollectionData.template()).setGroup(group)
|
||||
.setExpectedDisbursementDate(expectedDisbursementDate);
|
||||
}
|
||||
|
||||
public static LoanAccountData populateGroupDefaults(final LoanAccountData acc, final LoanAccountData groupAcc) {
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(groupAcc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(groupAcc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setLoanScheduleType(acc.loanScheduleType).setLoanScheduleProcessingType(acc.loanScheduleProcessingType)
|
||||
.setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static LoanAccountData loanProductWithTemplateDefaults(final LoanProductData product,
|
||||
final Collection<EnumOptionData> termFrequencyTypeOptions, final Collection<EnumOptionData> repaymentFrequencyTypeOptions,
|
||||
final Collection<EnumOptionData> repaymentFrequencyNthDayTypeOptions,
|
||||
final Collection<EnumOptionData> repaymentFrequencyDayOfWeekTypeOptions,
|
||||
final Collection<TransactionProcessingStrategyData> repaymentStrategyOptions,
|
||||
final Collection<EnumOptionData> interestRateFrequencyTypeOptions, final Collection<EnumOptionData> amortizationTypeOptions,
|
||||
final Collection<EnumOptionData> interestTypeOptions, final Collection<EnumOptionData> interestCalculationPeriodTypeOptions,
|
||||
final Collection<FundData> fundOptions, final Collection<ChargeData> chargeOptions,
|
||||
final Collection<CodeValueData> loanPurposeOptions, final Collection<CodeValueData> loanCollateralOptions,
|
||||
final Integer loanCycleNumber, final Collection<LoanAccountSummaryData> clientActiveLoanOptions,
|
||||
final List<EnumOptionData> loanScheduleTypeOptions, final List<EnumOptionData> loanScheduleProcessingTypeOptions) {
|
||||
public LoanAccountData withProductData(final LoanProductData product, final Integer loanCycleNumber) {
|
||||
|
||||
final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType();
|
||||
|
||||
@@ -538,8 +386,7 @@ public class LoanAccountData {
|
||||
numberOfRepayments = product.getNumberOfRepayments();
|
||||
}
|
||||
|
||||
return new LoanAccountData().setProductId(product.getId()).setLoanProductName(product.getName())
|
||||
.setLoanProductDescription(product.getDescription())
|
||||
return this.setProductId(product.getId()).setLoanProductName(product.getName()).setLoanProductDescription(product.getDescription())
|
||||
.setLoanProductLinkedToFloatingRate(product.isLinkedToFloatingInterestRates()).setFundId(product.getFundId())
|
||||
.setFundName(product.getFundName()).setCurrency(product.getCurrency()).setProposedPrincipal(proposedPrincipal)
|
||||
.setPrincipal(principal).setApprovedPrincipal(principal).setNetDisbursalAmount(netDisbursalAmount)
|
||||
@@ -557,15 +404,7 @@ public class LoanAccountData {
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(product.getRecurringMoratoriumOnPrincipalPeriods())
|
||||
.setGraceOnInterestPayment(product.getGraceOnInterestPayment())
|
||||
.setGraceOnInterestCharged(product.getGraceOnInterestCharged()).setCharges(charges)
|
||||
.setTermFrequencyTypeOptions(termFrequencyTypeOptions).setRepaymentFrequencyTypeOptions(repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(repaymentFrequencyDayOfWeekTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(repaymentFrequencyNthDayTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(repaymentStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(interestRateFrequencyTypeOptions).setAmortizationTypeOptions(amortizationTypeOptions)
|
||||
.setInterestTypeOptions(interestTypeOptions).setInterestCalculationPeriodTypeOptions(interestCalculationPeriodTypeOptions)
|
||||
.setFundOptions(fundOptions).setChargeOptions(chargeOptions).setLoanPurposeOptions(loanPurposeOptions)
|
||||
.setLoanCollateralOptions(loanCollateralOptions).setMultiDisburseLoan(product.getMultiDisburseLoan())
|
||||
.setCanDefineInstallmentAmount(product.isCanDefineInstallmentAmount())
|
||||
.setMultiDisburseLoan(product.getMultiDisburseLoan()).setCanDefineInstallmentAmount(product.isCanDefineInstallmentAmount())
|
||||
.setMaxOutstandingLoanBalance(product.getOutstandingLoanBalance()).setProduct(product)
|
||||
.setGraceOnArrearsAgeing(product.getGraceOnArrearsAgeing()).setOverdueCharges(product.overdueFeeCharges())
|
||||
.setDaysInMonthType(product.getDaysInMonthType()).setDaysInYearType(product.getDaysInYearType())
|
||||
@@ -573,79 +412,10 @@ public class LoanAccountData {
|
||||
.setInterestRecalculationData(product.toLoanInterestRecalculationData())
|
||||
.setIsVariableInstallmentsAllowed(product.isAllowVariableInstallments()).setMinimumGap(product.getMinimumGap())
|
||||
.setMaximumGap(product.getMaximumGap()).setTopup(product.isCanUseForTopup())
|
||||
.setClientActiveLoanOptions(clientActiveLoanOptions).setIsEqualAmortization(product.isEqualAmortization())
|
||||
.setIsEqualAmortization(product.isEqualAmortization())
|
||||
.setFixedPrincipalPercentagePerInstallment(product.getFixedPrincipalPercentagePerInstallment())
|
||||
.setDelinquent(CollectionData.template()).setDisallowExpectedDisbursements(product.getDisallowExpectedDisbursements())
|
||||
.setLoanScheduleType(product.getLoanScheduleType()).setLoanScheduleProcessingType(product.getLoanScheduleProcessingType())
|
||||
.setLoanScheduleTypeOptions(loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static LoanAccountData populateLoanProductDefaults(final LoanAccountData acc, final LoanProductData product) {
|
||||
|
||||
final Integer termFrequency = product.getNumberOfRepayments() * product.getRepaymentEvery();
|
||||
final EnumOptionData termPeriodFrequencyType = product.getRepaymentFrequencyType();
|
||||
|
||||
final Collection<LoanChargeData> charges = new ArrayList<LoanChargeData>();
|
||||
for (final ChargeData charge : product.charges()) {
|
||||
charges.add(ConvertChargeDataToSpecificChargeData.toLoanChargeData(charge));
|
||||
}
|
||||
|
||||
BigDecimal netDisbursalAmount = product.getPrincipal();
|
||||
if (!charges.isEmpty()) {
|
||||
for (LoanChargeData charge : charges) {
|
||||
netDisbursalAmount = netDisbursalAmount.subtract(charge.getAmount());
|
||||
}
|
||||
}
|
||||
final CollectionData delinquent = CollectionData.template();
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setId(product.getId()).setLoanProductName(product.getName())
|
||||
.setLoanProductDescription(product.getDescription())
|
||||
.setLoanProductLinkedToFloatingRate(product.isLinkedToFloatingInterestRates()).setFundId(product.getFundId())
|
||||
.setFundName(product.getFundName()).setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName)
|
||||
.setLoanOfficerId(acc.loanOfficerId).setLoanOfficerName(acc.loanOfficerName).setCurrency(product.getCurrency())
|
||||
.setPrincipal(product.getPrincipal()).setPrincipal(product.getPrincipal()).setPrincipal(product.getPrincipal())
|
||||
.setNetDisbursalAmount(netDisbursalAmount).setTotalOverpaid(acc.totalOverpaid)
|
||||
.setInArrearsTolerance(product.getInArrearsTolerance()).setTermFrequency(termFrequency)
|
||||
.setTermPeriodFrequencyType(termPeriodFrequencyType).setNumberOfRepayments(product.getNumberOfRepayments())
|
||||
.setRepaymentEvery(product.getRepaymentEvery()).setRepaymentFrequencyType(product.getRepaymentFrequencyType())
|
||||
.setTransactionProcessingStrategyCode(product.getTransactionProcessingStrategyCode())
|
||||
.setTransactionProcessingStrategyName(product.getTransactionProcessingStrategyName())
|
||||
.setAmortizationType(product.getAmortizationType()).setInterestRatePerPeriod(product.getInterestRatePerPeriod())
|
||||
.setInterestRateFrequencyType(product.getInterestRateFrequencyType()).setAnnualInterestRate(product.getAnnualInterestRate())
|
||||
.setInterestType(product.getInterestType()).setFloatingInterestRate(product.isFloatingInterestRateCalculationAllowed())
|
||||
.setInterestRateDifferential(product.getDefaultDifferentialLendingRate())
|
||||
.setInterestCalculationPeriodType(product.getInterestCalculationPeriodType())
|
||||
.setAllowPartialPeriodInterestCalculation(product.isAllowPartialPeriodInterestCalculation())
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate)
|
||||
.setGraceOnPrincipalPayment(product.getGraceOnPrincipalPayment())
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(product.getRecurringMoratoriumOnPrincipalPeriods())
|
||||
.setGraceOnInterestPayment(product.getGraceOnInterestPayment())
|
||||
.setGraceOnInterestCharged(product.getGraceOnInterestCharged()).setInterestChargedFromDate(acc.interestChargedFromDate)
|
||||
.setTimeline(acc.timeline).setSummary(acc.summary).setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged)
|
||||
.setCharges(charges).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting).setLoanCounter(acc.loanCounter)
|
||||
.setLoanProductCounter(acc.loanProductCounter).setAccountLinkingOptions(acc.accountLinkingOptions)
|
||||
.setLinkedAccount(acc.linkedAccount).setDisbursementDetails(acc.disbursementDetails)
|
||||
.setMultiDisburseLoan(product.getMultiDisburseLoan()).setCanDefineInstallmentAmount(product.isCanDefineInstallmentAmount())
|
||||
.setFixedEmiAmount(acc.fixedEmiAmount).setMaxOutstandingLoanBalance(product.getOutstandingLoanBalance())
|
||||
.setEmiAmountVariations(acc.emiAmountVariations).setMemberVariations(acc.memberVariations).setProduct(product)
|
||||
.setInArrears(acc.inArrears).setGraceOnArrearsAgeing(product.getGraceOnArrearsAgeing())
|
||||
.setOverdueCharges(product.overdueFeeCharges()).setIsNPA(acc.isNPA).setDaysInMonthType(product.getDaysInMonthType())
|
||||
.setDaysInYearType(product.getDaysInYearType()).setInterestRecalculationEnabled(product.isInterestRecalculationEnabled())
|
||||
.setInterestRecalculationData(product.toLoanInterestRecalculationData()).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(product.isAllowVariableInstallments())
|
||||
.setMinimumGap(product.getMinimumGap()).setMaximumGap(product.getMaximumGap()).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(product.isEqualAmortization()).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(product.getFixedPrincipalPercentagePerInstallment()).setDelinquent(delinquent)
|
||||
.setDisallowExpectedDisbursements(product.getDisallowExpectedDisbursements()).setFraud(acc.fraud)
|
||||
.setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff).setLoanScheduleType(acc.getLoanScheduleType())
|
||||
.setLoanScheduleProcessingType(acc.getLoanScheduleProcessingType()).setFixedLength(product.getFixedLength());
|
||||
.setLoanScheduleType(product.getLoanScheduleType()).setLoanScheduleProcessingType(product.getLoanScheduleProcessingType());
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -732,7 +502,7 @@ public class LoanAccountData {
|
||||
/*
|
||||
* Used to combine the associations and template data on top of exist loan account data
|
||||
*/
|
||||
public static LoanAccountData associationsAndTemplate(final LoanAccountData acc, final LoanScheduleData repaymentSchedule,
|
||||
public LoanAccountData associationsAndTemplate(final LoanScheduleData repaymentSchedule,
|
||||
final Collection<LoanTransactionData> transactions, final Collection<LoanChargeData> charges,
|
||||
final Collection<LoanCollateralManagementData> collateral, final Collection<GuarantorData> guarantors,
|
||||
final CalendarData calendarData, final Collection<LoanProductData> productOptions,
|
||||
@@ -755,34 +525,8 @@ public class LoanAccountData {
|
||||
|
||||
// TODO: why are these variables 'calendarData', 'chargeTemplate' never used (see original private constructor)
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType).setFixedLength(acc.fixedLength)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(repaymentSchedule)
|
||||
.setTransactions(transactions).setCharges(charges).setCollateral(collateral).setGuarantors(guarantors)
|
||||
.setProductOptions(productOptions).setTermFrequencyTypeOptions(termFrequencyTypeOptions)
|
||||
return this.setRepaymentSchedule(repaymentSchedule).setTransactions(transactions).setCharges(charges).setCollateral(collateral)
|
||||
.setGuarantors(guarantors).setProductOptions(productOptions).setTermFrequencyTypeOptions(termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(repaymentFrequencyDayOfWeekTypeOptions)
|
||||
@@ -792,128 +536,38 @@ public class LoanAccountData {
|
||||
.setFundOptions(fundOptions).setChargeOptions(chargeOptions).setLoanOfficerOptions(loanOfficerOptions)
|
||||
.setLoanPurposeOptions(loanPurposeOptions).setLoanCollateralOptions(loanCollateralOptions)
|
||||
// .setMeeting(calendarData)
|
||||
.setCalendarOptions(calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(notes)
|
||||
.setAccountLinkingOptions(accountLinkingOptions).setLinkedAccount(linkedAccount).setDisbursementDetails(disbursementDetails)
|
||||
.setEmiAmountVariations(emiAmountVariations).setOverdueCharges(overdueCharges).setPaidInAdvance(paidInAdvance)
|
||||
.setInterestRatesPeriods(interestRatesPeriods).setClientActiveLoanOptions(clientActiveLoanOptions).setRates(rates)
|
||||
.setIsRatesEnabled(isRatesEnabled).setDelinquent(delinquent).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setMemberVariations(acc.memberVariations)
|
||||
.setProduct(acc.product).setInArrears(acc.inArrears).setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement)
|
||||
.setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed).setMinimumGap(acc.minimumGap)
|
||||
.setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus).setCanUseForTopup(acc.canUseForTopup).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setLastClosedBusinessDate(acc.getLastClosedBusinessDate()).setOverpaidOnDate(acc.overpaidOnDate)
|
||||
.setChargedOff(acc.chargedOff).setEnableDownPayment(acc.enableDownPayment)
|
||||
.setDisbursedAmountPercentageForDownPayment(acc.disbursedAmountPercentageForDownPayment)
|
||||
.setEnableAutoRepaymentForDownPayment(acc.enableAutoRepaymentForDownPayment)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(loanScheduleTypeOptions)
|
||||
.setCalendarOptions(calendarOptions).setNotes(notes).setAccountLinkingOptions(accountLinkingOptions)
|
||||
.setLinkedAccount(linkedAccount).setDisbursementDetails(disbursementDetails).setEmiAmountVariations(emiAmountVariations)
|
||||
.setOverdueCharges(overdueCharges).setPaidInAdvance(paidInAdvance).setInterestRatesPeriods(interestRatesPeriods)
|
||||
.setClientActiveLoanOptions(clientActiveLoanOptions).setRates(rates).setIsRatesEnabled(isRatesEnabled)
|
||||
.setDelinquent(delinquent).setLoanScheduleTypeOptions(loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static LoanAccountData associationsAndTemplate(final LoanAccountData acc, final Collection<LoanProductData> productOptions,
|
||||
public LoanAccountData associationsAndTemplate(final Collection<LoanProductData> productOptions,
|
||||
final Collection<StaffData> allowedLoanOfficers, final Collection<CalendarData> calendarOptions,
|
||||
final Collection<PortfolioAccountData> accountLinkingOptions, final Boolean isRatesEnabled) {
|
||||
|
||||
return associationsAndTemplate(acc, acc.repaymentSchedule, acc.transactions, acc.charges, acc.collateral, acc.guarantors,
|
||||
acc.meeting, productOptions, acc.termFrequencyTypeOptions, acc.repaymentFrequencyTypeOptions,
|
||||
acc.repaymentFrequencyNthDayTypeOptions, acc.repaymentFrequencyDaysOfWeekTypeOptions,
|
||||
acc.transactionProcessingStrategyOptions, acc.interestRateFrequencyTypeOptions, acc.amortizationTypeOptions,
|
||||
acc.interestTypeOptions, acc.interestCalculationPeriodTypeOptions, acc.fundOptions, acc.chargeOptions, null,
|
||||
allowedLoanOfficers, acc.loanPurposeOptions, acc.loanCollateralOptions, calendarOptions, acc.notes, accountLinkingOptions,
|
||||
acc.linkedAccount, acc.disbursementDetails, acc.emiAmountVariations, acc.overdueCharges, acc.paidInAdvance,
|
||||
acc.interestRatesPeriods, acc.clientActiveLoanOptions, acc.rates, isRatesEnabled, acc.delinquent,
|
||||
acc.loanScheduleTypeOptions, acc.loanScheduleProcessingTypeOptions);
|
||||
return this.setProductOptions(productOptions) //
|
||||
.setLoanOfficerOptions(allowedLoanOfficers) //
|
||||
.setCalendarOptions(calendarOptions) //
|
||||
.setAccountLinkingOptions(accountLinkingOptions) //
|
||||
.setIsRatesEnabled(isRatesEnabled); //
|
||||
}
|
||||
|
||||
public static LoanAccountData associateGroup(final LoanAccountData acc, final GroupGeneralData group) {
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(group).setLoanType(acc.loanType)
|
||||
.setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static LoanAccountData associateMemberVariations(final LoanAccountData acc, final Map<Long, Integer> memberLoanCycle) {
|
||||
|
||||
final Map<Long, LoanBorrowerCycleData> memberVariations = new HashMap<Long, LoanBorrowerCycleData>();
|
||||
public LoanAccountData associateMemberVariations(final Map<Long, Integer> memberLoanCycle) {
|
||||
final Map<Long, LoanBorrowerCycleData> memberVariations = new HashMap<>();
|
||||
for (Map.Entry<Long, Integer> mapEntry : memberLoanCycle.entrySet()) {
|
||||
BigDecimal principal = null;
|
||||
BigDecimal interestRatePerPeriod = null;
|
||||
Integer numberOfRepayments = null;
|
||||
Long clientId = mapEntry.getKey();
|
||||
Integer loanCycleNumber = mapEntry.getValue();
|
||||
if (acc.product.isUseBorrowerCycle() && loanCycleNumber != null && loanCycleNumber > 0) {
|
||||
Collection<LoanProductBorrowerCycleVariationData> principalVariationsForBorrowerCycle = acc.product
|
||||
if (product.isUseBorrowerCycle() && loanCycleNumber != null && loanCycleNumber > 0) {
|
||||
Collection<LoanProductBorrowerCycleVariationData> principalVariationsForBorrowerCycle = product
|
||||
.getPrincipalVariationsForBorrowerCycle();
|
||||
Collection<LoanProductBorrowerCycleVariationData> interestForVariationsForBorrowerCycle = acc.product
|
||||
Collection<LoanProductBorrowerCycleVariationData> interestForVariationsForBorrowerCycle = product
|
||||
.getInterestRateVariationsForBorrowerCycle();
|
||||
Collection<LoanProductBorrowerCycleVariationData> repaymentVariationsForBorrowerCycle = acc.product
|
||||
Collection<LoanProductBorrowerCycleVariationData> repaymentVariationsForBorrowerCycle = product
|
||||
.getNumberOfRepaymentVariationsForBorrowerCycle();
|
||||
principal = fetchLoanCycleDefaultValue(principalVariationsForBorrowerCycle, loanCycleNumber);
|
||||
interestRatePerPeriod = fetchLoanCycleDefaultValue(interestForVariationsForBorrowerCycle, loanCycleNumber);
|
||||
@@ -923,276 +577,33 @@ public class LoanAccountData {
|
||||
}
|
||||
}
|
||||
if (principal == null) {
|
||||
principal = acc.product.getPrincipal();
|
||||
principal = product.getPrincipal();
|
||||
}
|
||||
if (interestRatePerPeriod == null) {
|
||||
interestRatePerPeriod = acc.product.getInterestRatePerPeriod();
|
||||
interestRatePerPeriod = product.getInterestRatePerPeriod();
|
||||
}
|
||||
if (numberOfRepayments == null) {
|
||||
numberOfRepayments = acc.product.getNumberOfRepayments();
|
||||
numberOfRepayments = product.getNumberOfRepayments();
|
||||
}
|
||||
final Integer termFrequency = numberOfRepayments * acc.product.getRepaymentEvery();
|
||||
final Integer termFrequency = numberOfRepayments * product.getRepaymentEvery();
|
||||
LoanBorrowerCycleData borrowerCycleData = new LoanBorrowerCycleData(principal, interestRatePerPeriod, numberOfRepayments,
|
||||
termFrequency);
|
||||
memberVariations.put(clientId, borrowerCycleData);
|
||||
}
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType).setFixedLength(acc.fixedLength)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
return this.setMemberVariations(memberVariations);
|
||||
}
|
||||
|
||||
public static LoanAccountData withInterestRecalculationCalendarData(final LoanAccountData acc, final CalendarData calendarData,
|
||||
public LoanAccountData withInterestRecalculationCalendarData(final CalendarData calendarData,
|
||||
final CalendarData compoundingCalendarData) {
|
||||
|
||||
final LoanInterestRecalculationData interestRecalculationData = LoanInterestRecalculationData
|
||||
.withCalendarData(acc.interestRecalculationData, calendarData, compoundingCalendarData);
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled).setInterestRecalculationData(interestRecalculationData)
|
||||
.setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
if (interestRecalculationData == null) {
|
||||
interestRecalculationData = new LoanInterestRecalculationData();
|
||||
}
|
||||
final LoanInterestRecalculationData newInterestRecalculationData = interestRecalculationData.withCalendarData(calendarData,
|
||||
compoundingCalendarData);
|
||||
return this.setInterestRecalculationData(newInterestRecalculationData);
|
||||
}
|
||||
|
||||
public static LoanAccountData withLoanCalendarData(final LoanAccountData acc, final CalendarData calendarData) {
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType).setMeeting(calendarData)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(acc.originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static LoanAccountData withOriginalSchedule(final LoanAccountData acc, final LoanScheduleData originalSchedule) {
|
||||
|
||||
return new LoanAccountData().setId(acc.id).setAccountNo(acc.accountNo).setStatus(acc.status).setExternalId(acc.externalId)
|
||||
.setClientId(acc.clientId).setClientAccountNo(acc.clientAccountNo).setClientName(acc.clientName)
|
||||
.setClientOfficeId(acc.clientOfficeId).setClientExternalId(acc.clientExternalId).setGroup(acc.group)
|
||||
.setLoanType(acc.loanType).setLoanProductId(acc.loanProductId).setLoanProductName(acc.loanProductName)
|
||||
.setLoanProductDescription(acc.loanProductDescription)
|
||||
.setLoanProductLinkedToFloatingRate(acc.isLoanProductLinkedToFloatingRate).setFundId(acc.fundId).setFundName(acc.fundName)
|
||||
.setLoanPurposeId(acc.loanPurposeId).setLoanPurposeName(acc.loanPurposeName).setLoanOfficerId(acc.loanOfficerId)
|
||||
.setLoanOfficerName(acc.loanOfficerName).setCurrency(acc.currency).setProposedPrincipal(acc.proposedPrincipal)
|
||||
.setPrincipal(acc.principal).setApprovedPrincipal(acc.approvedPrincipal).setNetDisbursalAmount(acc.netDisbursalAmount)
|
||||
.setTotalOverpaid(acc.totalOverpaid).setInArrearsTolerance(acc.inArrearsTolerance).setTermFrequency(acc.termFrequency)
|
||||
.setTermPeriodFrequencyType(acc.termPeriodFrequencyType).setNumberOfRepayments(acc.numberOfRepayments)
|
||||
.setRepaymentEvery(acc.repaymentEvery).setRepaymentFrequencyType(acc.repaymentFrequencyType)
|
||||
.setRepaymentFrequencyNthDayType(acc.repaymentFrequencyNthDayType)
|
||||
.setRepaymentFrequencyDayOfWeekType(acc.repaymentFrequencyDayOfWeekType).setFixedLength(acc.fixedLength)
|
||||
.setTransactionProcessingStrategyCode(acc.transactionProcessingStrategyCode)
|
||||
.setTransactionProcessingStrategyName(acc.transactionProcessingStrategyName).setAmortizationType(acc.amortizationType)
|
||||
.setInterestRatePerPeriod(acc.interestRatePerPeriod).setInterestRateFrequencyType(acc.interestRateFrequencyType)
|
||||
.setAnnualInterestRate(acc.annualInterestRate).setInterestType(acc.interestType)
|
||||
.setFloatingInterestRate(acc.isFloatingInterestRate).setInterestRateDifferential(acc.interestRateDifferential)
|
||||
.setInterestCalculationPeriodType(acc.interestCalculationPeriodType)
|
||||
.setAllowPartialPeriodInterestCalculation(acc.allowPartialPeriodInterestCalculation)
|
||||
.setExpectedFirstRepaymentOnDate(acc.expectedFirstRepaymentOnDate).setGraceOnPrincipalPayment(acc.graceOnPrincipalPayment)
|
||||
.setRecurringMoratoriumOnPrincipalPeriods(acc.recurringMoratoriumOnPrincipalPeriods)
|
||||
.setGraceOnInterestPayment(acc.graceOnInterestPayment).setGraceOnInterestCharged(acc.graceOnInterestCharged)
|
||||
.setInterestChargedFromDate(acc.interestChargedFromDate).setTimeline(acc.timeline).setSummary(acc.summary)
|
||||
.setFeeChargesAtDisbursementCharged(acc.feeChargesAtDisbursementCharged).setRepaymentSchedule(acc.repaymentSchedule)
|
||||
.setTransactions(acc.transactions).setCharges(acc.charges).setCollateral(acc.collateral).setGuarantors(acc.guarantors)
|
||||
.setMeeting(acc.meeting).setProductOptions(acc.productOptions).setTermFrequencyTypeOptions(acc.termFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyTypeOptions(acc.repaymentFrequencyTypeOptions)
|
||||
.setRepaymentFrequencyNthDayTypeOptions(acc.repaymentFrequencyNthDayTypeOptions)
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(acc.repaymentFrequencyDaysOfWeekTypeOptions)
|
||||
.setTransactionProcessingStrategyOptions(acc.transactionProcessingStrategyOptions)
|
||||
.setInterestRateFrequencyTypeOptions(acc.interestRateFrequencyTypeOptions)
|
||||
.setAmortizationTypeOptions(acc.amortizationTypeOptions).setInterestTypeOptions(acc.interestTypeOptions)
|
||||
.setInterestCalculationPeriodTypeOptions(acc.interestCalculationPeriodTypeOptions).setFundOptions(acc.fundOptions)
|
||||
.setChargeOptions(acc.chargeOptions).setLoanOfficerOptions(acc.loanOfficerOptions)
|
||||
.setLoanPurposeOptions(acc.loanPurposeOptions).setLoanCollateralOptions(acc.loanCollateralOptions)
|
||||
.setCalendarOptions(acc.calendarOptions).setSyncDisbursementWithMeeting(acc.syncDisbursementWithMeeting)
|
||||
.setLoanCounter(acc.loanCounter).setLoanProductCounter(acc.loanProductCounter).setNotes(acc.notes)
|
||||
.setAccountLinkingOptions(acc.accountLinkingOptions).setLinkedAccount(acc.linkedAccount)
|
||||
.setDisbursementDetails(acc.disbursementDetails).setMultiDisburseLoan(acc.multiDisburseLoan)
|
||||
.setCanDefineInstallmentAmount(acc.canDefineInstallmentAmount).setFixedEmiAmount(acc.fixedEmiAmount)
|
||||
.setMaxOutstandingLoanBalance(acc.maxOutstandingLoanBalance).setEmiAmountVariations(acc.emiAmountVariations)
|
||||
.setMemberVariations(acc.memberVariations).setProduct(acc.product).setInArrears(acc.inArrears)
|
||||
.setGraceOnArrearsAgeing(acc.graceOnArrearsAgeing).setOverdueCharges(acc.overdueCharges).setIsNPA(acc.isNPA)
|
||||
.setDaysInMonthType(acc.daysInMonthType).setDaysInYearType(acc.daysInYearType)
|
||||
.setInterestRecalculationEnabled(acc.isInterestRecalculationEnabled)
|
||||
.setInterestRecalculationData(acc.interestRecalculationData).setOriginalSchedule(originalSchedule)
|
||||
.setCreateStandingInstructionAtDisbursement(acc.createStandingInstructionAtDisbursement).setPaidInAdvance(acc.paidInAdvance)
|
||||
.setInterestRatesPeriods(acc.interestRatesPeriods).setIsVariableInstallmentsAllowed(acc.isVariableInstallmentsAllowed)
|
||||
.setMinimumGap(acc.minimumGap).setMaximumGap(acc.maximumGap).setSubStatus(acc.subStatus)
|
||||
.setCanUseForTopup(acc.canUseForTopup).setClientActiveLoanOptions(acc.clientActiveLoanOptions).setTopup(acc.isTopup)
|
||||
.setClosureLoanId(acc.closureLoanId).setClosureLoanAccountNo(acc.closureLoanAccountNo).setTopupAmount(acc.topupAmount)
|
||||
.setIsEqualAmortization(acc.isEqualAmortization).setRates(acc.rates).setIsRatesEnabled(acc.isRatesEnabled)
|
||||
.setFixedPrincipalPercentagePerInstallment(acc.fixedPrincipalPercentagePerInstallment).setDelinquent(acc.delinquent)
|
||||
.setDelinquencyRange(acc.delinquencyRange).setDisallowExpectedDisbursements(acc.disallowExpectedDisbursements)
|
||||
.setFraud(acc.fraud).setOverpaidOnDate(acc.overpaidOnDate).setChargedOff(acc.chargedOff)
|
||||
.setEnableInstallmentLevelDelinquency(acc.enableInstallmentLevelDelinquency).setLoanScheduleType(acc.loanScheduleType)
|
||||
.setLoanScheduleProcessingType(acc.loanScheduleProcessingType).setLoanScheduleTypeOptions(acc.loanScheduleTypeOptions)
|
||||
.setLoanScheduleProcessingTypeOptions(acc.loanScheduleProcessingTypeOptions);
|
||||
}
|
||||
|
||||
public static final Comparator<LoanAccountData> ClientNameComparator = (loan1, loan2) -> {
|
||||
public static final Comparator<LoanAccountData> LOAN_ACCOUNT_DATA_COMPARATOR_BY_CLIENT_NAME = (loan1, loan2) -> {
|
||||
String clientOfLoan1 = loan1.getClientName().toUpperCase(Locale.ENGLISH);
|
||||
String clientOfLoan2 = loan2.getClientName().toUpperCase(Locale.ENGLISH);
|
||||
return clientOfLoan1.compareTo(clientOfLoan2);
|
||||
|
||||
-6
@@ -74,12 +74,6 @@ public interface LoanReadPlatformService {
|
||||
|
||||
LoanAccountData retrieveLoanProductDetailsTemplate(Long productId, Long clientId, Long groupId);
|
||||
|
||||
LoanAccountData retrieveClientDetailsTemplate(Long clientId);
|
||||
|
||||
LoanAccountData retrieveGroupDetailsTemplate(Long groupId);
|
||||
|
||||
LoanAccountData retrieveGroupAndMembersDetailsTemplate(Long groupId);
|
||||
|
||||
Collection<CalendarData> retrieveCalendars(Long groupId);
|
||||
|
||||
Page<LoanAccountData> retrieveAll(SearchParameters searchParameters);
|
||||
|
||||
+30
-56
@@ -235,9 +235,10 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
|
||||
@Override
|
||||
public LoanAccountData fetchRepaymentScheduleData(LoanAccountData accountData) {
|
||||
final RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData = accountData.getTimeline().repaymentScheduleRelatedData(
|
||||
accountData.getCurrency(), accountData.getPrincipal(), accountData.getApprovedPrincipal(),
|
||||
accountData.getInArrearsTolerance(), accountData.getFeeChargesAtDisbursementCharged());
|
||||
final RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData = new RepaymentScheduleRelatedLoanData(
|
||||
accountData.getTimeline().getExpectedDisbursementDate(), accountData.getTimeline().getActualDisbursementDate(),
|
||||
accountData.getCurrency(), accountData.getPrincipal(), accountData.getInArrearsTolerance(),
|
||||
accountData.getFeeChargesAtDisbursementCharged());
|
||||
|
||||
final Collection<DisbursementData> disbursementData = retrieveLoanDisbursementDetails(accountData.getId());
|
||||
final LoanScheduleData repaymentSchedule = retrieveRepaymentSchedule(accountData.getId(), repaymentScheduleRelatedData,
|
||||
@@ -384,15 +385,15 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
|
||||
final ClientData clientAccount = this.clientReadPlatformService.retrieveOne(clientId);
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
LoanAccountData loanTemplateDetails = LoanAccountData.clientDefaults(clientAccount.getId(), clientAccount.getAccountNo(),
|
||||
clientAccount.getDisplayName(), clientAccount.getOfficeId(), clientAccount.getExternalId(), expectedDisbursementDate);
|
||||
LoanAccountData loanDetails = new LoanAccountData().withClientData(clientAccount)
|
||||
.setExpectedDisbursementDate(expectedDisbursementDate);
|
||||
|
||||
if (productId != null) {
|
||||
final LoanProductData selectedProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId);
|
||||
loanTemplateDetails = LoanAccountData.populateLoanProductDefaults(loanTemplateDetails, selectedProduct);
|
||||
loanDetails = loanDetails.withProductData(selectedProduct, null);
|
||||
}
|
||||
|
||||
return loanTemplateDetails;
|
||||
return loanDetails;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -402,11 +403,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
|
||||
final GroupGeneralData groupAccount = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
LoanAccountData loanDetails = LoanAccountData.groupDefaults(groupAccount, expectedDisbursementDate);
|
||||
LoanAccountData loanDetails = new LoanAccountData().setGroup(groupAccount).withExpectedDisbursementDate(expectedDisbursementDate);
|
||||
|
||||
if (productId != null) {
|
||||
final LoanProductData selectedProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId);
|
||||
loanDetails = LoanAccountData.populateLoanProductDefaults(loanDetails, selectedProduct);
|
||||
loanDetails = loanDetails.withProductData(selectedProduct, null);
|
||||
}
|
||||
|
||||
return loanDetails;
|
||||
@@ -430,11 +431,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
}
|
||||
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
LoanAccountData loanDetails = LoanAccountData.groupDefaults(groupAccount, expectedDisbursementDate);
|
||||
LoanAccountData loanDetails = new LoanAccountData().setGroup(groupAccount).withExpectedDisbursementDate(expectedDisbursementDate);
|
||||
|
||||
if (productId != null) {
|
||||
final LoanProductData selectedProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId);
|
||||
loanDetails = LoanAccountData.populateLoanProductDefaults(loanDetails, selectedProduct);
|
||||
loanDetails = loanDetails.withProductData(selectedProduct, null);
|
||||
}
|
||||
|
||||
return loanDetails;
|
||||
@@ -1521,7 +1522,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
.retrieveLoanAmortizationTypeOptions();
|
||||
Collection<EnumOptionData> interestTypeOptions = null;
|
||||
if (loanProduct.isLinkedToFloatingInterestRates()) {
|
||||
interestTypeOptions = Arrays.asList(interestType(InterestMethod.DECLINING_BALANCE));
|
||||
interestTypeOptions = List.of(interestType(InterestMethod.DECLINING_BALANCE));
|
||||
} else {
|
||||
interestTypeOptions = this.loanDropdownReadPlatformService.retrieveLoanInterestTypeOptions();
|
||||
}
|
||||
@@ -1558,50 +1559,23 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
|
||||
activeLoanOptions = this.accountDetailsReadPlatformService.retrieveGroupActiveLoanAccountSummary(groupId);
|
||||
}
|
||||
|
||||
return LoanAccountData.loanProductWithTemplateDefaults(loanProduct, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions,
|
||||
repaymentFrequencyNthDayTypeOptions, repaymentFrequencyDaysOfWeekTypeOptions, repaymentStrategyOptions,
|
||||
interestRateFrequencyTypeOptions, amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions,
|
||||
fundOptions, chargeOptions, loanPurposeOptions, loanCollateralOptions, loanCycleCounter, activeLoanOptions,
|
||||
LoanScheduleType.getValuesAsEnumOptionDataList(), LoanScheduleProcessingType.getValuesAsEnumOptionDataList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanAccountData retrieveClientDetailsTemplate(final Long clientId) {
|
||||
|
||||
this.context.authenticatedUser();
|
||||
|
||||
final ClientData clientAccount = this.clientReadPlatformService.retrieveOne(clientId);
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
|
||||
return LoanAccountData.clientDefaults(clientAccount.getId(), clientAccount.getAccountNo(), clientAccount.getDisplayName(),
|
||||
clientAccount.getOfficeId(), clientAccount.getExternalId(), expectedDisbursementDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanAccountData retrieveGroupDetailsTemplate(final Long groupId) {
|
||||
this.context.authenticatedUser();
|
||||
final GroupGeneralData groupAccount = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
return LoanAccountData.groupDefaults(groupAccount, expectedDisbursementDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanAccountData retrieveGroupAndMembersDetailsTemplate(final Long groupId) {
|
||||
GroupGeneralData groupAccount = this.groupReadPlatformService.retrieveOne(groupId);
|
||||
final LocalDate expectedDisbursementDate = DateUtils.getBusinessLocalDate();
|
||||
|
||||
// get group associations
|
||||
final Collection<ClientData> membersOfGroup = this.clientReadPlatformService.retrieveActiveClientMembersOfGroup(groupId);
|
||||
if (!CollectionUtils.isEmpty(membersOfGroup)) {
|
||||
final Collection<ClientData> activeClientMembers = null;
|
||||
final Collection<CalendarData> calendarsData = null;
|
||||
final CalendarData collectionMeetingCalendar = null;
|
||||
final Collection<GroupRoleData> groupRoles = null;
|
||||
groupAccount = GroupGeneralData.withAssocations(groupAccount, membersOfGroup, activeClientMembers, groupRoles, calendarsData,
|
||||
collectionMeetingCalendar);
|
||||
}
|
||||
|
||||
return LoanAccountData.groupDefaults(groupAccount, expectedDisbursementDate);
|
||||
return new LoanAccountData().withProductData(loanProduct, loanCycleCounter) //
|
||||
.setTermFrequencyTypeOptions(loanTermFrequencyTypeOptions) //
|
||||
.setRepaymentFrequencyTypeOptions(repaymentFrequencyTypeOptions) //
|
||||
.setRepaymentFrequencyNthDayTypeOptions(repaymentFrequencyNthDayTypeOptions) //
|
||||
.setRepaymentFrequencyDaysOfWeekTypeOptions(repaymentFrequencyDaysOfWeekTypeOptions) //
|
||||
.setTransactionProcessingStrategyOptions(repaymentStrategyOptions) //
|
||||
.setInterestRateFrequencyTypeOptions(interestRateFrequencyTypeOptions) //
|
||||
.setAmortizationTypeOptions(amortizationTypeOptions) //
|
||||
.setInterestTypeOptions(interestTypeOptions) //
|
||||
.setInterestCalculationPeriodTypeOptions(interestCalculationPeriodTypeOptions) //
|
||||
.setFundOptions(fundOptions) //
|
||||
.setChargeOptions(chargeOptions) //
|
||||
.setLoanPurposeOptions(loanPurposeOptions) //
|
||||
.setLoanCollateralOptions(loanCollateralOptions) //
|
||||
.setClientActiveLoanOptions(activeLoanOptions) //
|
||||
.setLoanScheduleTypeOptions(LoanScheduleType.getValuesAsEnumOptionDataList()) //
|
||||
.setLoanScheduleProcessingTypeOptions(LoanScheduleProcessingType.getValuesAsEnumOptionDataList()); //
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user