chore(repo): initialize planarchy workspace
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Vacation utility functions for the engine layer.
|
||||
* These are pure functions — no DB imports.
|
||||
*/
|
||||
|
||||
export interface VacationRange {
|
||||
startDate: Date;
|
||||
endDate: Date;
|
||||
status: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given date falls within any APPROVED vacation range.
|
||||
*/
|
||||
export function isVacationDay(date: Date, vacations: VacationRange[]): boolean {
|
||||
const t = new Date(date);
|
||||
t.setHours(0, 0, 0, 0);
|
||||
const time = t.getTime();
|
||||
|
||||
for (const v of vacations) {
|
||||
if (v.status !== "APPROVED") continue;
|
||||
const start = new Date(v.startDate);
|
||||
start.setHours(0, 0, 0, 0);
|
||||
const end = new Date(v.endDate);
|
||||
end.setHours(0, 0, 0, 0);
|
||||
if (time >= start.getTime() && time <= end.getTime()) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all APPROVED vacation dates (as Date objects) that fall within [startDate, endDate].
|
||||
* Used for demand recalculation display.
|
||||
*/
|
||||
export function getVacationDatesInRange(
|
||||
startDate: Date,
|
||||
endDate: Date,
|
||||
vacations: VacationRange[],
|
||||
): Date[] {
|
||||
const result: Date[] = [];
|
||||
const approved = vacations.filter((v) => v.status === "APPROVED");
|
||||
|
||||
const current = new Date(startDate);
|
||||
current.setHours(0, 0, 0, 0);
|
||||
const end = new Date(endDate);
|
||||
end.setHours(0, 0, 0, 0);
|
||||
|
||||
while (current <= end) {
|
||||
for (const v of approved) {
|
||||
const vStart = new Date(v.startDate);
|
||||
vStart.setHours(0, 0, 0, 0);
|
||||
const vEnd = new Date(v.endDate);
|
||||
vEnd.setHours(0, 0, 0, 0);
|
||||
if (current >= vStart && current <= vEnd) {
|
||||
result.push(new Date(current));
|
||||
break;
|
||||
}
|
||||
}
|
||||
current.setDate(current.getDate() + 1);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user