refactor(api): extract timeline cost support

This commit is contained in:
2026-03-31 15:04:07 +02:00
parent e1de9a3a98
commit b05758db69
4 changed files with 253 additions and 145 deletions
@@ -5,10 +5,10 @@ import {
type SplitDemandRequirementRecord,
} from "@capakraken/application";
import { Prisma, type PrismaClient } from "@capakraken/db";
import { calculateAllocation, validateShift } from "@capakraken/engine";
import type { ShiftValidationResult, WeekdayAvailability } from "@capakraken/shared";
import { validateShift } from "@capakraken/engine";
import type { ShiftValidationResult } from "@capakraken/shared";
import { TRPCError } from "@trpc/server";
import { buildAbsenceDays, loadCalculationRules } from "./timeline-allocation-mutations.js";
import { calculateTimelineAllocationDailyCost } from "./timeline-cost-support.js";
import type { TimelineShiftPlan } from "./timeline-shift-planning.js";
export interface TimelineShiftProjectRecord {
@@ -123,27 +123,16 @@ async function recalculateShiftedAssignmentDailyCost(input: {
const metadata = (input.assignment.metadata as Record<string, unknown> | null | undefined) ?? {};
const includeSaturday = (metadata.includeSaturday as boolean | undefined) ?? false;
const [shiftAbsenceData, shiftRules] = await Promise.all([
buildAbsenceDays(
input.db,
input.assignment.resourceId,
input.newStartDate,
input.newEndDate,
),
loadCalculationRules(input.db),
]);
return calculateAllocation({
return calculateTimelineAllocationDailyCost({
db: input.db,
resourceId: input.assignment.resourceId,
lcrCents: input.assignment.resource.lcrCents,
hoursPerDay: input.assignment.hoursPerDay,
startDate: input.newStartDate,
endDate: input.newEndDate,
availability: input.assignment.resource.availability as WeekdayAvailability,
availability: input.assignment.resource.availability as import("@capakraken/shared").WeekdayAvailability,
includeSaturday,
vacationDates: shiftAbsenceData.legacyVacationDates,
absenceDays: shiftAbsenceData.absenceDays,
calculationRules: shiftRules,
}).dailyCostCents;
});
}
export async function applyTimelineProjectShift(input: ApplyTimelineProjectShiftInput) {