diff --git a/src/app/cashier/account-register/account-register.component.ts b/src/app/cashier/account-register/account-register.component.ts index 683841a11..06ce5e73d 100644 --- a/src/app/cashier/account-register/account-register.component.ts +++ b/src/app/cashier/account-register/account-register.component.ts @@ -12,6 +12,7 @@ import { FormsModule } from '@angular/forms'; import { MatIconModule } from '@angular/material/icon'; import { catchError, of } from 'rxjs'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface RegisterRow { accountId: number; @@ -83,7 +84,7 @@ export class AccountRegisterComponent implements OnInit { /** Local date — toISOString() would shift the day in any timezone behind UTC. */ private today(): string { - const d = new Date(); + const d = businessToday(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; } diff --git a/src/app/cashier/cash-clearing-transfer-summary/cash-clearing-transfer-summary.component.ts b/src/app/cashier/cash-clearing-transfer-summary/cash-clearing-transfer-summary.component.ts index 65fbf5d25..4ddc24e33 100644 --- a/src/app/cashier/cash-clearing-transfer-summary/cash-clearing-transfer-summary.component.ts +++ b/src/app/cashier/cash-clearing-transfer-summary/cash-clearing-transfer-summary.component.ts @@ -11,6 +11,7 @@ import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { AuthenticationService } from '../../core/authentication/authentication.service'; import { ExportSheetSpec, exportWorkbook } from '../cashier-export'; +import { businessToday } from 'app/core/utils/business-today'; interface SummaryRow { code: string; @@ -1316,7 +1317,7 @@ export class CashClearingTransferSummaryComponent { private dateTag = '2607'; constructor() { - const d = new Date(); + const d = businessToday(); this.asOnDate = `${String(d.getDate()).padStart(2, '0')}-${String(d.getMonth() + 1).padStart(2, '0')}-${d.getFullYear()}`; this.dateTag = `${String(d.getFullYear()).slice(-2)}${String(d.getMonth() + 1).padStart(2, '0')}`; diff --git a/src/app/cashier/cash-exchange-entry/cash-exchange-entry.component.ts b/src/app/cashier/cash-exchange-entry/cash-exchange-entry.component.ts index 383cb57d6..bede34b4b 100644 --- a/src/app/cashier/cash-exchange-entry/cash-exchange-entry.component.ts +++ b/src/app/cashier/cash-exchange-entry/cash-exchange-entry.component.ts @@ -12,6 +12,7 @@ import { FormsModule } from '@angular/forms'; import { MatIconModule } from '@angular/material/icon'; import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface Denom { id: number; @@ -63,7 +64,7 @@ export class CashExchangeEntryComponent implements OnInit { } ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.exchangeDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service.getActiveDenominations().subscribe({ next: (list) => { diff --git a/src/app/cashier/cash-settlement/cash-settlement.component.ts b/src/app/cashier/cash-settlement/cash-settlement.component.ts index 45d5c0f93..122527d6f 100644 --- a/src/app/cashier/cash-settlement/cash-settlement.component.ts +++ b/src/app/cashier/cash-settlement/cash-settlement.component.ts @@ -18,6 +18,7 @@ import { MatInputModule } from '@angular/material/input'; import { forkJoin, of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; type PageState = 'loading' | 'no-cashier' | 'needs-reconciliation' | 'already-settled' | 'form'; @@ -90,7 +91,7 @@ export class CashSettlementComponent implements OnInit { saving = false; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.settlementDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service .getTellers() diff --git a/src/app/cashier/cash-transfer/cash-transfer.component.ts b/src/app/cashier/cash-transfer/cash-transfer.component.ts index fa5de03f9..d818ad5e2 100644 --- a/src/app/cashier/cash-transfer/cash-transfer.component.ts +++ b/src/app/cashier/cash-transfer/cash-transfer.component.ts @@ -17,6 +17,7 @@ import { MatInputModule } from '@angular/material/input'; import { of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface Denom { id: number; @@ -82,7 +83,7 @@ export class CashTransferComponent implements OnInit { loadingVault = false; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.transferDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service.getActiveDenominations().subscribe({ next: (list) => { diff --git a/src/app/cashier/cashier-position/cashier-position.component.ts b/src/app/cashier/cashier-position/cashier-position.component.ts index 1ffa957b1..dc0025bdd 100644 --- a/src/app/cashier/cashier-position/cashier-position.component.ts +++ b/src/app/cashier/cashier-position/cashier-position.component.ts @@ -17,6 +17,7 @@ import { forkJoin, of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; import { AuthenticationService } from '../../core/authentication/authentication.service'; +import { businessToday } from 'app/core/utils/business-today'; interface DenomRow { denominationId: number; @@ -71,7 +72,7 @@ export class CashierPositionComponent implements OnInit { isCashierMode = false; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.asOfDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.isCashierMode = this.authService.isCashierUser(); diff --git a/src/app/cashier/clerk-share-withdrawal.service.ts b/src/app/cashier/clerk-share-withdrawal.service.ts index ff93d4294..d8eee1d70 100644 --- a/src/app/cashier/clerk-share-withdrawal.service.ts +++ b/src/app/cashier/clerk-share-withdrawal.service.ts @@ -51,6 +51,12 @@ export class ClerkShareWithdrawalService { return this.http.post(`/clerk/share-withdrawal-requests/${id}/validate`, {}); } + /** Runs the exact same checklist approve() will run, against a draft that hasn't been submitted + * yet — so the clerk sees it in the confirm dialog, before committing to the request. */ + previewValidate(data: any): Observable { + return this.http.post('/clerk/share-withdrawal-requests/preview-validate', data); + } + approve(id: number): Observable { return this.http.post(`/clerk/share-withdrawal-requests/${id}/approve`, {}); } diff --git a/src/app/cashier/closing-cash-report/closing-cash-report.component.ts b/src/app/cashier/closing-cash-report/closing-cash-report.component.ts index 929a2af27..cc31a58f6 100644 --- a/src/app/cashier/closing-cash-report/closing-cash-report.component.ts +++ b/src/app/cashier/closing-cash-report/closing-cash-report.component.ts @@ -12,6 +12,7 @@ import { FormsModule } from '@angular/forms'; import { MatIconModule } from '@angular/material/icon'; import { MatPaginatorModule, PageEvent } from '@angular/material/paginator'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; /** Day-wise denomination-wise closing cash collected from deposits. */ @Component({ @@ -204,7 +205,7 @@ export class ClosingCashReportComponent implements OnInit { } ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.date = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.load(); this.service.getTellers().subscribe({ next: (t: any[]) => (this.tellers = t || []), error: () => {} }); diff --git a/src/app/cashier/day-book/day-book.component.ts b/src/app/cashier/day-book/day-book.component.ts index 8ce3c0436..05fb8e475 100644 --- a/src/app/cashier/day-book/day-book.component.ts +++ b/src/app/cashier/day-book/day-book.component.ts @@ -13,6 +13,7 @@ import { MatIconModule } from '@angular/material/icon'; import { Router } from '@angular/router'; import { catchError, of } from 'rxjs'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; /** * Which part of the day's work a row came from. Set by the server, one per source register. @@ -95,7 +96,7 @@ export class DayBookComponent implements OnInit { /** Local date as yyyy-MM-dd — toISOString() would shift the day in any timezone behind UTC. */ private today(): string { - const d = new Date(); + const d = businessToday(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; } diff --git a/src/app/cashier/inter-cashier-transfer/inter-cashier-transfer.component.ts b/src/app/cashier/inter-cashier-transfer/inter-cashier-transfer.component.ts index 047384c84..e2b204491 100644 --- a/src/app/cashier/inter-cashier-transfer/inter-cashier-transfer.component.ts +++ b/src/app/cashier/inter-cashier-transfer/inter-cashier-transfer.component.ts @@ -17,6 +17,7 @@ import { MatInputModule } from '@angular/material/input'; import { of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface Denom { id: number; @@ -79,7 +80,7 @@ export class InterCashierTransferComponent implements OnInit { } ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.transferDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service.getActiveDenominations().subscribe({ next: (list) => { diff --git a/src/app/cashier/my-work/my-work.component.ts b/src/app/cashier/my-work/my-work.component.ts index 4dbee818f..8c0cf4bd4 100644 --- a/src/app/cashier/my-work/my-work.component.ts +++ b/src/app/cashier/my-work/my-work.component.ts @@ -14,6 +14,7 @@ import { MatDialog, MatDialogModule } from '@angular/material/dialog'; import { catchError, finalize, of } from 'rxjs'; import { CashierService } from '../cashier.service'; import { VoucherDetailDialogComponent } from './voucher-detail-dialog.component'; +import { businessToday } from 'app/core/utils/business-today'; /** What the signed-in user's part in a voucher was. */ export type MyRole = 'RAISED' | 'VERIFIED' | 'RAISED_AND_VERIFIED'; @@ -357,7 +358,7 @@ export class MyWorkComponent implements OnInit { } private todayIso(): string { - const d = new Date(); + const d = businessToday(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; } } diff --git a/src/app/cashier/reconciliation/reconciliation.component.ts b/src/app/cashier/reconciliation/reconciliation.component.ts index 40e4eeae2..a41c15412 100644 --- a/src/app/cashier/reconciliation/reconciliation.component.ts +++ b/src/app/cashier/reconciliation/reconciliation.component.ts @@ -18,6 +18,7 @@ import { MatTabsModule } from '@angular/material/tabs'; import { forkJoin, of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface DenomRow { denominationId: number; @@ -85,7 +86,7 @@ export class ReconciliationComponent implements OnInit { loadingHistory = false; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.reconDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service .getTellers() diff --git a/src/app/cashier/transaction-entry/transaction-entry.component.ts b/src/app/cashier/transaction-entry/transaction-entry.component.ts index 940287102..869c1435f 100644 --- a/src/app/cashier/transaction-entry/transaction-entry.component.ts +++ b/src/app/cashier/transaction-entry/transaction-entry.component.ts @@ -11,7 +11,7 @@ import { CommonModule } from '@angular/common'; import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { HttpClient, HttpParams } from '@angular/common/http'; -import { catchError, debounceTime, distinctUntilChanged, map } from 'rxjs/operators'; +import { catchError, debounceTime, distinctUntilChanged, map, timeout } from 'rxjs/operators'; import { forkJoin, of, Subject } from 'rxjs'; import { MatDialog, MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; @@ -33,6 +33,7 @@ import { import { SponsorDDService } from '../../sponsor-dd/sponsor-dd.service'; import { OrganizationService } from '../../organization/organization.service'; import { CashierIssueDdDialogComponent } from './cashier-issue-dd-dialog.component'; +import { businessToday, businessTodayIso } from 'app/core/utils/business-today'; interface TxnRow { typ: string; @@ -621,7 +622,7 @@ export class AccountStatementDialogComponent implements OnInit { @ViewChild('statementContent') statementContent!: ElementRef; - today = new Date().toISOString().slice(0, 10); + today = businessTodayIso(); fromDate = ''; toDate = this.today; @@ -1870,7 +1871,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { saving = false; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.today = `${String(d.getDate()).padStart(2, '0')}/${String(d.getMonth() + 1).padStart(2, '0')}/${d.getFullYear()}`; this.addRow(); this.loadDenominations(); @@ -2103,7 +2104,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { } private loadOpeningPosition(): void { - const d = new Date(); + const d = businessToday(); const asOfDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.cashierService .getCashierPositionForMe(asOfDate) @@ -2837,7 +2838,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { fundingAccountId: number, fundingClientId: number | null ): void { - const d = new Date(); + const d = businessToday(); const issuedDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; const isCurrent = row.acTyp === 'CA' || row.acTyp === 'CB'; const isGl = row.acTyp === 'GL'; @@ -2969,7 +2970,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const d = new Date(); + const d = businessToday(); const issuedDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; const isCurrent = row.acTyp === 'CA' || row.acTyp === 'CB'; @@ -3068,7 +3069,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const d = new Date(); + const d = businessToday(); const issuedDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; const payload = { @@ -3391,7 +3392,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const today = new Date(); + const today = businessToday(); const requestedDate = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; // Full snapshot of the CR (settlement) row exactly as the clerk filled it in — saved verbatim @@ -3425,6 +3426,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { meetingDate: shareRow.meetingDate, description: shareRow.description || null, settlementPaymentTypeId: savingsRow.paymentTypeId, + settlementMode: 'SAVINGS', settlementRowSnapshot }; @@ -3455,11 +3457,60 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { ? 'Pending Manager approval — redemption, settlement and account closure all post together on approval.' : 'Pending Manager approval — redemption and settlement both post together on approval.' ]; - this.showConfirmAlert('info', 'Confirm Share Withdrawal Request', confirmLines, 'Submit for Approval', () => + this.showShareWithdrawalConfirm(payload, confirmLines, () => this.doSubmitShareRedemptionTransfer(payload, shareRow, shares, linkedAcNo) ); } + /** + * Shows the confirm dialog with the same checklist the Manager will see when approving this + * request — fetched live from the backend (`previewValidate`) rather than re-implemented here, + * so it can never show the clerk something different from what the approver actually sees. A + * failing check is shown, not blocked: approve() enforces its own hard rules separately (e.g. + * Share Advance Collection applied), this list is advisory so problems surface to whoever can + * still fix them, before a manager's time is spent on a request that was always going to fail. + */ + private showShareWithdrawalConfirm( + payload: Record, + baseLines: string[], + onConfirm: () => void + ): void { + this.clerkShareWithdrawalService + .previewValidate(payload) + .pipe( + // A request that never resolves (slow network, server busy) must not leave the Submit + // button looking dead — the dialog still has to open, just without the checklist. + timeout(5000), + catchError(() => of({ __previewFailed: true })) + ) + .subscribe((res: any) => { + const checks: { label: string; pass: boolean; detail: string }[] = res?.checks ?? []; + // A failed call (most likely the backend not yet carrying the /preview-validate endpoint) + // says so explicitly rather than just omitting the section — a silently empty checklist + // looks identical to "everything passed, nothing to show", which is the one reading this + // must never give. + const checkLines = res?.__previewFailed ? [ + '', + '⚠ Validation checklist unavailable right now — the request can still be submitted.' + ] : checks.length ? [ + '', + 'Validation Checks (same as Manager approval):', + ...checks.map((c) => `${c.pass ? '✓' : '⚠'} ${c.label}: ${c.detail}`) + ] : []; + // baseLines ends with a blank line followed by the "Pending Manager approval…" footer + // sentence, which must stay last so the modal renders it as a footnote rather than a + // key/value row — so the checklist is spliced in just before that pair, not appended after. + const footerStart = + baseLines.length >= 2 && baseLines[baseLines.length - 2] === '' ? baseLines.length - 2 : baseLines.length; + const lines = [ + ...baseLines.slice(0, footerStart), + ...checkLines, + ...baseLines.slice(footerStart) + ]; + this.showConfirmAlert('info', 'Confirm Share Withdrawal Request', lines, 'Submit for Approval', onConfirm); + }); + } + /** * Share redemption settled to a GL account the clerk picks on the CR row, instead of the * member's linked savings account — mirrors submitShareRedemptionTransfer() above, but the @@ -3512,7 +3563,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const today = new Date(); + const today = businessToday(); const requestedDate = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; // Full snapshot of the CR (settlement) row exactly as the clerk filled it in — saved verbatim @@ -3571,7 +3622,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { ? 'Pending Manager approval — redemption, settlement and account closure all post together on approval.' : 'Pending Manager approval — redemption and settlement both post together on approval.' ]; - this.showConfirmAlert('info', 'Confirm Share Withdrawal Request', confirmLines, 'Submit for Approval', () => + this.showShareWithdrawalConfirm(payload, confirmLines, () => this.doSubmitShareGlSettlementTransfer(payload, shareRow, shares, glRow.acNo) ); } @@ -4173,7 +4224,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { ): void { const accountUrl = `${cfg.detail}/${accountId}${cfg.detailParams ?? '?associations=all'}`; const todayStr = (() => { - const d = new Date(); + const d = businessToday(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; })(); @@ -4549,7 +4600,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { } get todayIso(): string { - const d = new Date(); + const d = businessToday(); return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; } @@ -5071,7 +5122,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { this.sameDayChequeClearing = 0; return; } - const today = new Date(); + const today = businessToday(); const sameDay = (d: any) => { if (!d) return false; const t = Array.isArray(d) && d.length >= 3 ? new Date(d[0], d[1] - 1, d[2]) : new Date(d); @@ -5959,7 +6010,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const today = new Date(); + const today = businessToday(); const txnDate = `${String(today.getDate()).padStart(2, '0')}/${String(today.getMonth() + 1).padStart(2, '0')}/${today.getFullYear()}`; const payload: any = { @@ -6154,7 +6205,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { /** Build the withdrawal-request payload from the current row + loaded account. */ private buildWithdrawalPayload(row: TxnRow, amount: number): any { - const today = new Date(); + const today = businessToday(); const txnDateIso = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; const selectedPt = this.paymentTypes.find((p: any) => p.id === row.paymentTypeId); @@ -6259,7 +6310,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { /** Build the deposit-request payload from the current row + loaded account. */ private buildDepositPayload(row: TxnRow, amount: number): any { - const today = new Date(); + const today = businessToday(); const txnDateIso = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; const selectedPt = this.paymentTypes.find((p: any) => p.id === row.paymentTypeId); // Send denominations only for cash payments — stale counts on a cheque @@ -6370,7 +6421,7 @@ export class TransactionEntryComponent implements OnInit, OnDestroy { return; } - const today = new Date(); + const today = businessToday(); const txnDate = `${String(today.getDate()).padStart(2, '0')}/${String(today.getMonth() + 1).padStart(2, '0')}/${today.getFullYear()}`; const txnDateIso = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; diff --git a/src/app/cashier/vault-position/vault-position.component.ts b/src/app/cashier/vault-position/vault-position.component.ts index d91cbdb2d..064d8b58d 100644 --- a/src/app/cashier/vault-position/vault-position.component.ts +++ b/src/app/cashier/vault-position/vault-position.component.ts @@ -16,6 +16,7 @@ import { MatInputModule } from '@angular/material/input'; import { of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; interface DenomRow { denominationId: number; @@ -67,7 +68,7 @@ export class VaultPositionComponent implements OnInit { errorMsg = ''; ngOnInit(): void { - const d = new Date(); + const d = businessToday(); this.asOfDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; this.service diff --git a/src/app/cashier/voucher-report/voucher-report.component.ts b/src/app/cashier/voucher-report/voucher-report.component.ts index 8444b2813..d6c148d91 100644 --- a/src/app/cashier/voucher-report/voucher-report.component.ts +++ b/src/app/cashier/voucher-report/voucher-report.component.ts @@ -13,6 +13,7 @@ import { ActivatedRoute } from '@angular/router'; import { MatIconModule } from '@angular/material/icon'; import { catchError, of } from 'rxjs'; import { CashierService } from '../cashier.service'; +import { businessToday } from 'app/core/utils/business-today'; /** * Which side of the register a screen shows. @@ -227,7 +228,7 @@ export class VoucherReportComponent implements OnInit { } private todayIso(): string { - const now = new Date(); + const now = businessToday(); return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`; } diff --git a/src/app/clerk/share-withdrawal-request/share-withdrawal-request.component.html b/src/app/clerk/share-withdrawal-request/share-withdrawal-request.component.html index b47ead9e9..4de97690b 100644 --- a/src/app/clerk/share-withdrawal-request/share-withdrawal-request.component.html +++ b/src/app/clerk/share-withdrawal-request/share-withdrawal-request.component.html @@ -129,6 +129,31 @@ * Date of Meeting + + @if (!isReview && settlementMode === 'GL') { + + }