refactor(FE-212): rename PurchaseRequestForm schema to PurchaseRequisitionsForm and update related types

This commit is contained in:
rstubryan
2025-11-08 09:52:48 +07:00
parent 12a1e61b68
commit 53751d566c
@@ -1,7 +1,7 @@
import * as Yup from 'yup'; import * as Yup from 'yup';
import { Purchase } from '@/types/api/purchase/purchase'; import { Purchase } from '@/types/api/purchase/purchase';
type PurchaseRequestFormSchemaType = { type PurchaseRequisitionsFormSchemaType = {
supplier?: { supplier?: {
value: number; value: number;
label: string; label: string;
@@ -17,65 +17,43 @@ type PurchaseRequestFormSchemaType = {
label: string; label: string;
} | null; } | null;
location_id: number; location_id: number;
credit_term: number | string | undefined; warehouse?: {
value: number;
label: string;
};
warehouse_id: number;
notes: string | null; notes: string | null;
purchase_items: { items: {
warehouse?: {
value: number;
label: string;
} | null;
warehouse_id: number;
product?: {
value: number;
label: string;
} | null;
product_id: number;
product_warehouse?: { product_warehouse?: {
value: number; value: number;
label: string; label: string;
} | null; } | null;
product_warehouse_id: number; product_warehouse_id: number;
sub_qty: number | string; product?: {
value: number;
label: string;
} | null;
product_id: number;
quantity: number | string;
}[]; }[];
}; };
export type PurchaseItemSchema = { export type PurchaseItemSchema = {
warehouse?: {
value: number;
label: string;
} | null;
warehouse_id: number;
product?: {
value: number;
label: string;
} | null;
product_id: number;
product_warehouse?: { product_warehouse?: {
value: number; value: number;
label: string; label: string;
} | null; } | null;
product_warehouse_id: number; product_warehouse_id: number;
sub_qty: number | string; product?: {
value: number;
label: string;
} | null;
product_id: number;
quantity: number | string;
}; };
const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> = const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> =
Yup.object({ Yup.object({
warehouse: Yup.object({
value: Yup.number().min(1).required(),
label: Yup.string().required(),
}).nullable(),
warehouse_id: Yup.number()
.required('Gudang wajib dipilih!')
.min(1, 'Gudang wajib dipilih!')
.typeError('Gudang wajib dipilih'),
product: Yup.object({
value: Yup.number().min(1).required(),
label: Yup.string().required(),
}).nullable(),
product_id: Yup.number()
.required('Produk wajib dipilih!')
.min(1, 'Produk wajib dipilih!')
.typeError('Produk wajib dipilih!'),
product_warehouse: Yup.object({ product_warehouse: Yup.object({
value: Yup.number().min(1).required(), value: Yup.number().min(1).required(),
label: Yup.string().required(), label: Yup.string().required(),
@@ -84,10 +62,18 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> =
.required('Produk wajib dipilih!') .required('Produk wajib dipilih!')
.min(1, 'Produk wajib dipilih!') .min(1, 'Produk wajib dipilih!')
.typeError('Produk wajib dipilih!'), .typeError('Produk wajib dipilih!'),
sub_qty: Yup.mixed<string | number>() product: Yup.object({
value: Yup.number().min(1).required(),
label: Yup.string().required(),
}).nullable(),
product_id: Yup.number()
.required('Produk wajib dipilih!')
.min(1, 'Produk wajib dipilih!')
.typeError('Produk wajib dipilih!'),
quantity: Yup.mixed<string | number>()
.required('Kuantitas wajib diisi!') .required('Kuantitas wajib diisi!')
.test( .test(
'is-valid-sub-qty', 'is-valid-qty',
'Kuantitas harus berupa angka lebih dari 0!', 'Kuantitas harus berupa angka lebih dari 0!',
function (value) { function (value) {
if (value === '' || value === null || value === undefined) if (value === '' || value === null || value === undefined)
@@ -99,7 +85,7 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> =
), ),
}); });
export const PurchaseRequestFormSchema: Yup.ObjectSchema<PurchaseRequestFormSchemaType> = export const PurchaseRequisitionsFormSchema: Yup.ObjectSchema<PurchaseRequisitionsFormSchemaType> =
Yup.object({ Yup.object({
supplier: Yup.object({ supplier: Yup.object({
value: Yup.number().min(1).required(), value: Yup.number().min(1).required(),
@@ -134,36 +120,35 @@ export const PurchaseRequestFormSchema: Yup.ObjectSchema<PurchaseRequestFormSche
return Boolean(value && value > 0); return Boolean(value && value > 0);
}) })
.typeError('Lokasi wajib dipilih!'), .typeError('Lokasi wajib dipilih!'),
credit_term: Yup.mixed<string | number>().when('supplier_id', { warehouse: Yup.object({
is: (supplier_id: number) => supplier_id && supplier_id > 0, value: Yup.number().min(1).required(),
then: () => label: Yup.string().required(),
Yup.number()
.required('Jumlah hari jatuh tempo wajib diisi!')
.min(1, 'Jumlah hari jatuh tempo minimal 1 hari!')
.typeError('Jumlah hari jatuh tempo harus berupa angka!'),
otherwise: () =>
Yup.mixed<string | number>()
.nullable()
.default(null)
.transform(() => null),
}), }),
warehouse_id: Yup.number()
.required('Gudang wajib dipilih!')
.test('is-valid-warehouse', 'Gudang wajib dipilih!', function (value) {
if (!this.parent.warehouse) return true;
return Boolean(value && value > 0);
})
.typeError('Gudang wajib dipilih!'),
notes: Yup.string().nullable().default(null), notes: Yup.string().nullable().default(null),
purchase_items: Yup.array() items: Yup.array()
.of(PurchaseItemObjectSchema) .of(PurchaseItemObjectSchema)
.min(1, 'Minimal harus ada 1 item pembelian!') .min(1, 'Minimal harus ada 1 item pembelian!')
.required('Item pembelian wajib diisi!') .required('Item pembelian wajib diisi!')
.typeError('Item pembelian wajib diisi!'), .typeError('Item pembelian wajib diisi!'),
}); });
export const UpdatePurchaseRequestFormSchema = PurchaseRequestFormSchema; export const UpdatePurchaseRequisitionsFormSchema =
PurchaseRequisitionsFormSchema;
export type PurchaseRequestFormValues = Yup.InferType< export type PurchaseRequisitionsFormValues = Yup.InferType<
typeof PurchaseRequestFormSchema typeof PurchaseRequisitionsFormSchema
>; >;
export const getPurchaseRequestFormInitialValues = ( export const getPurchaseRequisitionsFormInitialValues = (
initialValues?: Purchase initialValues?: Purchase
): PurchaseRequestFormValues => ({ ): PurchaseRequisitionsFormValues => ({
supplier: initialValues?.supplier supplier: initialValues?.supplier
? { ? {
value: initialValues.supplier.id, value: initialValues.supplier.id,
@@ -171,11 +156,27 @@ export const getPurchaseRequestFormInitialValues = (
} }
: null, : null,
supplier_id: initialValues?.supplier?.id ?? 0, supplier_id: initialValues?.supplier?.id ?? 0,
area: null, area: initialValues?.area
area_id: 0, ? {
location: null, value: initialValues.area.id,
location_id: 0, label: initialValues.area.name,
credit_term: initialValues?.credit_term ?? '', }
: null,
area_id: initialValues?.area?.id ?? 0,
location: initialValues?.location
? {
value: initialValues.location.id,
label: initialValues.location.name,
}
: null,
location_id: initialValues?.location?.id ?? 0,
notes: initialValues?.notes ?? null, notes: initialValues?.notes ?? null,
purchase_items: [], warehouse: initialValues?.warehouse
? {
value: initialValues.warehouse.id,
label: initialValues.warehouse.name,
}
: undefined,
warehouse_id: initialValues?.warehouse?.id ?? 0,
items: [],
}); });