113 lines
5.6 KiB
TypeScript
113 lines
5.6 KiB
TypeScript
/**
|
|
* Copyright since 2025 Mifos Initiative
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
import { Injectable, inject } from '@angular/core';
|
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
import { Observable } from 'rxjs';
|
|
|
|
export interface AccountListParams {
|
|
offset?: number;
|
|
limit?: number;
|
|
accountNo?: string;
|
|
clientName?: string;
|
|
orderBy?: string;
|
|
sortOrder?: string;
|
|
status?: string;
|
|
fromDate?: string;
|
|
toDate?: string;
|
|
asOnDate?: string;
|
|
}
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class AccountsService {
|
|
private http = inject(HttpClient);
|
|
|
|
getSavingsAccounts(params: AccountListParams = {}): Observable<any> {
|
|
let httpParams = new HttpParams()
|
|
.set('depositType', '100')
|
|
.set('offset', (params.offset ?? 0).toString())
|
|
.set('limit', (params.limit ?? 20).toString());
|
|
if (params.accountNo) httpParams = httpParams.set('accountNo', params.accountNo);
|
|
if (params.clientName) httpParams = httpParams.set('clientName', params.clientName);
|
|
if (params.orderBy) httpParams = httpParams.set('orderBy', params.orderBy);
|
|
if (params.sortOrder) httpParams = httpParams.set('sortOrder', params.sortOrder);
|
|
if (params.status) httpParams = httpParams.set('status', params.status);
|
|
if (params.fromDate) httpParams = httpParams.set('fromDate', params.fromDate);
|
|
if (params.toDate) httpParams = httpParams.set('toDate', params.toDate);
|
|
if (params.asOnDate) httpParams = httpParams.set('asOnDate', params.asOnDate);
|
|
return this.http.get('/savingsaccounts', { params: httpParams });
|
|
}
|
|
|
|
getCurrentAccounts(params: AccountListParams = {}): Observable<any> {
|
|
let httpParams = new HttpParams()
|
|
.set('offset', (params.offset ?? 0).toString())
|
|
.set('limit', (params.limit ?? 20).toString());
|
|
if (params.accountNo) httpParams = httpParams.set('accountNo', params.accountNo);
|
|
if (params.clientName) httpParams = httpParams.set('clientName', params.clientName);
|
|
if (params.orderBy) httpParams = httpParams.set('orderBy', params.orderBy);
|
|
if (params.sortOrder) httpParams = httpParams.set('sortOrder', params.sortOrder);
|
|
if (params.status) httpParams = httpParams.set('status', params.status);
|
|
if (params.fromDate) httpParams = httpParams.set('fromDate', params.fromDate);
|
|
if (params.toDate) httpParams = httpParams.set('toDate', params.toDate);
|
|
if (params.asOnDate) httpParams = httpParams.set('asOnDate', params.asOnDate);
|
|
return this.http.get('/currentaccounts', { params: httpParams });
|
|
}
|
|
|
|
getFixedDepositAccounts(params: AccountListParams = {}): Observable<any> {
|
|
let httpParams = new HttpParams()
|
|
.set('paged', 'true')
|
|
.set('offset', (params.offset ?? 0).toString())
|
|
.set('limit', (params.limit ?? 20).toString());
|
|
if (params.accountNo) httpParams = httpParams.set('accountNo', params.accountNo);
|
|
if (params.clientName) httpParams = httpParams.set('clientName', params.clientName);
|
|
if (params.orderBy) httpParams = httpParams.set('orderBy', params.orderBy);
|
|
if (params.sortOrder) httpParams = httpParams.set('sortOrder', params.sortOrder);
|
|
if (params.status) httpParams = httpParams.set('status', params.status);
|
|
if (params.fromDate) httpParams = httpParams.set('fromDate', params.fromDate);
|
|
if (params.toDate) httpParams = httpParams.set('toDate', params.toDate);
|
|
if (params.asOnDate) httpParams = httpParams.set('asOnDate', params.asOnDate);
|
|
return this.http.get('/fixeddepositaccounts', { params: httpParams });
|
|
}
|
|
|
|
/**
|
|
* FD Dashboard's data source: every ACTIVE FD, id/account/client/product identity, maturity date
|
|
* and deposit/maturity amounts only. Deliberately a separate, narrow endpoint rather than
|
|
* getFixedDepositAccounts() above -- that one's backend query joins in six more tables (audit
|
|
* who-did-what-when, currency, tax group) an unbounded dashboard fetch does not need, over columns
|
|
* that had no index until this feature added one (see backend migration 0571).
|
|
*/
|
|
getFixedDepositMaturityDashboard(): Observable<any> {
|
|
return this.http.get('/fixeddepositaccounts/maturity-dashboard');
|
|
}
|
|
|
|
/** RD Dashboard: running RDs with their installment position, closures and penalty income for the month. */
|
|
getRecurringDepositDashboard(): Observable<any> {
|
|
return this.http.get('/recurringdepositaccounts/dashboard');
|
|
}
|
|
|
|
getRecurringDepositAccounts(params: AccountListParams = {}): Observable<any> {
|
|
let httpParams = new HttpParams()
|
|
.set('paged', 'true')
|
|
.set('offset', (params.offset ?? 0).toString())
|
|
.set('limit', (params.limit ?? 20).toString());
|
|
if (params.accountNo) httpParams = httpParams.set('accountNo', params.accountNo);
|
|
if (params.clientName) httpParams = httpParams.set('clientName', params.clientName);
|
|
if (params.orderBy) httpParams = httpParams.set('orderBy', params.orderBy);
|
|
if (params.sortOrder) httpParams = httpParams.set('sortOrder', params.sortOrder);
|
|
if (params.status) httpParams = httpParams.set('status', params.status);
|
|
if (params.fromDate) httpParams = httpParams.set('fromDate', params.fromDate);
|
|
if (params.toDate) httpParams = httpParams.set('toDate', params.toDate);
|
|
if (params.asOnDate) httpParams = httpParams.set('asOnDate', params.asOnDate);
|
|
return this.http.get('/recurringdepositaccounts', { params: httpParams });
|
|
}
|
|
|
|
terminateAccount(accountId: string, data: any): Observable<any> {
|
|
return this.http.post(`/v1/accounts/${accountId}/terminate`, data);
|
|
}
|
|
}
|