/** * 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 { Resolve } from '@angular/router'; import { Observable, forkJoin, of } from 'rxjs'; import { map, catchError } from 'rxjs/operators'; import { TasksService } from '../tasks.service'; @Injectable() export class GetPendingAccounts implements Resolve { private tasksService = inject(TasksService); resolve(): Observable { return forkJoin({ savings: this.tasksService.getPendingSavingsAccounts().pipe(catchError(() => of({ pageItems: [] }))), current: this.tasksService.getPendingCurrentAccounts().pipe(catchError(() => of([]))), offices: this.tasksService.getAllOffices().pipe(catchError(() => of([]))) }).pipe( map((results) => { const officeMap: Record = {}; (results.offices || []).forEach((o: any) => { officeMap[o.id] = o.name; }); const savingsItems = (results.savings?.pageItems || []).map((a: any) => ({ ...a, officeName: officeMap[a.officeId] || a.officeName || '', fieldOfficerName: a.fieldOfficerName || '', accountType: a.depositType?.value || 'Savings' })); const currentItems = (Array.isArray(results.current) ? results.current : results.current?.pageItems || []).map( (a: any) => ({ ...a, accountType: 'Current' }) ); return { pageItems: [ ...savingsItems, ...currentItems ] }; }) ); } }