Dealer_Onboarding_Backend/src/common/utils/offboardingLwd.ts

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;
}