From 3d49947c1e94322ce7066fdfb6d906f9c238e5ee Mon Sep 17 00:00:00 2001 From: rstubryan Date: Fri, 14 Nov 2025 10:52:21 +0700 Subject: [PATCH] feat(FE-212): add manager approval requisition type and service with nullable notes --- .../form/order/PurchaseOrderForm.schema.ts | 24 ++++++++++++++ src/services/api/purchase.ts | 32 +++++++++++++++++-- src/types/api/purchase/purchase.d.ts | 6 +++- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/components/pages/purchase/form/order/PurchaseOrderForm.schema.ts b/src/components/pages/purchase/form/order/PurchaseOrderForm.schema.ts index ecdaf785..6385d2bb 100644 --- a/src/components/pages/purchase/form/order/PurchaseOrderForm.schema.ts +++ b/src/components/pages/purchase/form/order/PurchaseOrderForm.schema.ts @@ -14,6 +14,10 @@ type PurchaseRequisitionsStaffApprovalFormSchemaType = { }[]; }; +type PurchaseRequisitionsManagerApprovalFormSchemaType = { + notes: string | null; +}; + type PurchaseRequisitionsAcceptApprovalFormSchemaType = { notes: string | null; items: { @@ -124,6 +128,11 @@ const PurchaseStaffApprovalItemObjectSchema: Yup.ObjectSchema = + Yup.object({ + notes: Yup.string().nullable().default(null), + }); + const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema = Yup.object({ purchase_item: Yup.object({ @@ -277,6 +286,21 @@ export type PurchaseRequisitionsStaffApprovalFormValues = Yup.InferType< typeof PurchaseRequisitionsStaffApprovalFormSchema >; +export const PurchaseRequisitionsManagerApprovalFormSchema: Yup.ObjectSchema = + PurchaseManagerApprovalObjectSchema; + +export const PurchaseRequisitionsManagerApprovalFormDefaultValues = ( + purchase?: Purchase +): PurchaseRequisitionsManagerApprovalFormSchemaType => { + return { + notes: purchase?.notes ?? null, + }; +}; + +export type PurchaseRequisitionsManagerApprovalFormValues = Yup.InferType< + typeof PurchaseRequisitionsManagerApprovalFormSchema +>; + export const PurchaseRequisitionsAcceptApprovalFormSchema: Yup.ObjectSchema = Yup.object({ notes: Yup.string().nullable().default(null), diff --git a/src/services/api/purchase.ts b/src/services/api/purchase.ts index 4768d94f..5553844e 100644 --- a/src/services/api/purchase.ts +++ b/src/services/api/purchase.ts @@ -3,6 +3,7 @@ import { Purchase, UpdatePurchaseRequisitionsPayload, CreateStaffApprovalRequisitionsPayload, + CreateManagerApprovalRequisitionsPayload, CreateAcceptApprovalRequisitionsPayload, } from '@/types/api/purchase/purchase'; import { BaseApiService } from '@/services/api/base'; @@ -48,8 +49,6 @@ export class PurchaseRequisitionsService extends BaseApiService< } } -export const PurchaseRequisitionsApi = new PurchaseRequisitionsService(); - export class StaffApprovalService extends BaseApiService< Purchase, CreateStaffApprovalRequisitionsPayload, @@ -73,6 +72,29 @@ export class StaffApprovalService extends BaseApiService< } } +export class ManagerApprovalService extends BaseApiService< + Purchase, + CreateManagerApprovalRequisitionsPayload, + CreateManagerApprovalRequisitionsPayload +> { + constructor(basePath: string = '') { + super(basePath); + } + + async createManagerApproval( + purchaseRequisitionId: number, + payload: CreateManagerApprovalRequisitionsPayload + ): Promise | undefined> { + return await this.customRequest>( + `${purchaseRequisitionId}/approvals/manager`, + { + method: 'POST', + payload, + } + ); + } +} + export class AcceptApprovalService extends BaseApiService< Purchase, CreateAcceptApprovalRequisitionsPayload, @@ -96,10 +118,16 @@ export class AcceptApprovalService extends BaseApiService< } } +export const PurchaseRequisitionsApi = new PurchaseRequisitionsService(); + export const StaffApprovalApi = new StaffApprovalService( '/purchases/requisitions' ); +export const ManagerApprovalApi = new ManagerApprovalService( + '/purchases/requisitions' +); + export const AcceptApprovalApi = new AcceptApprovalService( '/purchases/requisitions' ); diff --git a/src/types/api/purchase/purchase.d.ts b/src/types/api/purchase/purchase.d.ts index 00546e9b..561499e2 100644 --- a/src/types/api/purchase/purchase.d.ts +++ b/src/types/api/purchase/purchase.d.ts @@ -58,7 +58,7 @@ export type CreatePurchaseRequisitionsPayload = { }; export type CreateStaffApprovalRequisitionsPayload = { - notes: string; + notes?: string | null; items: { purchase_item_id: number; price: number; @@ -66,6 +66,10 @@ export type CreateStaffApprovalRequisitionsPayload = { }[]; }; +export type CreateManagerApprovalRequisitionsPayload = { + notes?: string | null; +}; + export type CreateAcceptApprovalRequisitionsPayload = { notes?: string; items: {