b41c1d2501
CI / Architecture Guardrails (push) Successful in 2m38s
CI / Assistant Split Regression (push) Successful in 3m33s
CI / Typecheck (push) Successful in 3m51s
CI / Lint (push) Successful in 5m2s
CI / E2E Tests (push) Has been cancelled
CI / Fresh-Linux Docker Deploy (push) Has been cancelled
CI / Release Images (push) Has been cancelled
CI / Build (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
rename(phase 1): CapaKraken → Nexus across code, UI, docs, CI (#61) Co-authored-by: Hartmut Nörenberg <hn@hartmut-noerenberg.com> Co-committed-by: Hartmut Nörenberg <hn@hartmut-noerenberg.com>
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import {
|
|
buildSplitAllocationReadModel,
|
|
type SplitAssignmentRecord,
|
|
type SplitDemandRequirementRecord,
|
|
} from "@nexus/application";
|
|
import type { ShiftInput } from "@nexus/engine";
|
|
import type { WeekdayAvailability } from "@nexus/shared";
|
|
|
|
export interface TimelineShiftWindow {
|
|
id: string;
|
|
resourceId: string;
|
|
projectId: string;
|
|
startDate: Date | string;
|
|
endDate: Date | string;
|
|
hoursPerDay: number;
|
|
status: string;
|
|
}
|
|
|
|
export interface BuildTimelineShiftPlanInput {
|
|
demandRequirements: SplitDemandRequirementRecord[];
|
|
assignments: SplitAssignmentRecord[];
|
|
allAssignmentWindows: TimelineShiftWindow[];
|
|
}
|
|
|
|
export interface TimelineShiftPlan {
|
|
validationAllocations: ShiftInput["allocations"];
|
|
}
|
|
|
|
export function buildTimelineShiftPlan({
|
|
demandRequirements,
|
|
assignments,
|
|
allAssignmentWindows,
|
|
}: BuildTimelineShiftPlanInput): TimelineShiftPlan {
|
|
const readModel = buildSplitAllocationReadModel({
|
|
demandRequirements,
|
|
assignments,
|
|
});
|
|
|
|
const validationAllocations = readModel.assignments
|
|
.filter((assignment) => assignment.resourceId !== null && assignment.resource)
|
|
.map((assignment) => {
|
|
const metadata = (assignment.metadata as Record<string, unknown> | null | undefined) ?? {};
|
|
|
|
return {
|
|
...assignment,
|
|
resource: {
|
|
...assignment.resource!,
|
|
availability: assignment.resource!.availability as WeekdayAvailability,
|
|
},
|
|
allAllocationsForResource: allAssignmentWindows.filter(
|
|
(window) => window.resourceId === assignment.resourceId,
|
|
),
|
|
includeSaturday: (metadata.includeSaturday as boolean | undefined) ?? false,
|
|
};
|
|
}) as unknown as ShiftInput["allocations"];
|
|
|
|
return {
|
|
validationAllocations,
|
|
};
|
|
}
|