mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 05:22:02 +00:00
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:
@@ -2,11 +2,10 @@ import * as Yup from 'yup';
|
||||
import { Purchase } from '@/types/api/purchase/purchase';
|
||||
|
||||
type PurchaseRequestStaffApprovalFormSchemaType = {
|
||||
action: 'APPROVED' | 'REJECTED';
|
||||
notes: string | null;
|
||||
items: {
|
||||
purchase_item_id?: number;
|
||||
product_id: number;
|
||||
warehouse_id: number;
|
||||
qty: number;
|
||||
price: number | string;
|
||||
total_price: number | string;
|
||||
@@ -42,8 +41,6 @@ type PurchaseRequestAcceptApprovalFormSchemaType = {
|
||||
|
||||
export type PurchaseStaffApprovalItemSchema = {
|
||||
purchase_item_id?: number;
|
||||
product_id: number;
|
||||
warehouse_id: number;
|
||||
qty: number;
|
||||
price: number | string;
|
||||
total_price: number | string;
|
||||
@@ -79,14 +76,6 @@ const PurchaseStaffApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseStaffAppro
|
||||
.optional()
|
||||
.min(1, 'Purchase item ID tidak valid!')
|
||||
.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()
|
||||
.required('Jumlah wajib diisi!')
|
||||
.min(1, 'Jumlah harus berupa angka lebih dari 0!')
|
||||
@@ -217,6 +206,10 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
|
||||
|
||||
export const PurchaseRequestStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestStaffApprovalFormSchemaType> =
|
||||
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),
|
||||
items: Yup.array()
|
||||
.of(PurchaseStaffApprovalItemObjectSchema)
|
||||
@@ -241,11 +234,11 @@ export const PurchaseDeleteItemsSchema: Yup.ObjectSchema<PurchaseDeleteItemsSche
|
||||
|
||||
export const PurchaseRequestStaffApprovalFormInitialValues: PurchaseRequestStaffApprovalFormSchemaType =
|
||||
{
|
||||
action: 'APPROVED',
|
||||
notes: '',
|
||||
items: [
|
||||
{
|
||||
product_id: 0,
|
||||
warehouse_id: 0,
|
||||
purchase_item_id: 0,
|
||||
qty: 0,
|
||||
price: '',
|
||||
total_price: '',
|
||||
@@ -257,20 +250,18 @@ export const PurchaseRequestStaffApprovalFormDefaultValues = (
|
||||
purchase?: Purchase
|
||||
): PurchaseRequestStaffApprovalFormSchemaType => {
|
||||
return {
|
||||
action: 'APPROVED',
|
||||
notes: purchase?.notes ?? null,
|
||||
items: purchase?.items
|
||||
? purchase.items.map((item) => ({
|
||||
purchase_item_id: item.id,
|
||||
product_id: item.product_id,
|
||||
warehouse_id: item.warehouse.id,
|
||||
qty: item.qty,
|
||||
price: item.price,
|
||||
total_price: item.total_price,
|
||||
}))
|
||||
: [
|
||||
{
|
||||
product_id: 0,
|
||||
warehouse_id: 0,
|
||||
purchase_item_id: 0,
|
||||
qty: 0,
|
||||
price: '',
|
||||
total_price: '',
|
||||
|
||||
@@ -139,49 +139,33 @@ const PurchaseOrderStaffApprovalForm = ({
|
||||
return;
|
||||
}
|
||||
|
||||
if (type === 'add') {
|
||||
const createPayload: CreateStaffApprovalRequestPayload = {
|
||||
action: 'APPROVED',
|
||||
notes: values.notes || '',
|
||||
items: purchaseItems.map((purchaseItem, idx) => {
|
||||
const formItem = values.items?.[idx];
|
||||
return {
|
||||
product_id: purchaseItem.product_id || 0,
|
||||
warehouse_id: purchaseItem.warehouse_id || 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,
|
||||
};
|
||||
}),
|
||||
};
|
||||
const payload: CreateStaffApprovalRequestPayload = {
|
||||
action: values.action || 'APPROVED',
|
||||
notes: values.notes || '',
|
||||
items: purchaseItems.map((purchaseItem, idx) => {
|
||||
const formItem = values.items?.[idx];
|
||||
return {
|
||||
purchase_item_id: purchaseItem.id,
|
||||
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 createStaffApprovalHandler(createPayload);
|
||||
if (type === 'add') {
|
||||
await createStaffApprovalHandler(payload);
|
||||
} else if (type === 'edit') {
|
||||
const updatePayload: UpdateStaffApprovalRequestPayload = {
|
||||
action: 'APPROVED',
|
||||
action: values.action || 'APPROVED',
|
||||
notes: values.notes || null,
|
||||
items: purchaseItems.map((purchaseItem, idx) => {
|
||||
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,
|
||||
};
|
||||
}),
|
||||
items: payload.items,
|
||||
};
|
||||
|
||||
await updateStaffApprovalHandler(
|
||||
|
||||
Vendored
+1
-2
@@ -82,8 +82,7 @@ export type CreateStaffApprovalRequestPayload = {
|
||||
action: 'APPROVED' | 'REJECTED';
|
||||
notes?: string | null;
|
||||
items: {
|
||||
product_id: number;
|
||||
warehouse_id: number;
|
||||
purchase_item_id: number;
|
||||
qty: number;
|
||||
price: number;
|
||||
total_price: number;
|
||||
|
||||
Reference in New Issue
Block a user