41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
/**
|
|
* Last Working Day (LWD) helpers for resignation & termination offboarding.
|
|
*/
|
|
|
|
export const LWD_FNF_READY_REMINDER_ACTION = 'LWD_FNF_READY_REMINDER';
|
|
|
|
export function normalizeDateOnly(value: Date | string | null | undefined): Date | null {
|
|
if (value == null || value === '') return null;
|
|
const d = value instanceof Date ? new Date(value) : new Date(String(value));
|
|
if (Number.isNaN(d.getTime())) return null;
|
|
d.setHours(0, 0, 0, 0);
|
|
return d;
|
|
}
|
|
|
|
export function isLwdReached(
|
|
lwd: Date | string | null | undefined,
|
|
today: Date = new Date()
|
|
): boolean {
|
|
const lwdDate = normalizeDateOnly(lwd);
|
|
if (!lwdDate) return true;
|
|
const t = normalizeDateOnly(today)!;
|
|
return t >= lwdDate;
|
|
}
|
|
|
|
export function formatLwdDisplay(lwd: Date | string | null | undefined): string {
|
|
const d = normalizeDateOnly(lwd);
|
|
if (!d) return 'N/A';
|
|
return d.toLocaleDateString('en-IN', { dateStyle: 'medium' });
|
|
}
|
|
|
|
/** Milliseconds from now until start of LWD date (00:00 local). Returns 0 if LWD is today or past. */
|
|
export function msUntilLwdMorning(lwd: Date | string): number {
|
|
const lwdDate = normalizeDateOnly(lwd);
|
|
if (!lwdDate) return 0;
|
|
const now = new Date();
|
|
const target = new Date(lwdDate);
|
|
target.setHours(8, 0, 0, 0); // 08:00 local — align with daily cron
|
|
const diff = target.getTime() - now.getTime();
|
|
return diff > 0 ? diff : 0;
|
|
}
|