refactor(FE-208,212): enhance PurchaseOrderDetail and PurchaseOrderStaffApprovalForm to conditionally render invoice and item receipt based on approval steps

This commit is contained in:
rstubryan
2025-11-18 23:10:49 +07:00
parent 89b54f6f87
commit 25544e2e38
2 changed files with 39 additions and 12 deletions
@@ -43,7 +43,7 @@ const PurchaseOrderStaffApprovalForm = ({
if (!initialValues?.approval) return false; if (!initialValues?.approval) return false;
const currentStep = initialValues.approval.step_number; const currentStep = initialValues.approval.step_number;
return currentStep >= 4; return currentStep >= 3;
}, [initialValues?.approval]); }, [initialValues?.approval]);
const getPurchaseItemError = ( const getPurchaseItemError = (
@@ -127,7 +127,7 @@ const PurchaseOrderStaffApprovalForm = ({
onSubmit: async (values) => { onSubmit: async (values) => {
if (type === 'edit' && !canUpdatePurchaseItems) { if (type === 'edit' && !canUpdatePurchaseItems) {
setPurchaseOrderFormErrorMessage( setPurchaseOrderFormErrorMessage(
'Tidak bisa diupdate. Harus melewati step 4 dahulu (Tahapan Penerimaan Produk).' 'Tidak bisa diupdate. Harus melewati step 3 dahulu (Approval dari Manager Purchasing).'
); );
return; return;
} }
@@ -113,6 +113,20 @@ const PurchaseOrderDetail = ({
return currentStep >= 4; return currentStep >= 4;
}, [initialValues?.approval]); }, [initialValues?.approval]);
const canShowPurchaseOrderInvoice = useMemo(() => {
if (!initialValues?.approval) return false;
const currentStep = initialValues.approval.step_number;
return currentStep >= 3;
}, [initialValues?.approval]);
const canShowPenerimaanBarang = useMemo(() => {
if (!initialValues?.approval) return false;
const currentStep = initialValues.approval.step_number;
return currentStep === 5;
}, [initialValues?.approval]);
const { const {
approvals, approvals,
isLoading: approvalsLoading, isLoading: approvalsLoading,
@@ -162,6 +176,17 @@ const PurchaseOrderDetail = ({
[initialValues?.id, searchParams] [initialValues?.id, searchParams]
); );
// ===== MODAL HANDLERS =====
const handleStaffApprovalModalClose = useCallback(() => {
refreshApprovals();
staffApprovalModal.closeModal();
}, [refreshApprovals]);
const handleEditModalClose = useCallback(() => {
refreshApprovals();
editModal.closeModal();
}, [refreshApprovals]);
// ===== DELETE HANDLER ===== // ===== DELETE HANDLER =====
const deleteItemsHandler = useCallback(async () => { const deleteItemsHandler = useCallback(async () => {
const purchaseRequestId = searchParams.get('purchaseId') const purchaseRequestId = searchParams.get('purchaseId')
@@ -197,7 +222,7 @@ const PurchaseOrderDetail = ({
: `Berhasil menghapus ${itemIdsToDelete.length} item pembelian`; : `Berhasil menghapus ${itemIdsToDelete.length} item pembelian`;
toast.success(successMessage); toast.success(successMessage);
refreshApprovals();
deleteModal.closeModal(); deleteModal.closeModal();
setSelectedItem(null); setSelectedItem(null);
setRowSelection({}); setRowSelection({});
@@ -574,7 +599,7 @@ const PurchaseOrderDetail = ({
Nomor PO Nomor PO
</span> </span>
<div className='ml-3'> <div className='ml-3'>
{canUpdatePurchaseItems && {canShowPurchaseOrderInvoice &&
purchaseData.po_number && purchaseData.po_number &&
purchaseData.po_number !== 'Belum dibuat' ? ( purchaseData.po_number !== 'Belum dibuat' ? (
<PurchaseOrderInvoice data={purchaseData} /> <PurchaseOrderInvoice data={purchaseData} />
@@ -596,7 +621,7 @@ const PurchaseOrderDetail = ({
<h3 className='text-lg font-semibold text-gray-800'> <h3 className='text-lg font-semibold text-gray-800'>
Item Pembelian Item Pembelian
</h3> </h3>
{canUpdatePurchaseItems && ( {canShowPurchaseOrderInvoice && (
<RowDropdownOptions isLast2Rows> <RowDropdownOptions isLast2Rows>
<ItemPembelianDropdown onEdit={editModal.openModal} /> <ItemPembelianDropdown onEdit={editModal.openModal} />
</RowDropdownOptions> </RowDropdownOptions>
@@ -697,11 +722,13 @@ const PurchaseOrderDetail = ({
<h3 className='text-lg font-semibold text-gray-800'> <h3 className='text-lg font-semibold text-gray-800'>
Informasi Penerimaan Barang Informasi Penerimaan Barang
</h3> </h3>
<RowDropdownOptions isLast2Rows> {canShowPenerimaanBarang && (
<PenerimaanBarangDropdown <RowDropdownOptions isLast2Rows>
onEdit={penerimaanBarangModal.openModal} <PenerimaanBarangDropdown
/> onEdit={penerimaanBarangModal.openModal}
</RowDropdownOptions> />
</RowDropdownOptions>
)}
</div> </div>
<div className='rounded-lg border border-gray-200 overflow-hidden'> <div className='rounded-lg border border-gray-200 overflow-hidden'>
<div className='overflow-x-auto'> <div className='overflow-x-auto'>
@@ -764,7 +791,7 @@ const PurchaseOrderDetail = ({
<PurchaseOrderStaffApprovalForm <PurchaseOrderStaffApprovalForm
type='add' type='add'
initialValues={purchaseData} initialValues={purchaseData}
onCancel={staffApprovalModal.closeModal} onCancel={handleStaffApprovalModalClose}
/> />
</Modal> </Modal>
@@ -794,7 +821,7 @@ const PurchaseOrderDetail = ({
<PurchaseOrderStaffApprovalForm <PurchaseOrderStaffApprovalForm
type='edit' type='edit'
initialValues={purchaseData} initialValues={purchaseData}
onCancel={editModal.closeModal} onCancel={handleEditModalClose}
/> />
</Modal> </Modal>