From b4ed7d492de9a3b92d326ded1a12b79d953c6703 Mon Sep 17 00:00:00 2001 From: natib21 Date: Fri, 19 Jun 2026 06:56:07 +0000 Subject: [PATCH] fix vehicle --- .../src/components/fleet/FleetFormDialog.tsx | 12 ++- .../warehouses/DeliverInventoryModal.tsx | 80 +++++++++++++++++++ .../warehouses/InventoryWorkbench.tsx | 16 ++++ .../warehouses/ReleaseOrderModal.tsx | 62 ++++++++++++++ .../warehouses/WarehouseInventoryTable.tsx | 7 +- .../src/components/warehouses/badges.tsx | 2 + .../backoffice/src/constants/URLS.ts | 4 + .../backoffice/src/constants/apiConfig.ts | 7 +- .../backoffice/src/hooks/useWarehouses.ts | 14 ++++ .../src/pages/ruleEngine/config/resources.ts | 2 + .../warehouses/WarehouseDashboardPage.tsx | 8 ++ .../src/services/warehouse.service.ts | 10 +++ .../backoffice/src/types/warehouse.ts | 71 +++++++++++++++- 13 files changed, 281 insertions(+), 14 deletions(-) create mode 100644 apps/edr-freight-web/backoffice/src/components/warehouses/DeliverInventoryModal.tsx create mode 100644 apps/edr-freight-web/backoffice/src/components/warehouses/ReleaseOrderModal.tsx diff --git a/apps/edr-freight-web/backoffice/src/components/fleet/FleetFormDialog.tsx b/apps/edr-freight-web/backoffice/src/components/fleet/FleetFormDialog.tsx index 0df6444c9..ab9816c7e 100644 --- a/apps/edr-freight-web/backoffice/src/components/fleet/FleetFormDialog.tsx +++ b/apps/edr-freight-web/backoffice/src/components/fleet/FleetFormDialog.tsx @@ -12,7 +12,6 @@ import { Textarea, TextInput, } from "@mantine/core"; -import { DateInput } from "@mantine/dates"; import { FLEET_SELECT_NONE, type FleetFormFieldDef } from "@/pages/fleet/config/resources"; import type { FleetRecord } from "@/services/fleet/fleet.service"; @@ -165,21 +164,20 @@ const FleetFormDialog = ({ if (field.type === "date") { return ( - + value={typeof value === "string" ? value.slice(0, 10) : ""} + onChange={(e) => setValues((current) => ({ ...current, - [field.name]: date ? (date instanceof Date ? date.toISOString().split('T')[0] : date) : "", + [field.name]: e.currentTarget?.value ?? "", })) } error={error} disabled={field.disabled} - clearable - valueFormat="DD/MM/YYYY" /> ); } diff --git a/apps/edr-freight-web/backoffice/src/components/warehouses/DeliverInventoryModal.tsx b/apps/edr-freight-web/backoffice/src/components/warehouses/DeliverInventoryModal.tsx new file mode 100644 index 000000000..4b5485815 --- /dev/null +++ b/apps/edr-freight-web/backoffice/src/components/warehouses/DeliverInventoryModal.tsx @@ -0,0 +1,80 @@ +import { useEffect, useState } from 'react'; +import { Alert, Button, Group, Modal, Stack, Text, Textarea, TextInput } from '@mantine/core'; +import { Info } from 'lucide-react'; + +import { useToast } from '@/hooks/use-toast'; +import { useDeliverInventory } from '@/hooks/useWarehouses'; +import type { WarehouseInventoryItem } from '@/types/warehouse'; +import { extractErrorMessage } from './options'; + +interface DeliverInventoryModalProps { + opened: boolean; + onClose: () => void; + item: WarehouseInventoryItem | null; +} + +export function DeliverInventoryModal({ opened, onClose, item }: DeliverInventoryModalProps) { + const { toast } = useToast(); + const deliverMutation = useDeliverInventory(); + const [receiverName, setReceiverName] = useState(''); + const [remarks, setRemarks] = useState(''); + + useEffect(() => { + if (opened) { + setReceiverName(''); + setRemarks(''); + } + }, [opened, item]); + + const handleSubmit = async () => { + if (!item) return; + if (!receiverName.trim()) { + toast({ variant: 'destructive', title: 'Receiver name is required' }); + return; + } + try { + await deliverMutation.mutateAsync({ + id: item.id, + payload: { receiverName: receiverName.trim(), remarks: remarks.trim() || undefined }, + }); + toast({ title: 'Delivered — proof of delivery captured' }); + onClose(); + } catch (error) { + toast({ variant: 'destructive', title: 'Delivery failed', description: extractErrorMessage(error) }); + } + }; + + return ( + + + } color="green" variant="light"> + + A release order must already be issued. Capturing the receiver marks the goods DELIVERED. + + + setReceiverName(e.currentTarget.value)} + /> +