@@ -761,6 +862,25 @@ export default function ContractRequestDetailPage() {
);
}
+function InfoRow({ label, value }: { label: string; value: string }) {
+ return (
+
+
+ {label}
+
+
+ {value}
+
+
+ );
+}
+
function MetaItem({
icon: Icon,
text,
diff --git a/apps/edr-freight-web/backoffice/src/pages/contracts/ContractRequestsPage.tsx b/apps/edr-freight-web/backoffice/src/pages/contracts/ContractRequestsPage.tsx
index bb2e14036..6bbee237b 100644
--- a/apps/edr-freight-web/backoffice/src/pages/contracts/ContractRequestsPage.tsx
+++ b/apps/edr-freight-web/backoffice/src/pages/contracts/ContractRequestsPage.tsx
@@ -34,7 +34,10 @@ import { useCallback, useMemo, useState } from "react";
import { useNavigate } from "react-router-dom";
import { ContractApprovalProgressCell } from "@/components/contracts/ContractApprovalProgressCell";
-import { ContractStatusBadge } from "@/components/contracts/ContractStatusBadge";
+import {
+ ContractCourtBadge,
+ ContractStatusBadge,
+} from "@/components/contracts/ContractStatusBadge";
import {
ContractStatusTabs,
type ContractStatusTabKey,
@@ -334,6 +337,19 @@ export default function ContractRequestsPage() {
),
},
+ {
+ id: "court",
+ size: COLUMN_WIDTH,
+ meta: COLUMN_META,
+ header: () => (
+ Waiting on
+ ),
+ cell: ({ row }) => (
+
+
+
+ ),
+ },
{
id: "approval",
size: COLUMN_WIDTH,
@@ -666,7 +682,7 @@ export default function ContractRequestsPage() {
}}
// table-fixed makes the per-column 120px widths stick; without
// it auto-layout re-widens columns once cells wrap.
- containerClassName="border-0 shadow-none bg-transparent [&_table]:table-fixed [&_table]:min-w-[840px]"
+ containerClassName="border-0 shadow-none bg-transparent [&_table]:table-fixed [&_table]:min-w-[960px]"
footer={DataTableFooter}
/>
diff --git a/apps/edr-freight-web/backoffice/src/pages/contracts/GlClearanceDetailPage.tsx b/apps/edr-freight-web/backoffice/src/pages/contracts/GlClearanceDetailPage.tsx
index 5f99b90fe..a501cd50a 100644
--- a/apps/edr-freight-web/backoffice/src/pages/contracts/GlClearanceDetailPage.tsx
+++ b/apps/edr-freight-web/backoffice/src/pages/contracts/GlClearanceDetailPage.tsx
@@ -242,23 +242,20 @@ export default function GlClearanceDetailPage() {
{/* GL Ethiopia cannot file the import customs declaration until this
- desk names the officer handling the shipment in transit, so the
- ask sits above everything else on the page. Exports have no such
- gate — Djibouti's steps come after the declaration. */}
- {isImport ? (
-
- void refetch()}
- />
-
- ) : null}
+ desk names the officer handling the shipment in transit. Exports also
+ need transit assignment at the DJ stage after ET requests it. */}
+
+ void refetch()}
+ />
+
diff --git a/apps/edr-freight-web/backoffice/src/types/trainScheduling.ts b/apps/edr-freight-web/backoffice/src/types/trainScheduling.ts
index 86b597c71..46e4b6c15 100644
--- a/apps/edr-freight-web/backoffice/src/types/trainScheduling.ts
+++ b/apps/edr-freight-web/backoffice/src/types/trainScheduling.ts
@@ -411,6 +411,12 @@ export type BookingAllocationStatus =
| "FAILED";
export interface BatchBoardBookingDetail extends BatchBoardBooking {
+ /**
+ * 0-based booking-window cycle the booking entered the pool in. Ranking is
+ * per-cycle: an earlier cycle always boards before a later one regardless of
+ * priority score. Null while the contract is still pending.
+ */
+ windowCycleNo: number | null;
fullyExecutedAt: string | null;
selectedForBatchAt: string | null;
allocationStatus: BookingAllocationStatus;
diff --git a/apps/edr-freight-web/portal/src/pages/contracts/new-contract-form/step8-review.tsx b/apps/edr-freight-web/portal/src/pages/contracts/new-contract-form/step8-review.tsx
index 4cda313b3..5aca3fc81 100644
--- a/apps/edr-freight-web/portal/src/pages/contracts/new-contract-form/step8-review.tsx
+++ b/apps/edr-freight-web/portal/src/pages/contracts/new-contract-form/step8-review.tsx
@@ -422,11 +422,13 @@ export function Step8Review({
label="Customs clearing"
value={customsValue}
/>
- }
- label="Hazardous cargo"
- value={
- values.isHazardous ? (
+ {/* Step-3 toggles appear only when the customer selected them —
+ an off toggle is left off the summary entirely. */}
+ {values.isHazardous && (
+ }
+ label="Hazardous cargo"
+ value={
<>
Yes
@@ -438,27 +440,24 @@ export function Step8Review({
>
- ) : (
- "No"
- )
- }
- />
- }
- label="Refrigerated"
- value={values.isRefrigerated ? "Yes" : "No"}
- />
- {values.cargoType === "container" && (
- }
- label="Empty-container return"
- value={
- values.equipmentReturn === "with_return"
- ? "With return"
- : "Without return"
}
/>
)}
+ {values.isRefrigerated && (
+ }
+ label="Refrigerated"
+ value="Yes"
+ />
+ )}
+ {values.cargoType === "container" &&
+ values.equipmentReturn === "with_return" && (
+ }
+ label="Empty-container return"
+ value="With return"
+ />
+ )}