Add Repayment Info as part of the Loan Account request

This commit is contained in:
Jose Alberto Hernandez
2022-11-25 11:50:15 -06:00
parent 5e6f14a5e0
commit 460d9bf8be
16 changed files with 227 additions and 80 deletions
+72 -1
View File
@@ -4,6 +4,7 @@ import { HttpClient, HttpParams } from '@angular/common/http';
/** rxjs Imports */
import { Observable } from 'rxjs';
import { Dates } from 'app/core/utils/dates';
/**
* Loans service.
@@ -12,7 +13,8 @@ import { Observable } from 'rxjs';
providedIn: 'root'
})
export class LoansService {
constructor(private http: HttpClient) { }
constructor(private http: HttpClient,
private dateUtils: Dates) { }
/**
* @param {string} loanId loanId of the loan.
* @returns {Observable<any>}
@@ -470,4 +472,73 @@ export class LoansService {
return this.http.post('/batches?enclosingTransaction=true', glimAccount);
}
calculateLoanSchedule(payload: any): Observable<any> {
return this.http.post('/loans?command=calculateLoanSchedule', payload);
}
/**
* @param loansAccount Loan account data used for the request
* @param loansAccountTemplate Loan account template for getting product default values
* @param calendarOptions Calendar options
* @param locale String to send to backend
* @param dateFormat String with date format to manage dates
* @returns Object with Loan Account payload data.
*/
buildLoanRequestPayload(loansAccount: any, loansAccountTemplate: any, calendarOptions: any, locale: string, dateFormat: string): any {
const loansAccountData = {
...loansAccount,
charges: loansAccount.charges.map((charge: any) => ({
chargeId: charge.id,
amount: charge.amount,
dueDate: charge.dueDate && this.dateUtils.formatDate(charge.dueDate, dateFormat),
})),
collateral: loansAccount.collateral.map((collateralEle: any) => ({
clientCollateralId: collateralEle.type.collateralId,
quantity: collateralEle.value,
})),
disbursementData: loansAccount.disbursementData.map((item: any) => ({
expectedDisbursementDate: this.dateUtils.formatDate(item.expectedDisbursementDate, dateFormat),
principal: item.principal
})),
interestChargedFromDate: this.dateUtils.formatDate(loansAccount.interestChargedFromDate, dateFormat),
repaymentsStartingFromDate: this.dateUtils.formatDate(loansAccount.repaymentsStartingFromDate, dateFormat),
submittedOnDate: this.dateUtils.formatDate(loansAccount.submittedOnDate, dateFormat),
expectedDisbursementDate: this.dateUtils.formatDate(loansAccount.expectedDisbursementDate, dateFormat),
dateFormat,
locale,
};
if (loansAccountTemplate.clientId) {
loansAccountData.clientId = loansAccountTemplate.clientId;
loansAccountData.loanType = 'individual';
} else {
loansAccountData.groupId = loansAccountTemplate.group.id;
loansAccountData.loanType = 'group';
}
if (loansAccountData.syncRepaymentsWithMeeting) {
loansAccountData.calendarId = calendarOptions[0].id;
delete loansAccountData.syncRepaymentsWithMeeting;
}
if (loansAccountData.recalculationRestFrequencyDate) {
loansAccountData.recalculationRestFrequencyDate = this.dateUtils.formatDate(loansAccount.recalculationRestFrequencyDate, dateFormat);
}
if (loansAccountData.interestCalculationPeriodType === 0) {
loansAccountData.allowPartialPeriodInterestCalcualtion = false;
}
if (!(loansAccountData.isFloatingInterestRate === false)) {
delete loansAccountData.isFloatingInterestRate;
}
if (!(loansAccountData.multiDisburseLoan)) {
delete loansAccountData.disbursementData;
}
delete loansAccountData.isValid;
loansAccountData.principal = loansAccountData.principalAmount;
delete loansAccountData.principalAmount;
return loansAccountData;
}
}