feat(clerk): add collection flow — multi-DR savings to CR GL with maker-checker

- Transaction entry: detect collection mode (N DR savings → 1 CR GL) and disbursement mode (1 DR GL → N CR savings); build dbCr-tagged payload for backend
- Disbursement review: show 'GL Credit (Target)' / 'Debit Entries' labels for collection; fix double-count by summing only DR entries for collection totals; dynamic approve button text
- My disbursement requests: add DR/CR badge column in expanded credit-entries preview
- My requests / withdrawal-requests: minor consistency updates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaanu423
2026-06-16 15:28:27 +05:30
co-authored by Claude Sonnet 4.6
parent efb01d5441
commit 6cccb58c04
11 changed files with 345 additions and 102 deletions
@@ -120,7 +120,7 @@
[class.myr-row--pending]="r.status === 'PENDING'"
[class.myr-row--approved]="r.status === 'APPROVED'"
[class.myr-row--rejected]="r.status === 'REJECTED'"
[class.myr-row--disbursed]="r.status === 'DISBURSED'"
[class.myr-row--disbursed]="r.status === 'WITHDRAWN'"
>
<td class="cell-mono myr-voucher">{{ r.voucher_no || '—' }}</td>
<td class="cell-mono myr-token">{{ r.tok_no || '—' }}</td>
@@ -140,7 +140,7 @@
<span class="myr-rejection-text" [title]="r.rejection_reason">
{{ r.rejection_reason | slice: 0 : 60 }}{{ r.rejection_reason?.length > 60 ? '…' : '' }}
</span>
} @else if (r.status === 'DISBURSED') {
} @else if (r.status === 'WITHDRAWN') {
<div class="myr-disbursed-info">
<span class="myr-disbursed-cashier">{{ r.disbursed_by || '—' }}</span>
<span class="myr-dt">{{ formatDateTime(r.disbursed_at) }}</span>
@@ -81,7 +81,7 @@ export class MyRequestsComponent implements OnInit {
{ value: 'PENDING', label: 'Pending' },
{ value: 'APPROVED', label: 'Approved' },
{ value: 'REJECTED', label: 'Rejected' },
{ value: 'DISBURSED', label: 'Disbursed' }
{ value: 'WITHDRAWN', label: 'Disbursed' }
];
}
@@ -191,7 +191,7 @@ export class MyRequestsComponent implements OnInit {
PENDING: 'myr-status--pending',
APPROVED: 'myr-status--approved',
REJECTED: 'myr-status--rejected',
DISBURSED: 'myr-status--disbursed'
WITHDRAWN: 'myr-status--disbursed'
};
return map[status] ?? '';
}
@@ -201,7 +201,7 @@ export class MyRequestsComponent implements OnInit {
PENDING: 'Pending Approval',
APPROVED: 'Approved',
REJECTED: 'Rejected',
DISBURSED: 'Disbursed'
WITHDRAWN: 'Withdrawn'
};
return map[status] ?? status;
}