add goverment booking

This commit is contained in:
Marshal
2026-07-31 01:25:47 +00:00
parent 7a72245229
commit d07a2e239e
2 changed files with 88 additions and 121 deletions

View File

@@ -196,7 +196,6 @@ export default function TrainScheduleV2DetailPage() {
const assign = useMutation(api.trainScheduling.assignBookings.mutationOptions());
const unassign = useMutation(api.trainScheduling.unassignBooking.mutationOptions());
const switchGov = useMutation(api.trainScheduling.switchGovernmentBooking.mutationOptions());
const finalize = useMutation(api.trainScheduling.finalizeSchedule.mutationOptions());
const dispatch = useMutation(api.trainScheduling.dispatchSchedule.mutationOptions());
const downloadMarshalling = useMutation({
mutationFn: ({ id, direction }: { id: string; direction?: string | null }) =>
@@ -383,7 +382,6 @@ export default function TrainScheduleV2DetailPage() {
: [];
const canEditBookings = ["DRAFT", "SCHEDULED"].includes(schedule.status);
const canFinalize = schedule.status === "DRAFT" && (schedule.bookings?.length ?? 0) > 0;
const canDispatch = schedule.status === "SCHEDULED";
// Dispatch readiness: bookings with no wagon, and wagon-loaded bookings whose
@@ -578,8 +576,8 @@ export default function TrainScheduleV2DetailPage() {
{
key: "finalize",
icon: CheckCircle2,
title: "Finalize",
subtitle: "Lock the plan & dispatch",
title: "Dispatch",
subtitle: "Review the consist & dispatch",
complete: finalizeComplete,
},
];
@@ -792,7 +790,7 @@ export default function TrainScheduleV2DetailPage() {
radius="md"
onClick={() => setActiveStep(finalizeStep)}
>
Skip to finalize
Skip to dispatch
</Button>
</Group>
) : null}
@@ -836,39 +834,12 @@ export default function TrainScheduleV2DetailPage() {
<Stack gap={2}>
<Text fw={600}>Ready to depart</Text>
<Text size="sm" c="dimmed">
Finalizing locks the plan and moves the schedule to{" "}
<Text span fw={600} c="edr-green.7">
SCHEDULED
</Text>
. Dispatch then begins rail movement and notifies the yard.
Dispatch begins rail movement and notifies the yard.
</Text>
</Stack>
</Group>
</Paper>
<Group>
{canFinalize ? (
<Button
color="edr-green"
size="md"
radius="md"
leftSection={<CheckCircle2 size={18} />}
loading={finalize.isPending}
onClick={async () => {
try {
await finalize.mutateAsync(scheduleId);
toast({ title: "Schedule finalized" });
} catch (err) {
toast({
title: "Finalize failed",
description: parseError(err, "Could not finalize"),
variant: "destructive",
});
}
}}
>
Finalize schedule
</Button>
) : null}
{canDispatch ? (
<Button
color="edr-green"
@@ -881,7 +852,7 @@ export default function TrainScheduleV2DetailPage() {
Dispatch train
</Button>
) : null}
{!canFinalize && !canDispatch ? (
{!canDispatch ? (
<Text size="sm" c="dimmed">
No actions available for this schedule status.
</Text>