From a1a0b71814da15f76406c035bee1927f4cfd005c Mon Sep 17 00:00:00 2001 From: Adnan Zahir Date: Sat, 25 Apr 2026 22:47:59 +0700 Subject: [PATCH] feat: editable po_date --- .../purchase/order/PurchaseOrderDetail.tsx | 226 ++++++++++++++++-- src/services/api/purchase.ts | 13 + src/types/api/purchase/purchase.d.ts | 1 + 3 files changed, 219 insertions(+), 21 deletions(-) diff --git a/src/components/pages/purchase/order/PurchaseOrderDetail.tsx b/src/components/pages/purchase/order/PurchaseOrderDetail.tsx index 6706039c..2f8d5931 100644 --- a/src/components/pages/purchase/order/PurchaseOrderDetail.tsx +++ b/src/components/pages/purchase/order/PurchaseOrderDetail.tsx @@ -26,6 +26,8 @@ import PurchaseOrderAcceptApprovalForm from '@/components/pages/purchase/form/or import PurchaseOrderInvoice from '@/components/pages/purchase/order/PurchaseOrderInvoice'; import Card from '@/components/Card'; +import DateInput from '@/components/input/DateInput'; +import TextArea from '@/components/input/TextArea'; import { CreateAcceptApprovalRequestPayload, CreateManagerApprovalRequestPayload, @@ -96,6 +98,7 @@ const PurchaseOrderDetail = ({ const acceptRejectionModal = useModal(); const managerRejectionModal = useModal(); const editModal = useModal(); + const editPoDateModal = useModal(); const penerimaanBarangModal = useModal(); const deleteModal = useModal(); @@ -105,6 +108,9 @@ const PurchaseOrderDetail = ({ const [isDeleteLoading, setIsDeleteLoading] = useState(false); const [selectedItem, setSelectedItem] = useState(null); const [, setApprovalNotes] = useState(''); + const [managerApprovalNotes, setManagerApprovalNotes] = useState(''); + const [managerApprovalPoDate, setManagerApprovalPoDate] = useState(''); + const [editPoDate, setEditPoDate] = useState(''); const selectedRowIds = Object.keys(rowSelection).map((item) => parseInt(item) @@ -212,6 +218,8 @@ const PurchaseOrderDetail = ({ break; case 2: setApprovalNotes(''); + setManagerApprovalNotes(''); + setManagerApprovalPoDate(''); confirmationModalWithNotes.openModal(); break; case 3: @@ -414,17 +422,44 @@ const PurchaseOrderDetail = ({ deleteModal, ]); + const updatePoDateHandler = useCallback(async () => { + const purchaseRequestId = searchParams.get('purchaseId') + ? parseInt(searchParams.get('purchaseId')!) + : initialValues?.id || 1; + + if (!purchaseRequestId) { + toast.error('Purchase Request ID is required'); + return; + } + + const res = await PurchaseApi.updatePoDate(purchaseRequestId, { + po_date: editPoDate, + }); + + if (isResponseError(res)) { + toast.error(res.message || 'Gagal mengubah tanggal PO'); + return; + } + + toast.success('Tanggal PO berhasil diubah'); + setEditPoDate(''); + editPoDateModal.closeModal(); + refetchData?.(); + }, [initialValues?.id, searchParams, editPoDate, editPoDateModal, refetchData]); + // ===== APPROVAL/REJECTION HANDLERS ===== - const managerApprovalHandler = async (notes: string) => { + const managerApprovalHandler = async () => { const payload: CreateManagerApprovalRequestPayload = { action: 'APPROVED', - notes: notes || null, + notes: managerApprovalNotes || null, + po_date: managerApprovalPoDate || null, }; await createManagerApprovalHandler(payload); await refreshApprovals(); await refetchData?.(); - setApprovalNotes(''); + setManagerApprovalNotes(''); + setManagerApprovalPoDate(''); confirmationModalWithNotes.closeModal(); }; @@ -829,6 +864,45 @@ const PurchaseOrderDetail = ({ + {purchaseData.po_date && + !purchaseData.po_date.startsWith('0001') && ( +
+
+ + Tanggal PO + +
+ + :{' '} + {formatDate(purchaseData.po_date, 'DD MMM YYYY')} + + + + +
+
+
+ )} @@ -1016,27 +1090,78 @@ const PurchaseOrderDetail = ({ - {/* Confirmation Modal with Notes */} - { - setApprovalNotes(''); - confirmationModalWithNotes.closeModal(); - }, - }} - /> + > +
+
+

+ Konfirmasi Approval Manager +

+ +
+ +
+

+ Apakah Anda yakin ingin melanjutkan approval ini? +

+ + setManagerApprovalPoDate(e.target.value)} + /> + +