import { useState } from "react"; import { Alert, Badge, Button, Modal, Stack, Table, Text } from "@mantine/core"; import { FileText } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; import { warehouseService } from "@/services/warehouse.service"; import type { LastMileRecord } from "@/services/last-mile.service"; import { extractDownloadErrorMessage } from "@/components/warehouses/options"; import { openPdfBlob } from "@/components/warehouses/pdf"; interface EdrTruckExitPapersModalProps { opened: boolean; onClose: () => void; record: LastMileRecord | null; } const fmt = (value?: string | null) => value ? new Date(value).toLocaleString() : "—"; /** * Per-truck exit papers for an EDR last-mile delivery. Each assigned truck has * its own arrival, exit and weighed load, so each gets its own paper. */ export function EdrTruckExitPapersModal({ opened, onClose, record }: EdrTruckExitPapersModalProps) { const { toast } = useToast(); const [busyId, setBusyId] = useState(null); const trucks = record?.vehicleAssignments ?? []; const download = async (assignmentId: string, plate: string) => { setBusyId(assignmentId); try { const res = await warehouseService.downloadEdrTruckExitPaper(assignmentId); openPdfBlob(res.data, `exit-${plate || assignmentId}.pdf`); } catch (e) { toast({ variant: "destructive", title: "Exit paper not ready", description: await extractDownloadErrorMessage(e), }); } finally { setBusyId(null); } }; return ( Truck exit papers {record?.booking?.reference ? `· ${record.booking.reference}` : ""} } > {trucks.length === 0 ? ( No trucks assigned to this delivery yet. ) : ( Truck Containers Arrived Left Net Exit paper {trucks.map((t) => { const plate = t.vehicle?.powerPlateNo || t.vehicle?.plateNumber || "—"; const load = t.containers?.length ? t.containers.map((c) => c.containerNumber).join(", ") : (t.containerNumber ?? "bulk"); return ( {plate} {load} {fmt(t.arrivedAt)} {t.departedAt ? ( {fmt(t.departedAt)} ) : ( Still on site )} {t.netWeightTons != null ? `${t.netWeightTons} t` : "—"} ); })}
EDR handovers are generated at delivery, so an exit paper is not gated on a signature — warehouse-fee clearance still applies.
)}
); }