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:
Jaanu423
2026-06-05 10:59:34 +05:30
co-authored by Claude Sonnet 4.6
parent c8e9ab8f84
commit 9094b9a0eb
18 changed files with 2828 additions and 190 deletions
+5 -1
View File
@@ -50,6 +50,7 @@ import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
import { M3IconComponent } from '../shared/m3-ui/m3-icon/m3-icon.component';
import { VersionService } from '../system/version.service';
import { AuthenticationService } from '../core/authentication/authentication.service';
/**
* Login component.
@@ -220,6 +221,7 @@ export class LoginComponent implements OnInit, OnDestroy {
private dialog = inject(MatDialog);
private twoFactorDialogRef: MatDialogRef<TwoFactorAuthenticationComponent> | null = null;
private router = inject(Router);
private authService = inject(AuthenticationService);
private versionService = inject(VersionService);
@@ -283,7 +285,9 @@ export class LoginComponent implements OnInit, OnDestroy {
this.resetPassword = false;
this.twoFactorAuthenticationRequired = false;
this.closeTwoFactorDialog();
this.router.navigate(['/'], { replaceUrl: true });
// Cashier users go directly to the full-screen transaction entry dashboard
const destination = this.authService.isCashierUser() ? ['/cashier/transaction-entry'] : ['/'];
this.router.navigate(destination, { replaceUrl: true });
} else if (alertType === 'Tenant Changed') {
this.updateLogo();
}