diff --git a/src/components/pages/purchase/form/order/PurchaseOrderAcceptApprovalForm.tsx b/src/components/pages/purchase/form/order/PurchaseOrderAcceptApprovalForm.tsx index f0e0eff9..74eaba4d 100644 --- a/src/components/pages/purchase/form/order/PurchaseOrderAcceptApprovalForm.tsx +++ b/src/components/pages/purchase/form/order/PurchaseOrderAcceptApprovalForm.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useCallback, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { useFormik } from 'formik'; import { Icon } from '@iconify/react'; import { toast } from 'react-hot-toast'; @@ -39,18 +39,6 @@ const PurchaseOrderAcceptApprovalForm = ({ useState(''); // ===== TYPE DEFINITIONS ===== - interface PurchaseItemOptionType extends OptionType { - id: number; - quantity: number; - product: { - name: string; - product_category: string | { name: string }; - uom: { - name: string; - }; - }; - } - interface ExpeditionVendorOptionType { value: number; label: string; @@ -145,32 +133,29 @@ const PurchaseOrderAcceptApprovalForm = ({ onSubmit: async (values) => { const payload: CreateAcceptApprovalRequestPayload = { notes: values.notes || '', - items: (values.items || []).map((item) => ({ - purchase_item_id: - typeof item.purchase_item_id === 'string' - ? parseInt(item.purchase_item_id) || 0 - : item.purchase_item_id || 0, - received_date: item.received_date || '', - travel_number: item.travel_number || '', - travel_document_path: item.travel_document_path || '', - vehicle_number: item.vehicle_number || '', - expedition_vendor_id: - typeof item.expedition_vendor_id === 'string' - ? parseInt(item.expedition_vendor_id) || 0 - : item.expedition_vendor_id || 0, - received_qty: - typeof item.received_qty === 'string' - ? parseFloat(item.received_qty) || 0 - : item.received_qty || 0, - transport_per_item: - typeof item.transport_per_item === 'string' - ? parseFloat(item.transport_per_item) || 0 - : item.transport_per_item || 0, - transport_total: - typeof item.transport_total === 'string' - ? parseFloat(item.transport_total) || 0 - : item.transport_total || 0, - })), + items: + values.items?.map((formItem) => { + return { + purchase_item_id: formItem.purchase_item_id || 0, + received_date: formItem.received_date || '', + travel_number: formItem.travel_number || '', + travel_document_path: formItem.travel_document_path || '', + vehicle_number: formItem.vehicle_number || '', + expedition_vendor_id: formItem.expedition_vendor_id || 0, + received_qty: + typeof formItem.received_qty === 'string' + ? parseFloat(formItem.received_qty) || 0 + : formItem.received_qty || 0, + transport_per_item: + typeof formItem.transport_per_item === 'string' + ? parseFloat(formItem.transport_per_item) || 0 + : formItem.transport_per_item || 0, + transport_total: + typeof formItem.transport_total === 'string' + ? parseFloat(formItem.transport_total) || 0 + : formItem.transport_total || 0, + }; + }) || [], }; switch (type) { @@ -192,13 +177,13 @@ const PurchaseOrderAcceptApprovalForm = ({ if (initialValues?.items) { return initialValues.items.map((item) => ({ value: item.id, - label: `${item.product.name} (${item.quantity} ${item.product.uom?.name || 'unit'})`, + label: item.product.name, id: item.id, - quantity: item.quantity, + quantity: item.sub_qty, product: { name: item.product.name, - product_category: item.product.product_category, - uom: item.product.uom, + product_category: item.product.product_category || '', + uom: item.product.uom || { name: 'unit' }, }, })); } @@ -206,33 +191,64 @@ const PurchaseOrderAcceptApprovalForm = ({ return []; }, [initialValues?.items]); - const expeditionVendors: ExpeditionVendorOptionType[] = useMemo(() => { - return []; - }, []); + useEffect(() => { + if (purchaseItems.length > 0 && initialValues?.items) { + const updatedItems = initialValues.items.map((item) => { + return { + purchase_item: null, + purchase_item_id: item.id, + received_date: item.received_date + ? new Date(item.received_date).toISOString().split('T')[0] + : '', + travel_number: item.travel_number || '', + travel_document_path: item.travel_document_path || '', + vehicle_number: item.vehicle_number || '', + expedition_vendor: null, + expedition_vendor_id: 0, + received_qty: item.sub_qty ? item.sub_qty.toString() : '', + transport_per_item: '', + transport_total: '', + }; + }); + formik.setFieldValue('items', updatedItems); + } + }, [purchaseItems, initialValues]); - const getPurchaseItemOptions = useCallback(() => { - return purchaseItems; - }, [purchaseItems]); + const expeditionVendors: ExpeditionVendorOptionType[] = useMemo(() => { + return [ + { + value: 1, + label: 'PT. Ekspedisi Sejahtera', + id: 1, + }, + { + value: 2, + label: 'PT. Jaya Trans Logistics', + id: 2, + }, + { + value: 3, + label: 'PT. Cargo Express Indonesia', + id: 3, + }, + { + value: 4, + label: 'PT. Fast Delivery Service', + id: 4, + }, + { + value: 5, + label: 'PT. Mitra Angkutan Sejahtera', + id: 5, + }, + ]; + }, []); const getExpeditionVendorOptions = useCallback(() => { return expeditionVendors; }, [expeditionVendors]); // ===== FIELD CHANGE HANDLERS ===== - const purchaseItemChangeHandler = ( - idx: number, - val: OptionType | OptionType[] | null - ) => { - const purchaseItem = val as PurchaseItemOptionType | null; - formik.setFieldTouched(`items.${idx}.purchase_item`, true); - formik.setFieldValue(`items.${idx}.purchase_item`, purchaseItem); - formik.setFieldTouched(`items.${idx}.purchase_item_id`, true); - formik.setFieldValue( - `items.${idx}.purchase_item_id`, - (purchaseItem as OptionType)?.value || 0 - ); - }; - const expeditionVendorChangeHandler = ( idx: number, val: OptionType | OptionType[] | null @@ -298,14 +314,21 @@ const PurchaseOrderAcceptApprovalForm = ({ ? 'Konfirmasi Penerimaan Produk' : 'Edit Penerimaan Produk'} + + {/* Debug Info */} +
| - Item - * - | +Produk | +Jumlah | +Satuan | Tanggal Diterima * @@ -341,29 +364,53 @@ const PurchaseOrderAcceptApprovalForm = ({ |
|---|---|---|---|---|
|
- |
+
+ |
+
+ |
@@ -371,7 +418,7 @@ const PurchaseOrderAcceptApprovalForm = ({
required
isNestedModal={true}
name={`items.${idx}.received_date`}
- value={item.received_date || ''}
+ value={formItem?.received_date || ''}
onChange={(e) =>
formik.setFieldValue(
`items.${idx}.received_date`,
@@ -396,7 +443,7 @@ const PurchaseOrderAcceptApprovalForm = ({
required
name={`items.${idx}.travel_number`}
type='text'
- value={item.travel_number || ''}
+ value={formItem?.travel_number || ''}
onChange={(e) =>
formik.setFieldValue(
`items.${idx}.travel_number`,
@@ -422,7 +469,7 @@ const PurchaseOrderAcceptApprovalForm = ({
required
name={`items.${idx}.travel_document_path`}
type='text'
- value={item.travel_document_path || ''}
+ value={formItem?.travel_document_path || ''}
onChange={(e) =>
formik.setFieldValue(
`items.${idx}.travel_document_path`,
@@ -449,7 +496,7 @@ const PurchaseOrderAcceptApprovalForm = ({
required
name={`items.${idx}.vehicle_number`}
type='text'
- value={item.vehicle_number || ''}
+ value={formItem?.vehicle_number || ''}
onChange={(e) =>
formik.setFieldValue(
`items.${idx}.vehicle_number`,
@@ -474,7 +521,7 @@ const PurchaseOrderAcceptApprovalForm = ({
|