95 lines
3.1 KiB
TypeScript
95 lines
3.1 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/.
|
|
*/
|
|
|
|
/** Angular Imports */
|
|
import { Injectable, inject } from '@angular/core';
|
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
import { Observable, map } from 'rxjs';
|
|
|
|
/** Custom Helpers */
|
|
import { toIsoDate } from '../core/utils/api-date';
|
|
|
|
/** One share account and the board resolution that authorised it. */
|
|
export interface BorRegisterRow {
|
|
shareAccountId: number;
|
|
accountNo: string;
|
|
clientId: number;
|
|
cifNumber: string;
|
|
clientName: string;
|
|
officeId: number | null;
|
|
officeName: string;
|
|
productName: string;
|
|
currencyCode: string;
|
|
statusEnum: number;
|
|
approvedShares: number;
|
|
pendingShares: number;
|
|
unitPrice: number;
|
|
shareValue: number;
|
|
resolutionNumber: string;
|
|
/** ISO date, or '' where no meeting date was ever recorded against the allotment. */
|
|
resolutionDate: string;
|
|
/** How many purchase tranches make up the holding. */
|
|
trancheCount: number;
|
|
submittedDate: string;
|
|
approvedDate: string;
|
|
activatedDate: string;
|
|
closedDate: string;
|
|
}
|
|
|
|
/**
|
|
* The BOR register.
|
|
*
|
|
* One call returns every account with its resolution. The share allotment report next door fetches
|
|
* each account separately and stops at two hundred, which is a limit on a register rather than on a
|
|
* page of one.
|
|
*/
|
|
@Injectable({ providedIn: 'root' })
|
|
export class BorReportService {
|
|
private http = inject(HttpClient);
|
|
|
|
getRegister(status?: number, officeId?: number): Observable<BorRegisterRow[]> {
|
|
let params = new HttpParams();
|
|
if (status != null) {
|
|
params = params.set('status', String(status));
|
|
}
|
|
if (officeId != null) {
|
|
params = params.set('officeId', String(officeId));
|
|
}
|
|
return this.http
|
|
.get<any[]>('/shareaccounts/bor-register', { params })
|
|
.pipe(map((rows) => (rows || []).map((r) => this.toRow(r))));
|
|
}
|
|
|
|
/** Dates arrive as [y, M, d] arrays; flattened to ISO so they sort and filter as strings. */
|
|
private toRow(r: any): BorRegisterRow {
|
|
return {
|
|
shareAccountId: r.shareAccountId,
|
|
accountNo: r.accountNo || '',
|
|
clientId: r.clientId,
|
|
cifNumber: r.cifNumber || '',
|
|
clientName: r.clientName || '',
|
|
officeId: r.officeId ?? null,
|
|
officeName: r.officeName || '',
|
|
productName: r.productName || '',
|
|
currencyCode: r.currencyCode || 'INR',
|
|
statusEnum: Number(r.statusEnum) || 0,
|
|
approvedShares: Number(r.approvedShares) || 0,
|
|
pendingShares: Number(r.pendingShares) || 0,
|
|
unitPrice: Number(r.unitPrice) || 0,
|
|
shareValue: Number(r.shareValue) || 0,
|
|
resolutionNumber: (r.resolutionNumber || '').trim(),
|
|
resolutionDate: toIsoDate(r.resolutionDate),
|
|
trancheCount: Number(r.trancheCount) || 0,
|
|
submittedDate: toIsoDate(r.submittedDate),
|
|
approvedDate: toIsoDate(r.approvedDate),
|
|
activatedDate: toIsoDate(r.activatedDate),
|
|
closedDate: toIsoDate(r.closedDate)
|
|
};
|
|
}
|
|
}
|