From 2af2659018d08cd8685a6e727994ab76f0735189 Mon Sep 17 00:00:00 2001 From: Mqdd Date: Sun, 15 Feb 2026 11:18:35 +0700 Subject: Locator --- src/modules/result/components/ImportModal.tsx | 11 ++++++++++ src/modules/result/components/ProductModal.tsx | 4 +++- src/modules/stock-opname/index.tsx | 29 ++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 3 deletions(-) (limited to 'src/modules') diff --git a/src/modules/result/components/ImportModal.tsx b/src/modules/result/components/ImportModal.tsx index 1bb7b26..daacb55 100644 --- a/src/modules/result/components/ImportModal.tsx +++ b/src/modules/result/components/ImportModal.tsx @@ -62,6 +62,17 @@ const ImportModal = ({ modal }: Props) => {
+ +
+
ℹ️
+
+

Format File Excel:

+

Kolom 1-7: Nama, Barcode, Item Code, Qty On-hand, Qty Gudang Selisih, companyId, ID / External ID, value (per Unit)

+

Kolom 8 (opsional): Location

+
+
+ + { }) const response = await fetch(`/api/product?${searchParams}`) const data: { - products: (Product & { company: { id: number, name: string } })[], + products: (Product & { company: { id: number, name: string }, location?: { id: number, name: string } | null })[], page: number, totalPage: number } = await response.json() @@ -89,6 +89,7 @@ const ProductModal = ({ modal }: Props) => { BARCODE ON-HAND QTY DIFFERENCE QTY + LOCATION COMPANY @@ -99,6 +100,7 @@ const ProductModal = ({ modal }: Props) => { {product.barcode} {product.onhandQty} {product.differenceQty} + {(product as any).location?.name || '-'} {product.company.name} )} diff --git a/src/modules/stock-opname/index.tsx b/src/modules/stock-opname/index.tsx index 2937a98..4456b11 100644 --- a/src/modules/stock-opname/index.tsx +++ b/src/modules/stock-opname/index.tsx @@ -37,6 +37,31 @@ const StockOpname = () => { }, [form.product, form.location, setOldOpname]) + // Auto-populate location when a product with assigned location is selected + useEffect(() => { + const loadProductAndSetLocation = async () => { + if (form.product?.value) { + try { + const response = await fetch(`/api/product?search=`) + const data: { products: Product[] } = await response.json() + const selectedProduct = data?.products.find(p => p.id === form.product?.value) + + if (selectedProduct && (selectedProduct as any).location && !form.location?.value) { + const location = (selectedProduct as any).location + updateForm('location', { + value: location.id, + label: location.name + }) + } + } catch (error) { + console.error('Error loading product location:', error) + } + } + } + + loadProductAndSetLocation() + }, [form.product?.value, form.location?.value, updateForm]) + const handleSelectChange = (val: SingleValue, action: ActionMeta) => { updateForm(action.name as keyof typeof form, val) } @@ -253,9 +278,9 @@ const loadProduct = async (inputValue: string) => { const response = await fetch(`/api/product?search=${inputValue}`) const data: { products: Product[] } = await response.json() || [] - return data?.products.map((product) => ({ + return data?.products.map((product: any) => ({ value: product.id, - label: `${product.itemCode ? `[${product.itemCode}]` : ''} ${product.name} ${product.barcode ? ` [${product.barcode}]` : ''}` + label: `${product.itemCode ? `[${product.itemCode}]` : ''} ${product.name} ${product.barcode ? ` [${product.barcode}]` : ''} ${product.location ? `(Lokasi: ${product.location.name})` : ''}` } )) } -- cgit v1.2.3