/** Angular Imports */ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; /** rxjs Imports */ import { Observable } from 'rxjs'; /** * Loans service. */ @Injectable({ providedIn: 'root' }) export class LoansService { constructor(private http: HttpClient) { } /** * @param {string} loanId loanId of the loan. * @returns {Observable} */ getLoanChargeTemplateResource(loanId: string): Observable { return this.http.get(`/loans/${loanId}/charges/template`); } getLoanActionTemplate(loanId: string, command: string): Observable { const httpParams = new HttpParams().set('command', command); return this.http.get(`/loans/${loanId}/transactions/template`, { params: httpParams }); } getLoanAccountResource(loanId: string, associations: string): Observable { const httpParams = new HttpParams().set('associations', associations); return this.http.get(`/loans/${loanId}`, { params: httpParams }); } getGuarantorTemplate(loanId: string): Observable { return this.http.get(`/loans/${loanId}/guarantors/template`); } createNewGuarantor(loanId: string, data: any): Observable { return this.http.post(`/loans/${loanId}/guarantors`, data); } deleteGuarantor(loanId: any, guarantorId: any): Observable { return this.http.delete(`/loans/${loanId}/guarantors/${guarantorId}`); } deleteLoanAccount(loanId: any): Observable { return this.http.delete(`/loans/${loanId}`); } /** * Returns the loan template data with specific condition * @param loanId Loan Id */ getLoanTemplate(loanId: string): Observable { const httpParams = new HttpParams() .set('fields', 'id,loanOfficerId,loanOfficerOptions') .set('staffInSelectedOfficeOnly', 'true') .set('template', 'true'); return this.http.get(`/loans/${loanId}`, { params: httpParams }); } /** * @param {any} loanCharge to apply on a Loan Account. * @returns {Observable} */ createLoanCharge(loanId: string, resourceType: string, loanCharge: any): Observable { return this.http.post(`/loans/${loanId}/${resourceType}`, loanCharge); } /** * Get Loan Account Details * @param loanId Loan Id */ getLoanAccountDetails(loanId: string): Observable { return this.http.get(`/loans/${loanId}`); } /** * Get collateral template. * @param {string} loanId Loan Id. * @returns {Observable} */ getLoanCollateralTemplate(loanId: string): Observable { return this.http.get(`/loans/${loanId}/collaterals/template`); } /** * Create Loan Collateral. * @param {string} loanId Loan Id. * @param {any} collateralData Collateral Data. * @returns {Observable} */ createLoanCollateral(loanId: string, collateralData: any): Observable { return this.http.post(`/loans/${loanId}/collaterals`, collateralData); } /** * Get Loans details with httpParams * @param loanId Loan ID */ getLoanAccountAssociationDetails(loanId: string) { const httpParams = new HttpParams() .set('associations', 'all') .set('exclude', 'guarantors,futureSchedule'); return this.http.get(`/loans/${loanId}`, {params: httpParams}); } getApproveAssociationsDetails(loanId: any) { const httpParams = new HttpParams() .set('associations', 'multiDisburseDetails'); return this.http.get(`/loans/${loanId}`, { params: httpParams }); } /** * @param loanId Loan Id * @returns The notes for particular loan */ getLoanNotes(loanId: string): Observable { return this.http.get(`/loans/${loanId}/notes`); } /** * Adds a note to the particular Loan Id * @param loanId Loan ID * @param noteData Note Data to be added * @returns {Observable} */ createLoanNote(loanId: string, noteData: any): Observable { return this.http.post(`/loans/${loanId}/notes`, noteData); } /** * Edits the Loan Note * @param loanId Loan ID * @param noteId Note ID * @param noteData Note Data */ editLoanNote(loanId: string, noteId: string, noteData: any) { return this.http.put(`/loans/${loanId}/notes/${noteId}`, noteData); } /** * Deletes the particular Note * @param loanId Loan ID * @param noteId Note ID */ deleteLoanNote(loanId: string, noteId: string) { return this.http.delete(`/loans/${loanId}/notes/${noteId}`); } /** * Used For: Close Action, Prepay Loan Action * Returns the response of the action * @param loanId Loan Id * @param data Data * @param command Command */ submitLoanActionButton(loanId: string, data: any, command: any) { const httpParams = new HttpParams().set('command', command); return this.http.post(`/loans/${loanId}/transactions`, data, {params: httpParams}); } getLoanScreenReportsData(): Observable { const httpParams = new HttpParams().set('entityId', '1') .set('typeId', '0'); return this.http.get(`/templates`, {params: httpParams}); } /** * Get Loan Datatables */ getLoanDataTables() { const httpParams = new HttpParams().set('apptable', 'm_loan'); return this.http.get(`/datatables`, { params: httpParams }); } /** * Get Loan Datatable * @param loanId Loan ID * @param datatableName Datatable Name */ getLoanDatatable(loanId: string, datatableName: string) { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.get(`/datatables/${datatableName}/${loanId}`, { params: httpParams }); } /** * @param loanId Loan Id of loan to get add datatable entry for. * @param datatableName Data Table name. * @param data Data. * @returns {Observable} */ addLoanDatatableEntry(loanId: string, datatableName: string, data: any): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.post(`/datatables/${datatableName}/${loanId}`, data, { params: httpParams }); } /** * @param loanId Loan Id of loan to get add datatable entry for. * @param datatableName Data Table name. * @param data Data. * @returns {Observable} */ editLoanDatatableEntry(loanId: string, datatableName: string, data: any): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.put(`/datatables/${datatableName}/${loanId}`, data, { params: httpParams }); } /** * @param loanId Loan Id of loan to get add datatable entry for. * @param datatableName Data Table name. * @returns {Observable} */ deleteDatatableContent(loanId: string, datatableName: string): Observable { const httpParams = new HttpParams().set('genericResultSet', 'true'); return this.http.delete(`/datatables/${datatableName}/${loanId}`, { params: httpParams }); } /** * @param {string} loanId Loan Id. * @param {any} data Data. * @returns {Observable} */ loanActionButtons(loanId: any, command: any, data?: any): Observable { const httpParams = new HttpParams().set('command', command); return this.http.post(`/loans/${loanId}`, data, {params: httpParams}); } /** * @param {string|number} loanId Loan Id. * @param {any} foreclosuredata ForeClosure Data */ getForeclosureData(loanId: string|number, foreclosuredata: any) { const httpParams = new HttpParams().set('command', foreclosuredata.command) .set('dateFormat', foreclosuredata.dateFormat) .set('locale', foreclosuredata.locale) .set('transactionDate', foreclosuredata.transactionDate); return this.http.get(`/loans/${loanId}/transactions/template`, {params: httpParams}); } /** * @param {string|number} loanId Loan Id * @param {any} data Data */ loanForclosureData(loanId: any, data: any) { const httpParams = new HttpParams().set('command', 'foreclosure'); return this.http.post(`/loans/${loanId}/transactions`, data, {params: httpParams}); } /** * Returns the Reschedule Loans Template */ rescheduleLoanTemplate() { return this.http.get('/rescheduleloans/template'); } /** * Submits Reschedule Data * @param {any} data Data */ submitRescheduleData(data: any) { const httpParams = new HttpParams().set('command', 'reschedule'); return this.http.post('/rescheduleloans', data, {params: httpParams}); } /** * Gets Loan Account Template * @param {any} clientId Client ID * @param {any} productId Product ID */ getLoansAccountTemplateResource(clientId: any, productId?: any): Observable { let httpParams = new HttpParams().set('activeOnly', 'true') .set('clientId', clientId) .set('staffInSelectedOfficeOnly', 'true') .set('templateType', 'individual'); httpParams = productId ? httpParams.set('productId', productId) : httpParams; return this.http.get('/loans/template', { params: httpParams }); } getLoansAccountAndTemplateResource(loanId: any): Observable { const httpParams = new HttpParams().set('associations', 'charges,collateral,meeting,multiDisburseDetails') .set('staffInSelectedOfficeOnly', 'true') .set('template', 'true'); return this.http.get(`/loans/${loanId}`, { params: httpParams }); } /** * Get Loans Collateral Template * @param {any} productId Product ID */ getLoansCollateralTemplateResource(productId: any): Observable { const httpParams = new HttpParams().set('fields', 'id, loanCollateralOptions') .set('productId', productId) .set('templateType', 'collateral'); return this.http.get('/loans/template', { params: httpParams }); } /** * Creates Loans Account * @param {any} loanAccount Loan Account */ createLoansAccount(loanAccount: any): Observable { return this.http.post('/loans', loanAccount); } getLoanDocuments(loanId: any): Observable { return this.http.get(`/loans/${loanId}/documents`); } deleteLoanDocument(loanId: any, documentId: any): Observable { return this.http.delete(`/loans/${loanId}/documents/${documentId}`); } loadLoanDocument(loanId: any, data: any): Observable { return this.http.post(`/loans/${loanId}/documents`, data); } /** * @param clientId Client Id * @param clientName Client Name * @param fromAccountId Account Id * @param locale Locale * @param dateFormat Date Format * @returns {Observable} Standing Instructions */ getStandingInstructions( clientId: string, clientName: string, fromAccountId: string, locale: string, dateFormat: string): Observable { const httpParams = new HttpParams() .set('clientId', clientId) .set('clientName', clientName) .set('fromAccountId', fromAccountId) .set('fromAccountType', '1') .set('locale', locale) .set('dateFormat', dateFormat) .set('limit', '14') .set('offset', '0'); return this.http.get(`/standinginstructions`, { params: httpParams }); } updateLoansAccount(loanId: any, loanData: any): Observable { return this.http.put(`/loans/${loanId}`, loanData); } getTemplateData(templateId: any, loanId: any): Observable { const httpParams = new HttpParams().set('loanId', loanId); return this.http.post(`/templates/${templateId}`, {}, { params: httpParams, responseType: 'text'}); } /** * Get Loan Charge Aproval template. * @param {string} loanId Loan Id. * @returns {Observable} */ getLoanApprovalTemplate(loanId: string): Observable { const httpParams = new HttpParams() .set('templateType', 'approval'); return this.http.get(`/loans/${loanId}/template`, { params: httpParams }); } guarantorAccountResource(loanId: string, clientId: any): Observable { const httpParams = new HttpParams() .set('clientId', clientId); return this.http.get(`/loans/${loanId}/guarantors/accounts/template`, { params: httpParams }); } /** * @param {string} accountId loans account Id * @param {string} chargeId loans charge Id * @returns {Observable} */ getLoansAccountCharge(accountId: string, chargeId: string): Observable { return this.http.get(`/loans/${accountId}/charges/${chargeId}`); } /** * @param {string} accountId Loans Account Id * @param {string} command Command * @param {any} data Data * @param {string} chargeId Charge Id * @returns {Observable} */ executeLoansAccountChargesCommand(accountId: string, command: string, data: any, chargeId: any): Observable { const httpParams = new HttpParams().set('command', command); return this.http.post(`/loans/${accountId}/charges/${chargeId}`, data, { params: httpParams }); } /** * @param {string} accountId Loans Account Id * @param {any} data Charge Data * @param {any} chargeId Charge Id * @returns {Observable} */ editLoansAccountCharge(accountId: string, data: any, chargeId: any): Observable { return this.http.put(`/loans/${accountId}/charges/${chargeId}`, data); } /** * @param {string} accountId Loans Account Id * @param {any} chargeId Charge Id * @returns {Observable} */ deleteLoansAccountCharge(accountId: string, chargeId: any): Observable { return this.http.delete(`/loans/${accountId}/charges/${chargeId}`); } /** * @param {string} accountId Loans Account Id * @param {string} transactionId Transaction Id * @returns {Observable} */ getLoansAccountTransaction(accountId: string, transactionId: string): Observable { return this.http.get(`/loans/${accountId}/transactions/${transactionId}`); } /** * @param {string} accountId Loans Account Id * @param {string} transactionId Transaction Id * @returns {Observable} */ getLoansAccountTransactionTemplate(accountId: string, transactionId: string): Observable { const httpParams = new HttpParams().set('template', 'true'); return this.http.get(`/loans/${accountId}/transactions/${transactionId}`, { params: httpParams }); } /** * @param {string} accountId Loans Account Id * @param {string} command Command * @param {any} data Data * @param {string} transactionId Transaction Id * @returns {Observable} */ executeLoansAccountTransactionsCommand(accountId: string, command: string, data: any, transactionId?: any): Observable { const httpParams = new HttpParams().set('command', command); if (transactionId) { return this.http.post(`/loans/${accountId}/transactions/${transactionId}`, data, { params: httpParams }); } return this.http.post(`/loans/${accountId}/transactions`, data, { params: httpParams }); } }