mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-311): Add rejection modals and accept handler
This commit is contained in:
@@ -27,6 +27,7 @@ import PurchaseOrderInvoice from '@/components/pages/purchase/order/PurchaseOrde
|
|||||||
|
|
||||||
import Card from '@/components/Card';
|
import Card from '@/components/Card';
|
||||||
import {
|
import {
|
||||||
|
CreateAcceptApprovalRequestPayload,
|
||||||
CreateManagerApprovalRequestPayload,
|
CreateManagerApprovalRequestPayload,
|
||||||
CreateStaffApprovalRequestPayload,
|
CreateStaffApprovalRequestPayload,
|
||||||
Purchase,
|
Purchase,
|
||||||
@@ -88,6 +89,8 @@ const PurchaseOrderDetail = ({
|
|||||||
const staffApprovalModal = useModal();
|
const staffApprovalModal = useModal();
|
||||||
const staffRejectionModal = useModal();
|
const staffRejectionModal = useModal();
|
||||||
const acceptApprovalModal = useModal();
|
const acceptApprovalModal = useModal();
|
||||||
|
const acceptRejectionModal = useModal();
|
||||||
|
const managerRejectionModal = useModal();
|
||||||
const editModal = useModal();
|
const editModal = useModal();
|
||||||
const penerimaanBarangModal = useModal();
|
const penerimaanBarangModal = useModal();
|
||||||
const deleteModal = useModal();
|
const deleteModal = useModal();
|
||||||
@@ -216,6 +219,12 @@ const PurchaseOrderDetail = ({
|
|||||||
case 1:
|
case 1:
|
||||||
staffRejectionModal.openModal();
|
staffRejectionModal.openModal();
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
managerRejectionModal.openModal();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
acceptRejectionModal.openModal();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -296,6 +305,33 @@ const PurchaseOrderDetail = ({
|
|||||||
[initialValues?.id, searchParams, refetchData]
|
[initialValues?.id, searchParams, refetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const createAcceptApprovalHandler = useCallback(
|
||||||
|
async (payload: CreateAcceptApprovalRequestPayload) => {
|
||||||
|
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.acceptApproval.create(
|
||||||
|
purchaseRequestId,
|
||||||
|
payload
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isResponseError(res)) {
|
||||||
|
toast.error(res.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast.success(res?.message as string);
|
||||||
|
refreshApprovals();
|
||||||
|
refetchData?.();
|
||||||
|
},
|
||||||
|
[initialValues?.id, searchParams, refreshApprovals, refetchData]
|
||||||
|
);
|
||||||
|
|
||||||
// ===== MODAL HANDLERS =====
|
// ===== MODAL HANDLERS =====
|
||||||
const handleStaffApprovalModalClose = useCallback(() => {
|
const handleStaffApprovalModalClose = useCallback(() => {
|
||||||
refreshApprovals();
|
refreshApprovals();
|
||||||
@@ -1026,6 +1062,61 @@ const PurchaseOrderDetail = ({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* Accept Rejection Modal */}
|
||||||
|
<ConfirmationModalWithNotes
|
||||||
|
ref={acceptRejectionModal.ref}
|
||||||
|
type='error'
|
||||||
|
text='Apakah Anda yakin ingin menolak (reject) penerimaan barang ini?'
|
||||||
|
placeholder='(Opsional) Masukkan alasan penolakan...'
|
||||||
|
rows={4}
|
||||||
|
closeOnBackdrop
|
||||||
|
primaryButton={{
|
||||||
|
text: 'Ya, Tolak',
|
||||||
|
color: 'error',
|
||||||
|
onClick: async (notes) => {
|
||||||
|
const payload: CreateAcceptApprovalRequestPayload = {
|
||||||
|
action: 'REJECTED',
|
||||||
|
notes: notes || null,
|
||||||
|
items: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
await createAcceptApprovalHandler(payload);
|
||||||
|
await refetchData?.();
|
||||||
|
acceptRejectionModal.closeModal();
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
secondaryButton={{
|
||||||
|
text: 'Batal',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Manager Rejection Modal */}
|
||||||
|
<ConfirmationModalWithNotes
|
||||||
|
ref={managerRejectionModal.ref}
|
||||||
|
type='error'
|
||||||
|
text='Apakah Anda yakin ingin menolak (reject) approval manajer untuk permintaan pembelian ini?'
|
||||||
|
placeholder='(Opsional) Masukkan alasan penolakan...'
|
||||||
|
rows={4}
|
||||||
|
closeOnBackdrop
|
||||||
|
primaryButton={{
|
||||||
|
text: 'Ya, Tolak',
|
||||||
|
color: 'error',
|
||||||
|
onClick: async (notes) => {
|
||||||
|
const payload: CreateManagerApprovalRequestPayload = {
|
||||||
|
action: 'REJECTED',
|
||||||
|
notes: notes || null,
|
||||||
|
};
|
||||||
|
|
||||||
|
await createManagerApprovalHandler(payload);
|
||||||
|
await refetchData?.();
|
||||||
|
managerRejectionModal.closeModal();
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
secondaryButton={{
|
||||||
|
text: 'Batal',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* Delete Confirmation Modal */}
|
{/* Delete Confirmation Modal */}
|
||||||
<ConfirmationModal
|
<ConfirmationModal
|
||||||
ref={deleteModal.ref}
|
ref={deleteModal.ref}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -105,7 +105,7 @@ export type CreateManagerApprovalRequestPayload = {
|
|||||||
|
|
||||||
export type CreateAcceptApprovalRequestPayload = {
|
export type CreateAcceptApprovalRequestPayload = {
|
||||||
action: 'APPROVED' | 'REJECTED';
|
action: 'APPROVED' | 'REJECTED';
|
||||||
notes?: string;
|
notes?: string | null;
|
||||||
items: {
|
items: {
|
||||||
purchase_item_id: number;
|
purchase_item_id: number;
|
||||||
received_date: string;
|
received_date: string;
|
||||||
|
|||||||
Reference in New Issue
Block a user