diff --git a/apps/edr-freight-web/portal/src/pages/bookings/BookingDetailPage/ReadonlyBookingView.tsx b/apps/edr-freight-web/portal/src/pages/bookings/BookingDetailPage/ReadonlyBookingView.tsx index b8f279f59..403dc43bb 100644 --- a/apps/edr-freight-web/portal/src/pages/bookings/BookingDetailPage/ReadonlyBookingView.tsx +++ b/apps/edr-freight-web/portal/src/pages/bookings/BookingDetailPage/ReadonlyBookingView.tsx @@ -34,6 +34,7 @@ import { MileSummaryCard } from "./components/MileSummaryCard"; import { BodyGrid, PageShell } from "./components/layout"; import { CancelledBanner, + ActionRequiredBanner, ConsolidationPairedNotice, ConsolidationWaitingBanner, } from "./components/Notices"; @@ -162,6 +163,9 @@ export function ReadonlyBookingView({ "DOCUMENTS_UNDER_REVIEW", "CLEARANCE_READY", "OPERATION_REQUESTED", + // Operations returned the order — same card hosts the pick-a-new-day + + // resubmit flow. + "OPERATION_CHANGES_REQUESTED", ].includes(status); // Paired: a consolidation partner was found and the booking resumed the normal // flow. Surface the "partner found" reassurance only in the early stages, @@ -234,7 +238,14 @@ export function ReadonlyBookingView({ priceLabel={pricing ? priceTotal(pricing) : undefined} /> ) : ( - + + {status === "OPERATION_CHANGES_REQUESTED" && + booking.latestChangeRequestNote ? ( + + {booking.latestChangeRequestNote} + + ) : undefined} + )} {showPairedNotice && } diff --git a/apps/edr-freight-web/portal/src/pages/bookings/clearance/ClearanceFlow.tsx b/apps/edr-freight-web/portal/src/pages/bookings/clearance/ClearanceFlow.tsx index a1d2cafd8..ee96799b3 100644 --- a/apps/edr-freight-web/portal/src/pages/bookings/clearance/ClearanceFlow.tsx +++ b/apps/edr-freight-web/portal/src/pages/bookings/clearance/ClearanceFlow.tsx @@ -85,7 +85,12 @@ export function ClearanceFlow({ booking, flow, footer }: ClearanceFlowProps) { return ( - {isReady ? ( + {status === "OPERATION_CHANGES_REQUESTED" ? ( + } mb="md"> + Operations returned this order for changes. Review their note, pick a + new shipment day below and resubmit. + + ) : isReady ? ( } mb="md"> {needsCompletion ? "Clearance is finalized. Complete your booking now — enter the cargo details and pick a shipment day inside an open booking window." diff --git a/apps/edr-freight-web/portal/src/pages/bookings/clearance/bookingNextAction.ts b/apps/edr-freight-web/portal/src/pages/bookings/clearance/bookingNextAction.ts index d0256510a..ea70e2fa9 100644 --- a/apps/edr-freight-web/portal/src/pages/bookings/clearance/bookingNextAction.ts +++ b/apps/edr-freight-web/portal/src/pages/bookings/clearance/bookingNextAction.ts @@ -89,6 +89,12 @@ function actionByStatus(booking: ActionBooking): BookingNextAction | null { label: "Schedule & proceed", title: "Schedule your shipment", }; + case "OPERATION_CHANGES_REQUESTED": + return { + kind: "SCHEDULE_OPERATION", + label: "Choose day & resubmit", + title: "Resubmit your shipment", + }; default: return null; } diff --git a/apps/edr-freight-web/portal/src/pages/bookings/clearance/useClearanceFlow.ts b/apps/edr-freight-web/portal/src/pages/bookings/clearance/useClearanceFlow.ts index 5d8143f79..c50a7c046 100644 --- a/apps/edr-freight-web/portal/src/pages/bookings/clearance/useClearanceFlow.ts +++ b/apps/edr-freight-web/portal/src/pages/bookings/clearance/useClearanceFlow.ts @@ -98,7 +98,10 @@ export function useClearanceFlow(booking: Freight.IBooking) { [clearance], ); - const isReady = status === "CLEARANCE_READY"; + // OPERATION_CHANGES_REQUESTED re-opens the same pick-a-day flow: the + // customer resubmits via the same clearance/proceed endpoint. + const isReady = + status === "CLEARANCE_READY" || status === "OPERATION_CHANGES_REQUESTED"; // Bare initiated instance: created with no cargo and no price; completion // (cargo + shipment day + window check) happens on the full booking form. const isBareInstance =