feat(cashier): add GL denomination tracking, real-time balance, and enhanced closing report

- Save denomination breakdown for GL journal entries via new /cashier/gl-denomination endpoint
- Add payment type, date/time, teller name columns to GL Entries closing report
- Show GL badge for GL vouchers vs numeric ID for savings transactions
- Add payment type required and denomination overdraft validations for GL transactions
- Fix GL account number display in confirm dialog

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaanu423
2026-06-10 15:29:50 +05:30
co-authored by Claude Sonnet 4.6
parent 010adcb44f
commit 05cbe21542
4 changed files with 339 additions and 30 deletions
@@ -115,7 +115,12 @@
</div>
<div class="ws-f ws-f--actyp">
<label class="ws-f__lbl" title="Account Type">AC. TP.</label>
<select class="ws-f__ctl" [(ngModel)]="row.acTyp" (click)="$event.stopPropagation()">
<select
class="ws-f__ctl"
[(ngModel)]="row.acTyp"
(click)="$event.stopPropagation()"
(change)="row.acTyp === 'GL' && (row.dbCr = 'Cr')"
>
@for (a of acTypOptions; track a) {
<option [value]="a">{{ a }}</option>
}
@@ -156,6 +161,7 @@
type="button"
class="ws-seg__btn ws-seg__btn--dr"
[class.ws-seg__btn--active-dr]="row.dbCr === 'Dr'"
[disabled]="row.acTyp === 'GL'"
(click)="row.dbCr = 'Dr'"
>
DR
@@ -560,7 +566,8 @@
</div>
<div class="te-panel__body">
<div class="te-balance-row">
<span class="te-bal-num">1.</span><span class="te-bal-label">Current Balance</span>
<span class="te-bal-num">1.</span>
<span class="te-bal-label">{{ accountDetails?.glCode ? 'GL Balance' : 'Current Balance' }}</span>
<span class="te-bal-value te-bal-value--cr"
>{{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}</span
>
@@ -685,8 +692,12 @@
</div>
}
<div class="te-acs-nameblock">
<span class="te-acs-name">{{ clientDetails?.displayName ?? accountDetails?.clientName ?? '—' }}</span>
<span class="te-acs-acno">{{ accountDetails?.accountNo }}</span>
<span class="te-acs-name">{{
accountDetails?.glCode
? (accountDetails?.name ?? '—')
: (clientDetails?.displayName ?? accountDetails?.clientName ?? '—')
}}</span>
<span class="te-acs-acno">{{ accountDetails?.glCode ?? accountDetails?.accountNo }}</span>
</div>
</div>
<div class="te-acs-sep"></div>
@@ -713,7 +724,13 @@
? 'Fixed Dep.'
: selectedRow?.acTyp === 'RD'
? 'Recurring'
: '—')
: selectedRow?.acTyp === 'GL'
? (accountDetails?.type?.value ?? 'GL Account')
: selectedRow?.acTyp === 'SHR'
? 'Share'
: selectedRow?.acTyp === 'LA'
? 'Loan'
: '—')
}}</span
>
<span class="te-acs-kv"><b>Branch</b> {{ officeName ?? '—' }}</span>
@@ -1083,7 +1100,11 @@
</div>
<div class="ws-f ws-f--actyp">
<label class="ws-f__lbl">AC. TP.</label>
<select class="ws-f__ctl" [(ngModel)]="row.acTyp">
<select
class="ws-f__ctl"
[(ngModel)]="row.acTyp"
(change)="row.acTyp === 'GL' && (row.dbCr = 'Cr')"
>
@for (a of acTypOptions; track a) {
<option [value]="a">{{ a }}</option>
}
@@ -1116,6 +1137,7 @@
type="button"
class="ws-seg__btn ws-seg__btn--dr"
[class.ws-seg__btn--active-dr]="row.dbCr === 'Dr'"
[disabled]="row.acTyp === 'GL'"
(click)="$event.stopPropagation(); row.dbCr = 'Dr'"
>
DR