feat(FE-212): add manager approval requisition type and service with nullable notes

This commit is contained in:
rstubryan
2025-11-14 10:52:21 +07:00
parent 1ab72b8637
commit 3d49947c1e
3 changed files with 59 additions and 3 deletions
@@ -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<PurchaseStaffAppro
),
});
const PurchaseManagerApprovalObjectSchema: Yup.ObjectSchema<PurchaseRequisitionsManagerApprovalFormSchemaType> =
Yup.object({
notes: Yup.string().nullable().default(null),
});
const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApprovalItemSchema> =
Yup.object({
purchase_item: Yup.object({
@@ -277,6 +286,21 @@ export type PurchaseRequisitionsStaffApprovalFormValues = Yup.InferType<
typeof PurchaseRequisitionsStaffApprovalFormSchema
>;
export const PurchaseRequisitionsManagerApprovalFormSchema: Yup.ObjectSchema<PurchaseRequisitionsManagerApprovalFormSchemaType> =
PurchaseManagerApprovalObjectSchema;
export const PurchaseRequisitionsManagerApprovalFormDefaultValues = (
purchase?: Purchase
): PurchaseRequisitionsManagerApprovalFormSchemaType => {
return {
notes: purchase?.notes ?? null,
};
};
export type PurchaseRequisitionsManagerApprovalFormValues = Yup.InferType<
typeof PurchaseRequisitionsManagerApprovalFormSchema
>;
export const PurchaseRequisitionsAcceptApprovalFormSchema: Yup.ObjectSchema<PurchaseRequisitionsAcceptApprovalFormSchemaType> =
Yup.object({
notes: Yup.string().nullable().default(null),
+30 -2
View File
@@ -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<BaseApiResponse<{ message: string }> | undefined> {
return await this.customRequest<BaseApiResponse<{ message: string }>>(
`${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'
);
+5 -1
View File
@@ -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: {