feat(cashier): complete maker-checker withdrawal disbursement flow

- Clerk manually enters token no with today-date unique validation (backend enforced)
- Cashier token lookup: auto-fill amount/account, lock amount field, status-specific errors
- Confirm dialog shows CASH DISBURSEMENT (blue) with no balance re-deduction warning
- Disbursement denomination saved to m_savings_txn_denomination for vault position update
- Block direct cashier withdrawal without approved maker-checker token
- DISBURSED status shown in My Requests and Checker inbox views with cashier/time info
- Remove getNextToken() service method and m_daily_token_counter table (0326 migration)
- Race condition protection: UPDATE WHERE status=APPROVED prevents double disbursement

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaanu423
2026-06-11 15:57:33 +05:30
co-authored by Claude Sonnet 4.6
parent de420bb8ab
commit 61cb09f352
26 changed files with 4822 additions and 248 deletions
+19
View File
@@ -35,6 +35,25 @@ const routes: Routes = [
import('../clerk/clerk-dashboard/clerk-dashboard.component').then((m) => m.ClerkDashboardComponent),
data: { title: 'Clerk Dashboard', breadcrumb: 'Clerk Dashboard' }
},
{
path: 'withdrawal-request',
loadComponent: () =>
import('../clerk/withdrawal-request/withdrawal-request.component').then(
(m) => m.WithdrawalRequestComponent
),
data: { title: 'New Withdrawal Request', breadcrumb: 'New Withdrawal Request', mode: 'create' }
},
{
path: 'withdrawal-request/:id',
loadComponent: () =>
import('../clerk/withdrawal-edit/withdrawal-edit.component').then((m) => m.WithdrawalEditComponent),
data: { title: 'Edit Withdrawal Request', breadcrumb: 'Edit Withdrawal Request' }
},
{
path: 'withdrawal-requests',
loadComponent: () => import('../clerk/my-requests/my-requests.component').then((m) => m.MyRequestsComponent),
data: { title: 'My Withdrawal Requests', breadcrumb: 'My Withdrawal Requests' }
},
{
path: 'account-facilities',
loadComponent: () =>