diff --git a/apps/edr-freight-web/backoffice/src/pages/warehouses/ContainerReturnsPage.tsx b/apps/edr-freight-web/backoffice/src/pages/warehouses/ContainerReturnsPage.tsx index a1b64132e..01cfa423f 100644 --- a/apps/edr-freight-web/backoffice/src/pages/warehouses/ContainerReturnsPage.tsx +++ b/apps/edr-freight-web/backoffice/src/pages/warehouses/ContainerReturnsPage.tsx @@ -12,6 +12,7 @@ import { Stack, Table, Text, + TextInput, Textarea, Select, Checkbox, @@ -57,6 +58,7 @@ export default function ContainerReturnsPage() { const [expanded, setExpanded] = useState(null); const [filterType, setFilterType] = useState("all"); const [returnModalOpen, setReturnModalOpen] = useState(false); + const [standaloneModalOpen, setStandaloneModalOpen] = useState(false); const [activeKey, setActiveKey] = useState(null); const { data: unloadedQueue = [], isLoading: queueLoading } = useQuery({ @@ -232,7 +234,7 @@ export default function ContainerReturnsPage() { subtitle="Empty containers returned by last-mile trucks (EDR or customer self-haul)" /> - + setFilterType(val as ReturnType)} @@ -242,6 +244,9 @@ export default function ContainerReturnsPage() { { label: "Customer Self-Haul", value: "customer" }, ]} /> + {filteredGroups.length === 0 ? ( @@ -348,6 +353,13 @@ export default function ContainerReturnsPage() { onSubmit={(payload) => createReturnsMutation.mutate(payload)} loading={createReturnsMutation.isPending} /> + + setStandaloneModalOpen(false)} + onSubmit={(payload) => createReturnsMutation.mutate(payload)} + loading={createReturnsMutation.isPending} + /> ); } @@ -493,3 +505,130 @@ function ContainerReturnModal({ opened, onClose, group, onSubmit, loading }: Con ); } + +interface StandaloneReturnModalProps { + opened: boolean; + onClose: () => void; + onSubmit: (payload: any) => void; + loading: boolean; +} + +function StandaloneReturnModal({ opened, onClose, onSubmit, loading }: StandaloneReturnModalProps) { + const [containerNumber, setContainerNumber] = useState(""); + const [returnDate, setReturnDate] = useState(new Date().toISOString().split("T")[0]); + const [warehouse, setWarehouse] = useState(null); + const [condition, setCondition] = useState(""); + const [handoverNote, setHandoverNote] = useState(""); + + const { data: warehousesResponse } = useQuery({ + queryKey: ["warehouses-list"], + queryFn: async () => { + return await warehouseService.list({}); + }, + }); + + const warehouses = (warehousesResponse as any)?.data ?? warehousesResponse ?? []; + const warehouseOptions = Array.isArray(warehouses) + ? warehouses.map((wh: any) => ({ + value: wh.id, + label: `${wh.name} ${wh.code ? `(${wh.code})` : ""}`, + })) + : []; + + const handleSubmit = () => { + if (!containerNumber || !warehouse) return; + + const selectedWarehouse = Array.isArray(warehouses) ? warehouses.find((wh: any) => wh.id === warehouse) : null; + + onSubmit({ + trucks: [ + { + bookingId: null, + customerId: null, + returnType: "CUSTOMER", + containers: [ + { + containerNumber, + returnDate, + warehouse: selectedWarehouse?.name || warehouse, + condition: condition || undefined, + handoverNote: handoverNote || undefined, + }, + ], + }, + ], + }); + + setContainerNumber(""); + setReturnDate(new Date().toISOString().split("T")[0]); + setWarehouse(null); + setCondition(""); + setHandoverNote(""); + onClose(); + }; + + return ( + + + + Record container return without booking association + + + setContainerNumber(e.currentTarget.value)} + required + /> + + setReturnDate(e.target.value)} + style={{ padding: "8px", borderRadius: "4px", border: "1px solid #ccc" }} + required + /> + +