refactor(FE-208,212,213): replace product_id and warehouse_id with purchase_item_id in PurchaseRequestStaffApprovalForm and related schemas

This commit is contained in:
rstubryan
2025-11-20 23:21:12 +07:00
parent a6d187a8b3
commit b2ef545f63
3 changed files with 33 additions and 59 deletions
@@ -2,11 +2,10 @@ import * as Yup from 'yup';
import { Purchase } from '@/types/api/purchase/purchase'; import { Purchase } from '@/types/api/purchase/purchase';
type PurchaseRequestStaffApprovalFormSchemaType = { type PurchaseRequestStaffApprovalFormSchemaType = {
action: 'APPROVED' | 'REJECTED';
notes: string | null; notes: string | null;
items: { items: {
purchase_item_id?: number; purchase_item_id?: number;
product_id: number;
warehouse_id: number;
qty: number; qty: number;
price: number | string; price: number | string;
total_price: number | string; total_price: number | string;
@@ -42,8 +41,6 @@ type PurchaseRequestAcceptApprovalFormSchemaType = {
export type PurchaseStaffApprovalItemSchema = { export type PurchaseStaffApprovalItemSchema = {
purchase_item_id?: number; purchase_item_id?: number;
product_id: number;
warehouse_id: number;
qty: number; qty: number;
price: number | string; price: number | string;
total_price: number | string; total_price: number | string;
@@ -79,14 +76,6 @@ const PurchaseStaffApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseStaffAppro
.optional() .optional()
.min(1, 'Purchase item ID tidak valid!') .min(1, 'Purchase item ID tidak valid!')
.typeError('Purchase item ID harus berupa angka!'), .typeError('Purchase item ID harus berupa angka!'),
product_id: Yup.number()
.required('Produk wajib diisi!')
.min(1, 'Produk wajib diisi!')
.typeError('Produk wajib diisi!'),
warehouse_id: Yup.number()
.required('Gudang wajib diisi!')
.min(1, 'Gudang wajib diisi!')
.typeError('Gudang wajib diisi!'),
qty: Yup.number() qty: Yup.number()
.required('Jumlah wajib diisi!') .required('Jumlah wajib diisi!')
.min(1, 'Jumlah harus berupa angka lebih dari 0!') .min(1, 'Jumlah harus berupa angka lebih dari 0!')
@@ -217,6 +206,10 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
export const PurchaseRequestStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestStaffApprovalFormSchemaType> = export const PurchaseRequestStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestStaffApprovalFormSchemaType> =
Yup.object({ Yup.object({
action: Yup.mixed<'APPROVED' | 'REJECTED'>()
.oneOf(['APPROVED', 'REJECTED'], 'Action harus APPROVED atau REJECTED')
.required('Action wajib diisi!')
.default('APPROVED'),
notes: Yup.string().nullable().default(null), notes: Yup.string().nullable().default(null),
items: Yup.array() items: Yup.array()
.of(PurchaseStaffApprovalItemObjectSchema) .of(PurchaseStaffApprovalItemObjectSchema)
@@ -241,11 +234,11 @@ export const PurchaseDeleteItemsSchema: Yup.ObjectSchema<PurchaseDeleteItemsSche
export const PurchaseRequestStaffApprovalFormInitialValues: PurchaseRequestStaffApprovalFormSchemaType = export const PurchaseRequestStaffApprovalFormInitialValues: PurchaseRequestStaffApprovalFormSchemaType =
{ {
action: 'APPROVED',
notes: '', notes: '',
items: [ items: [
{ {
product_id: 0, purchase_item_id: 0,
warehouse_id: 0,
qty: 0, qty: 0,
price: '', price: '',
total_price: '', total_price: '',
@@ -257,20 +250,18 @@ export const PurchaseRequestStaffApprovalFormDefaultValues = (
purchase?: Purchase purchase?: Purchase
): PurchaseRequestStaffApprovalFormSchemaType => { ): PurchaseRequestStaffApprovalFormSchemaType => {
return { return {
action: 'APPROVED',
notes: purchase?.notes ?? null, notes: purchase?.notes ?? null,
items: purchase?.items items: purchase?.items
? purchase.items.map((item) => ({ ? purchase.items.map((item) => ({
purchase_item_id: item.id, purchase_item_id: item.id,
product_id: item.product_id,
warehouse_id: item.warehouse.id,
qty: item.qty, qty: item.qty,
price: item.price, price: item.price,
total_price: item.total_price, total_price: item.total_price,
})) }))
: [ : [
{ {
product_id: 0, purchase_item_id: 0,
warehouse_id: 0,
qty: 0, qty: 0,
price: '', price: '',
total_price: '', total_price: '',
@@ -139,15 +139,13 @@ const PurchaseOrderStaffApprovalForm = ({
return; return;
} }
if (type === 'add') { const payload: CreateStaffApprovalRequestPayload = {
const createPayload: CreateStaffApprovalRequestPayload = { action: values.action || 'APPROVED',
action: 'APPROVED',
notes: values.notes || '', notes: values.notes || '',
items: purchaseItems.map((purchaseItem, idx) => { items: purchaseItems.map((purchaseItem, idx) => {
const formItem = values.items?.[idx]; const formItem = values.items?.[idx];
return { return {
product_id: purchaseItem.product_id || 0, purchase_item_id: purchaseItem.id,
warehouse_id: purchaseItem.warehouse_id || 0,
qty: purchaseItem.quantity || 0, qty: purchaseItem.quantity || 0,
price: price:
typeof formItem?.price === 'string' typeof formItem?.price === 'string'
@@ -161,27 +159,13 @@ const PurchaseOrderStaffApprovalForm = ({
}), }),
}; };
await createStaffApprovalHandler(createPayload); if (type === 'add') {
await createStaffApprovalHandler(payload);
} else if (type === 'edit') { } else if (type === 'edit') {
const updatePayload: UpdateStaffApprovalRequestPayload = { const updatePayload: UpdateStaffApprovalRequestPayload = {
action: 'APPROVED', action: values.action || 'APPROVED',
notes: values.notes || null, notes: values.notes || null,
items: purchaseItems.map((purchaseItem, idx) => { items: payload.items,
const formItem = values.items?.[idx];
return {
purchase_item_id:
formItem?.purchase_item_id || purchaseItem.value || 0,
qty: purchaseItem.quantity || 0,
price:
typeof formItem?.price === 'string'
? parseFloat(formItem.price) || 0
: formItem?.price || 0,
total_price:
typeof formItem?.total_price === 'string'
? parseFloat(formItem.total_price) || 0
: formItem?.total_price || 0,
};
}),
}; };
await updateStaffApprovalHandler( await updateStaffApprovalHandler(
+1 -2
View File
@@ -82,8 +82,7 @@ export type CreateStaffApprovalRequestPayload = {
action: 'APPROVED' | 'REJECTED'; action: 'APPROVED' | 'REJECTED';
notes?: string | null; notes?: string | null;
items: { items: {
product_id: number; purchase_item_id: number;
warehouse_id: number;
qty: number; qty: number;
price: number; price: number;
total_price: number; total_price: number;