feat: cash-only registers, day book sections and DD amendments
This commit is contained in:
@@ -38,6 +38,38 @@ export class ClosingCashReportComponent implements OnInit {
|
||||
loading = false;
|
||||
loaded = false;
|
||||
|
||||
/**
|
||||
* Cash taken at the counter for a Demand Draft.
|
||||
*
|
||||
* A cash DD asks for a denomination breakdown but does not require one, and this report is built
|
||||
* entirely from breakdowns — so that cash was missing from the drawer figure even though the
|
||||
* ledger held it and the cashier held the notes. It is counted from the request itself and shown
|
||||
* on its own line, because the denomination rows below cannot account for it.
|
||||
*/
|
||||
ddCashTotal = 0;
|
||||
ddCashCount = 0;
|
||||
/** Deposits including the DD cash — the figure the drawer is actually checked against. */
|
||||
depositTotalWithDd = 0;
|
||||
|
||||
/**
|
||||
* The drawer, opening to closing.
|
||||
*
|
||||
* `netTotal` above is only the day's counter movement — deposits less withdrawals. It is not what
|
||||
* the cashier is holding, because it carries nothing forward from yesterday and ignores vault
|
||||
* allocations and inter-cashier legs. The closing balance is the figure that has to match a
|
||||
* physical count at the end of the day, so it is reported separately rather than inferred from
|
||||
* the counter totals.
|
||||
*
|
||||
* Null when the server did not scope the report to one cashier: a branch-wide opening balance is
|
||||
* the branch day register's business, not this report's.
|
||||
*/
|
||||
openingBalance: number | null = null;
|
||||
closingBalance: number | null = null;
|
||||
/** Every leg of the day's cash movement, which is wider than deposits less withdrawals. */
|
||||
cashMovement: number | null = null;
|
||||
/** Whether the figures above are one cashier's drawer or the whole branch's counter work. */
|
||||
scopedToCashier = false;
|
||||
|
||||
// GL View
|
||||
showGl = false;
|
||||
glRows: any[] = [];
|
||||
@@ -66,6 +98,33 @@ export class ClosingCashReportComponent implements OnInit {
|
||||
get noteRows(): any[] {
|
||||
return this.rows.filter((r) => r.kind !== 'coin');
|
||||
}
|
||||
|
||||
/**
|
||||
* Totals for the notes table, including the un-itemised Demand Draft cash.
|
||||
*
|
||||
* The DD row carries an amount but no piece count, so pieces and amounts are summed separately
|
||||
* rather than one being derived from the other — a denomination times a count would not reach the
|
||||
* DD's figure, and adding a fictional count to make it balance would misstate the drawer.
|
||||
*/
|
||||
get noteDepositCount(): number {
|
||||
return this.noteRows.reduce((s, r) => s + Number(r.depositCount ?? 0), 0);
|
||||
}
|
||||
|
||||
get noteDepositAmount(): number {
|
||||
return this.noteRows.reduce((s, r) => s + Number(r.depositAmount ?? 0), 0) + this.ddCashTotal;
|
||||
}
|
||||
|
||||
get noteWithdrawalCount(): number {
|
||||
return this.noteRows.reduce((s, r) => s + Number(r.withdrawalCount ?? 0), 0);
|
||||
}
|
||||
|
||||
get noteWithdrawalAmount(): number {
|
||||
return this.noteRows.reduce((s, r) => s + Number(r.withdrawalAmount ?? 0), 0);
|
||||
}
|
||||
|
||||
get noteNetAmount(): number {
|
||||
return this.noteDepositAmount - this.noteWithdrawalAmount;
|
||||
}
|
||||
get coinRows(): any[] {
|
||||
return this.rows.filter((r) => r.kind === 'coin');
|
||||
}
|
||||
@@ -92,6 +151,15 @@ export class ClosingCashReportComponent implements OnInit {
|
||||
this.depositTotal = Number(res?.depositTotal || 0);
|
||||
this.withdrawalTotal = Number(res?.withdrawalTotal || 0);
|
||||
this.netTotal = Number(res?.netTotal || 0);
|
||||
this.ddCashTotal = Number(res?.ddCashTotal || 0);
|
||||
this.ddCashCount = Number(res?.ddCashCount || 0);
|
||||
this.depositTotalWithDd = Number(res?.depositTotalWithDd ?? res?.depositTotal ?? 0);
|
||||
this.scopedToCashier = res?.scopedToCashier === true;
|
||||
// Sent only for a cashier-scoped call, and read as absent rather than zero when missing —
|
||||
// a zero opening balance and no opening balance at all are different statements.
|
||||
this.openingBalance = res?.openingBalance == null ? null : Number(res.openingBalance);
|
||||
this.closingBalance = res?.closingBalance == null ? null : Number(res.closingBalance);
|
||||
this.cashMovement = res?.cashMovement == null ? null : Number(res.cashMovement);
|
||||
this.loading = false;
|
||||
this.loaded = true;
|
||||
},
|
||||
@@ -101,6 +169,13 @@ export class ClosingCashReportComponent implements OnInit {
|
||||
this.depositTotal = 0;
|
||||
this.withdrawalTotal = 0;
|
||||
this.netTotal = 0;
|
||||
this.ddCashTotal = 0;
|
||||
this.ddCashCount = 0;
|
||||
this.depositTotalWithDd = 0;
|
||||
this.scopedToCashier = false;
|
||||
this.openingBalance = null;
|
||||
this.closingBalance = null;
|
||||
this.cashMovement = null;
|
||||
this.loading = false;
|
||||
this.loaded = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user