/** * 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 { Component, OnInit, ViewChild, inject } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatTableDataSource, MatTable, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow } from '@angular/material/table'; import { ActivatedRoute } from '@angular/router'; /** Custom Services */ import { CurrentAccountsService } from 'app/current-accounts/current-accounts.service'; import { AccountTransfersService } from 'app/account-transfers/account-transfers.service'; import { SettingsService } from 'app/settings/settings.service'; /** Dialog Components */ import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; import { MatTooltip } from '@angular/material/tooltip'; import { DateFormatPipe } from '../../../pipes/date-format.pipe'; import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module'; /** * Current Account Standing Instructions Tab */ @Component({ selector: 'mifosx-standing-instructions-tab', templateUrl: './standing-instructions-tab.component.html', styleUrls: ['./standing-instructions-tab.component.scss'], imports: [ ...STANDALONE_SHARED_IMPORTS, MatTable, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, MatTooltip, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow, DateFormatPipe ] }) export class StandingInstructionsTabComponent implements OnInit { private route = inject(ActivatedRoute); private currentAccountsService = inject(CurrentAccountsService); private dialog = inject(MatDialog); private accountTransfersService = inject(AccountTransfersService); private settingsService = inject(SettingsService); /** Current Account Data */ currentAccountData: any; /** Instructions Data */ instructionsData: any[]; /** Data source for instructions table. */ dataSource = new MatTableDataSource(); /** Columns to be displayed in instructions table. */ displayedColumns: string[] = [ 'client', 'fromAccount', 'beneficiary', 'toAccount', 'amount', 'validity', 'actions' ]; /** Instruction Table Reference */ @ViewChild('instructionsTable', { static: true }) instructionTableRef: MatTable; /** * Retrieves Current Account Data from `resolve`. * @param {ActivatedRoute} route Activated Route. * @param {SettingsService} settingsService Setting service */ constructor() { this.route.parent.data.subscribe((data: { currentAccountData: any }) => { this.currentAccountData = data.currentAccountData; }); } ngOnInit() { this.getStandingInstructions(); } /** * Retrieves standing instructions and initializes instructions table. */ getStandingInstructions() { const clientId = this.currentAccountData.clientId; const clientName = this.currentAccountData.clientName; const accountId = this.currentAccountData.id; const locale = this.settingsService.language.code; const dateFormat = this.settingsService.dateFormat; this.currentAccountsService .getStandingInstructions(clientId, clientName, accountId, locale, dateFormat) .subscribe((response: any) => { this.instructionsData = response.pageItems; this.dataSource.data = this.instructionsData; this.instructionTableRef.renderRows(); }); } deleteStandingInstruction(instructionId: any) { const deleteStandingInstructionDialogRef = this.dialog.open(DeleteDialogComponent, { data: { deleteContext: `standing instruction id: ${instructionId}` } }); deleteStandingInstructionDialogRef.afterClosed().subscribe((response: any) => { if (response.delete) { this.accountTransfersService.deleteStandingInstrucions(instructionId).subscribe(() => {}); } }); } }