Files
CapaKraken/packages/api/src/router/timeline-cost-support.ts
T

41 lines
1.3 KiB
TypeScript

import type { PrismaClient } from "@capakraken/db";
import { calculateAllocation } from "@capakraken/engine";
import type {
RecurrencePattern,
WeekdayAvailability,
} from "@capakraken/shared";
import {
buildTimelineAbsenceDays,
loadTimelineCalculationRules,
} from "./timeline-cost-load-support.js";
export async function calculateTimelineAllocationDailyCost(input: {
db: PrismaClient;
resourceId: string;
lcrCents: number;
hoursPerDay: number;
startDate: Date;
endDate: Date;
availability: WeekdayAvailability;
includeSaturday?: boolean | undefined;
recurrence?: RecurrencePattern | undefined;
}): Promise<number> {
const [absenceData, calculationRules] = await Promise.all([
buildTimelineAbsenceDays(input.db, input.resourceId, input.startDate, input.endDate),
loadTimelineCalculationRules(input.db),
]);
return calculateAllocation({
lcrCents: input.lcrCents,
hoursPerDay: input.hoursPerDay,
startDate: input.startDate,
endDate: input.endDate,
availability: input.availability,
includeSaturday: input.includeSaturday ?? false,
...(input.recurrence ? { recurrence: input.recurrence } : {}),
vacationDates: absenceData.legacyVacationDates,
absenceDays: absenceData.absenceDays,
calculationRules,
}).dailyCostCents;
}