feat(cashier): add full-screen cashier teller workstation dashboard
- Add Transaction Entry screen with full account details panel (personal info, joint holders, nominees, KYC, balances) - Role-based layout: CASHIER role hides nav/sidebar/ticker, redirects to /cashier/transaction-entry on login - Denomination entry with opening/closing position preview (notes first then coins, stepper +/- round button inputs) - Auto-fetch savings/current/FD/RD accounts with associations, client KYC, nominees, addresses, family members (S/D/W/H/O) - Submit deposit/withdrawal via POST /transactions with denominationBreakdown - Cashier position auto-loads for CASHIER role (no filter dropdowns) - Pagination added to cash-history tabs and currency-exchange-detail - Cashier menu simplified for cashier role permissions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
c8e9ab8f84
commit
9094b9a0eb
@@ -10,6 +10,7 @@ import { Component, OnInit, inject } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterLink } from '@angular/router';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatPaginatorModule, PageEvent } from '@angular/material/paginator';
|
||||
import { CashierService } from '../cashier.service';
|
||||
|
||||
/** Lists recorded cash exchanges (Currency Exchange Detail). */
|
||||
@@ -21,25 +22,48 @@ import { CashierService } from '../cashier.service';
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterLink,
|
||||
MatIconModule
|
||||
MatIconModule,
|
||||
MatPaginatorModule
|
||||
]
|
||||
})
|
||||
export class CurrencyExchangeDetailComponent implements OnInit {
|
||||
private service = inject(CashierService);
|
||||
|
||||
exchanges: any[] = [];
|
||||
totalRecords = 0;
|
||||
pageSize = 20;
|
||||
pageIndex = 0;
|
||||
pageSizeOptions = [
|
||||
10,
|
||||
20,
|
||||
50,
|
||||
100
|
||||
];
|
||||
loading = true;
|
||||
|
||||
ngOnInit(): void {
|
||||
this.service.getCashExchanges().subscribe({
|
||||
next: (list) => {
|
||||
this.exchanges = list || [];
|
||||
this.load();
|
||||
}
|
||||
|
||||
load(): void {
|
||||
this.loading = true;
|
||||
this.service.getCashExchanges(this.pageIndex * this.pageSize, this.pageSize).subscribe({
|
||||
next: (res: any) => {
|
||||
this.exchanges = res.pageItems ?? [];
|
||||
this.totalRecords = res.totalFilteredRecords ?? 0;
|
||||
this.loading = false;
|
||||
},
|
||||
error: () => {
|
||||
this.exchanges = [];
|
||||
this.totalRecords = 0;
|
||||
this.loading = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onPageChange(event: PageEvent): void {
|
||||
this.pageIndex = event.pageIndex;
|
||||
this.pageSize = event.pageSize;
|
||||
this.load();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user