48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { Prisma } from "@capakraken/db";
|
|
|
|
export type TimelineBatchShiftMode = "move" | "resize-start" | "resize-end";
|
|
|
|
export function shiftTimelineAllocationWindow(input: {
|
|
startDate: Date;
|
|
endDate: Date;
|
|
daysDelta: number;
|
|
mode: TimelineBatchShiftMode;
|
|
}): { startDate: Date; endDate: Date } {
|
|
const startDate = new Date(input.startDate);
|
|
const endDate = new Date(input.endDate);
|
|
|
|
if (input.mode === "move") {
|
|
startDate.setDate(startDate.getDate() + input.daysDelta);
|
|
endDate.setDate(endDate.getDate() + input.daysDelta);
|
|
return { startDate, endDate };
|
|
}
|
|
|
|
if (input.mode === "resize-start") {
|
|
startDate.setDate(startDate.getDate() + input.daysDelta);
|
|
if (startDate > endDate) {
|
|
startDate.setTime(endDate.getTime());
|
|
}
|
|
return { startDate, endDate };
|
|
}
|
|
|
|
endDate.setDate(endDate.getDate() + input.daysDelta);
|
|
if (endDate < startDate) {
|
|
endDate.setTime(startDate.getTime());
|
|
}
|
|
|
|
return { startDate, endDate };
|
|
}
|
|
|
|
export function buildTimelineBatchShiftAuditChanges(input: {
|
|
mode: TimelineBatchShiftMode;
|
|
daysDelta: number;
|
|
count: number;
|
|
}): Prisma.InputJsonValue {
|
|
return {
|
|
operation: "batchShift",
|
|
mode: input.mode,
|
|
daysDelta: input.daysDelta,
|
|
count: input.count,
|
|
} as unknown as Prisma.InputJsonValue;
|
|
}
|