@if (editMode && editRequest?.rejection_reason) {
This request was rejected by the manager. Reason: {{ editRequest.rejection_reason }} Update the details below and click “Resubmit for Approval”.
} @if (previousDayUnsettled) {
TRANSACTIONS BLOCKED — Previous day cash settlement is pending @if (unsettledSince) { (since {{ unsettledSince }}) } . Complete Cash Settlement before processing any transactions.
} @if (!morningTransferReceived && !previousDayUnsettled) {
NO CASH ALLOCATED — Morning transfer not received. Request a morning transfer from the vault before processing cash transactions.
} @if (!accountDetails && !loadingAccount) {
Transaction Entry
Eff. Date
@for (row of rows; track $index; let i = $index) {
{{ i + 1 }}
@if (isClerk && rows.length > 1) { }
Classification
Account
Payment instrument
@if (row.acTyp !== 'SHR') { ₹ }
@if (row.acTyp === 'SHR' && rowSharePrices[row.acNo]) { = ₹{{ (row.amount ?? 0) * rowSharePrices[row.acNo] | number: '1.2-2' }} @ ₹{{ rowSharePrices[row.acNo] | number: '1.2-2' }}/share }
@if (row.acTyp === 'SHR' && row.typ === 'Enter Bank Transfer') {
} @else if (row.typ !== 'Withdrawal Slip') {
}
Narration
@if (isDdCashGlRow(row)) {
DD Charges & GST — Admin Rate {{ ddGstPercentage }}%
₹
₹
₹
}
}
} @if (!isClerk && loadingWithdrawal) {
Looking up approved withdrawal request…
} @if (!isClerk && activeWithdrawalRequest) {
check_circle
Approved Withdrawal Request Linked
Token: {{ activeWithdrawalRequest.tok_no }} · Amount: ₹{{ activeWithdrawalRequest.amount | number: '1.2-2' }} · Client: {{ activeWithdrawalRequest.client_name }} · By Clerk: {{ activeWithdrawalRequest.clerk_name }} · Approved by: {{ activeWithdrawalRequest.manager_name || '—' }}
After transaction succeeds, this request will be automatically marked WITHDRAWN.
} @if (loadingAccount) {
Loading Account Fetching account details, please wait…
} @if (accountError && !loadingAccount) {
{{ accountError }}
} @if (accountDetails && !loadingAccount) {
@if (isClerk) {
Personal Information
Branch{{ officeName }}
A/c No.{{ accountDetails.accountNo }}
Name{{ clientName }}
S/D/W/H/O{{ guardianName }}
Address{{ clientAddress }}
Email{{ clientEmail }}
Last Txn{{ lastTransactionDate }}
Type{{ accountDetails.depositType?.value ?? selectedRow?.acTyp ?? '—' }}
Opening Dt{{ openingDate }}
Status{{ accountDetails.status?.value ?? '—' }}
CIF No.{{ cifNumber }}
@if (isNonIndividual) {
Constitution {{ nonPersonDetails?.constitution?.name ?? nonPersonDetails?.constitutionType?.name ?? '—' }}
Incorp. No. {{ nonPersonDetails?.incorpNo ?? nonPersonDetails?.incorporationNo ?? '—' }}
Main Business {{ nonPersonDetails?.mainBusinessLine?.name ?? nonPersonDetails?.mainBusinessLineType?.name ?? '—' }}
}
Joint A/c Holders @if (accountDetails?.modeOfOperation) { {{ modeOfOperationLabel }} }
@if (jointHolders.length === 0) { No joint holders } @for (jh of jointHolders; track jh.id ?? $index; let i = $index) {
{{ jh.displayName }} {{ jh.role ?? (jh.isPrimary || jh.primary ? 'Primary' : 'Co-Holder') }} @if (jh.sharePercentage) { {{ jh.sharePercentage }}% } @if (jh.signingAuthority) { {{ jh.signingAuthority }} }
} @if (withdrawalRule) {
{{ withdrawalRule.icon }} {{ withdrawalRule.msg }}
}
@if (!isNonIndividual) {
Nominees
@if (nominees.length === 0) { No nominees } @for (n of nominees; track n.id ?? $index) {
{{ n.nomineeDisplayName ?? '—' }} {{ n.relationshipName ?? '—' }} @if (n.percentageShare) { {{ n.percentageShare }}% } @if (n.nomineeIsMinor) { Minor }
}
} @if (isNonIndividual) {
Non-Individual Account Details @if (accountDetails?.modeOfOperation) { {{ modeOfOperationLabel }} }
@if (!accountDetails?.partners?.length) { No partners / members linked } @for (p of accountDetails?.partners ?? []; track p.id; let i = $index) {
{{ p.clientName ?? '—' }} {{ p.clientCif ?? '' }} @if (p.sharePercentage) { {{ p.sharePercentage }}% } @if (p.isMandatory) { Mandatory } @else { Optional }
} @if (withdrawalRule && isNonIndividual) {
{{ withdrawalRule.icon }} {{ withdrawalRule.msg }}
}
}
Other Information
Phone No.{{ clientPhone }}
Client ID{{ accountDetails.clientId }}
PAN{{ panNumber }}
KYC Status {{ kycStatus }}
CKYC No.{{ ckycNumber }}
Aadhaar{{ aadhaarNumber }}
Product {{ accountDetails.savingsProductName || accountDetails.depositProductName || accountDetails.productName || '—' }}
@if (selectedRow?.acTyp === 'SHR') {
No. of Shares Held{{ accountDetails.summary?.totalApprovedShares ?? 0 }}
Market Price / Share{{ currencySymbol }}{{ accountDetails.currentMarketPrice | number: '1.2-2' }}
Resolution No.{{ accountDetails.resolutionNumber || '—' }}
Linked Savings A/C No.{{ accountDetails.savingsAccountNumber || '—' }}
@if (accountDetails.linkedLoanAccountNo) {
Linked Loan A/C No.{{ accountDetails.linkedLoanAccountNo }}
} }
Account Information
1. {{ selectedRow?.acTyp === 'SHR' ? 'Share Balance' : accountDetails?.glCode ? 'GL Balance' : 'Current Balance' }} {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
2.Today's Clg. Amount {{ currencySymbol }}{{ todayClgAmount | number: '1.2-2' }}
3.Clear Balance (2-3) {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
4.Freeze Amount {{ currencySymbol }}0.00
5.Withdrawable Amt. {{ currencySymbol }}{{ withdrawableAmount | number: '1.2-2' }}
@if (accountAlerts.length > 0) {
@for (alert of accountAlerts; track $index) {
@if (alert.type === 'danger') { } @if (alert.type === 'warning') { } @if (alert.type === 'info') { } {{ alert.message }}
}
}
Net Balance {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }} CR
Opening {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
Cash Hold 0.00
Transfer Hold {{ freezeAmount | number: '1.2-2' }}
Clearing Hold 0.00
After Trans. {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
Rate {{ accountDetails.nominalAnnualInterestRate ?? 0 | number: '1.2-2' }}%
Currency {{ accountDetails.currency?.code ?? 'INR' }}
} @else {
@if (clientPhotoUrl) { Photo } @else {
}
{{ accountDetails?.glCode ? (accountDetails?.name ?? '—') : (clientDetails?.displayName ?? accountDetails?.clientName ?? '—') }} {{ accountDetails?.glCode ?? accountDetails?.accountNo }}
{{ activeDividendClaimRequest ? 'Awaiting Disbursement' : accountDetails?.subStatus?.value === 'Dormant' ? 'Dormant' : (accountDetails?.status?.value ?? '—') }} A/c {{ accountDetails?.depositType?.value || (activeDividendClaimRequest ? 'Dividend Claim' : selectedRow?.acTyp === 'CA' ? 'Current' : selectedRow?.acTyp === 'SD' ? 'Savings' : selectedRow?.acTyp === 'FD' ? 'Fixed Dep.' : selectedRow?.acTyp === 'RD' ? 'Recurring' : selectedRow?.acTyp === 'GL' ? (accountDetails?.type?.value ?? 'GL Account') : selectedRow?.acTyp === 'SHR' ? 'Share' : selectedRow?.acTyp === 'LA' ? 'Loan' : '—') }} Branch {{ officeName ?? '—' }} Product {{ activeDividendClaimRequest ? 'Dividend Cash Payout' : accountDetails?.savingsProductName || accountDetails?.depositProductName || accountDetails?.productName || '—' }} Rate {{ accountDetails?.nominalAnnualInterestRate ?? 0 | number: '1.2-2' }}% CCY {{ accountDetails?.currency?.code ?? 'INR' }}
Net Bal {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }} CR
Opening {{ currencySymbol }}{{ currentBalance | number: '1.2-2' }}
Cash Hold 0.00
Tr. Hold {{ freezeAmount | number: '1.2-2' }}
Clr. Hold 0.00
After Trans. {{ currencySymbol }}{{ clearBalance | number: '1.2-2' }}
@if (accountAlerts.length > 0) {
@for (alert of accountAlerts; track alert.message) { {{ alert.message }} }
}
} @if (!isClerk) {
Opening Position — {{ today }}
@if (!openingLoaded) { Loading… } @if (openingLoaded && openingDenoms.length === 0) { No opening position found } @if (openingLoaded && openingDenoms.length > 0) { @for (d of sortedOpeningDenoms; track d.denominationId) { @if (d.count > 0) { } }
Denomination Opening Count Amount
₹{{ d.denominationValue }} {{ d.count }} ₹{{ d.count * d.denominationValue | number: '1.2-2' }}
Total ₹{{ openingTotal | number: '1.2-2' }}
}
Denomination Entry @if (isSelectedRowDdCashGl) { Target ₹{{ ddTargetTotal | number: '1.2-2' }} } @else { @if (denominationTotal > 0) { ₹{{ denominationTotal | number: '1.2-2' }} } @if (isCashPayment && denominationTotal <= 0) { ⚠ Required for Cash } }
@for (d of allDenominations; track d.id) { }
Denomination Count Amount
{{ d.label }}
{{ subtotalFor(d) > 0 ? (subtotalFor(d) | number: '1.2-2') : '—' }}
Total ₹{{ denominationTotal | number: '1.2-2' }}
@if (isSelectedRowDdCashGl) {
@if (denominationTotal <= 0) { ⚠ Count notes/coins totalling ₹{{ ddTargetTotal | number: '1.2-2' }} } @else if (ddDenomMatchesTarget()) { ✓ Matches Total To Collect ₹{{ ddTargetTotal | number: '1.2-2' }} } @else { ⚠ Must total ₹{{ ddTargetTotal | number: '1.2-2' }} (counted ₹{{ denominationTotal | number: '1.2-2' }}) }
} @else if (denominationTotal > 0) {
}
Closing Position (Preview) @if (selectedRow?.dbCr === 'Dr' && hasWithdrawalDenomOverdraft) { ⚠ Stock Overdraft }
@if (selectedRow?.dbCr === 'Dr' && hasWithdrawalDenomOverdraft) {
Insufficient Denomination Stock — Cannot Proceed
@for (o of denominationOverdrafts; track o.label) { }
Denomination Requested Available Short
{{ o.label }} {{ o.requested }} {{ o.available }} −{{ o.shortfall }}
Adjust denomination or request vault replenishment.
} @if (closingDenoms.length === 0) { Enter denomination to see closing position } @if (closingDenoms.length > 0) { @for (d of sortedClosingDenoms; track d.denominationValue + d.kind) { }
Denomination Opening {{ selectedRow?.dbCr === 'Cr' ? '+Deposit' : '-Withdrawal' }} Closing
₹{{ d.denominationValue }} {{ d.openCount }} {{ selectedRow?.dbCr === 'Cr' ? '+' : '-' }}{{ d.entered }} {{ d.closingCount }}
Total ₹{{ openingTotal | number: '1.2-2' }} {{ selectedRow?.dbCr === 'Cr' ? '+' : '-' }}₹{{ denominationTotal | number: '1.2-2' }} ₹{{ closingTotal | number: '1.2-2' }}
}
}
Transaction Entry
Eff. Date
@for (row of rows; track $index; let i = $index) {
{{ i + 1 }}
Classification
Account
Payment instrument
@if (row.acTyp !== 'SHR') { ₹ }
@if (row.acTyp === 'SHR' && rowSharePrices[row.acNo]) { = ₹{{ (row.amount ?? 0) * rowSharePrices[row.acNo] | number: '1.2-2' }} @ ₹{{ rowSharePrices[row.acNo] | number: '1.2-2' }}/share }
@if (row.acTyp === 'SHR' && row.typ === 'Enter Bank Transfer') {
} @else {
}
Narration
@if (isDdCashGlRow(row)) {
DD Charges & GST — Admin Rate {{ ddGstPercentage }}%
₹
₹
₹
}
}
@if (reviewMode) { } @else if (editMode) { } @else { @if (isClerkCashDeposit) {
CASH DEPOSIT NOT PERMITTED — Cash deposits can only be processed by the cashier. Notes/coins denomination is managed at the cashier vault.
} }
}
@if (showRejectDialog) {
✕ Reject Withdrawal Request

Please provide a reason. The request will be sent back to the clerk for correction and resubmission.

} @if (showConfirmDialog && confirmData) {
{{ confirmData.type === 'WITHDRAWAL' ? '⬆' : '⬇' }} Confirm {{ confirmData.isDisbursement ? 'CASH DISBURSEMENT' : confirmData.type }}
Account{{ confirmData.accountNo }}
Customer{{ confirmData.clientName }}
Payment Type{{ confirmData.paymentType }}
@if (confirmData.chequeNo) {
Cheque No.{{ confirmData.chequeNo }}
} @if (confirmData.tokNo) {
Token No.{{ confirmData.tokNo }}
}
@if (confirmData.isDisbursement) {
Current Balance {{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
Disburse Amount {{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Balance already deducted at manager approval — no further deduction
} @else if (confirmData.isDepositRequest) {
Current Balance {{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
@if (confirmData.isDdCashGl) {
DD Face Value{{ confirmData.symbol }}{{ confirmData.ddFaceValue | number: '1.2-2' }}
Charges{{ confirmData.symbol }}{{ confirmData.ddCharges | number: '1.2-2' }}
GST ({{ confirmData.ddGstPercentage }}%){{ confirmData.symbol }}{{ confirmData.ddGstAmount | number: '1.2-2' }}
}
{{ confirmData.isDdCashGl ? 'Total To Collect' : 'Deposit Amount' }} +{{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Sent for manager approval — balance will be credited only after approval
} @else {
Current Balance{{ confirmData.symbol }}{{ confirmData.currentBalance | number: '1.2-2' }}
{{ confirmData.type === 'DEPOSIT' ? 'Deposit' : 'Withdrawal' }} Amount {{ confirmData.type === 'DEPOSIT' ? '+' : '−' }}{{ confirmData.symbol }}{{ confirmData.amount | number: '1.2-2' }}
Balance After {{ confirmData.symbol }}{{ confirmData.balanceAfter | number: '1.2-2' }}
}
} @if (alertModal) {
@if (alertModal.type === 'error') { } @if (alertModal.type === 'warning') { } @if (alertModal.type === 'info') { } @if (alertModal.type === 'success') { }
{{ alertModal.type === 'error' ? 'ERROR' : alertModal.type === 'warning' ? 'WARN' : alertModal.type === 'success' ? 'OK' : 'INFO' }}

{{ alertModal.title }}

@for (line of alertModal.lines; track $index) { @if ($index === 0) {

{{ line }}

} @else if (line.startsWith('⚠')) {
{{ line.slice(1).trim() }}
} @else if (line.includes(':') && $index < alertModal.lines.length - 1) {
{{ line.split(':')[0].trim() }} {{ line.split(':').slice(1).join(':').trim() }}
} @else {

{{ line }}

} }
@if (alertModal.onConfirm) { } @else { }
}