diff --git a/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts b/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.schema.ts similarity index 72% rename from src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts rename to src/components/pages/purchase/form/request/PurchaseRequisitionsForm.schema.ts index d496308f..784719f4 100644 --- a/src/components/pages/purchase/form/request/PurchaseRequestForm.schema.ts +++ b/src/components/pages/purchase/form/request/PurchaseRequisitionsForm.schema.ts @@ -1,7 +1,7 @@ import * as Yup from 'yup'; import { Purchase } from '@/types/api/purchase/purchase'; -type PurchaseRequestFormSchemaType = { +type PurchaseRequisitionsFormSchemaType = { supplier?: { value: number; label: string; @@ -17,65 +17,43 @@ type PurchaseRequestFormSchemaType = { label: string; } | null; location_id: number; - credit_term: number | string | undefined; + warehouse?: { + value: number; + label: string; + }; + warehouse_id: number; notes: string | null; - purchase_items: { - warehouse?: { - value: number; - label: string; - } | null; - warehouse_id: number; - product?: { - value: number; - label: string; - } | null; - product_id: number; + items: { product_warehouse?: { value: number; label: string; } | null; product_warehouse_id: number; - sub_qty: number | string; + product?: { + value: number; + label: string; + } | null; + product_id: number; + quantity: number | string; }[]; }; export type PurchaseItemSchema = { - warehouse?: { - value: number; - label: string; - } | null; - warehouse_id: number; - product?: { - value: number; - label: string; - } | null; - product_id: number; product_warehouse?: { value: number; label: string; } | null; product_warehouse_id: number; - sub_qty: number | string; + product?: { + value: number; + label: string; + } | null; + product_id: number; + quantity: number | string; }; const PurchaseItemObjectSchema: Yup.ObjectSchema = 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({ value: Yup.number().min(1).required(), label: Yup.string().required(), @@ -84,10 +62,18 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema = .required('Produk wajib dipilih!') .min(1, 'Produk wajib dipilih!') .typeError('Produk wajib dipilih!'), - sub_qty: Yup.mixed() + 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() .required('Kuantitas wajib diisi!') .test( - 'is-valid-sub-qty', + 'is-valid-qty', 'Kuantitas harus berupa angka lebih dari 0!', function (value) { if (value === '' || value === null || value === undefined) @@ -99,7 +85,7 @@ const PurchaseItemObjectSchema: Yup.ObjectSchema = ), }); -export const PurchaseRequestFormSchema: Yup.ObjectSchema = +export const PurchaseRequisitionsFormSchema: Yup.ObjectSchema = Yup.object({ supplier: Yup.object({ value: Yup.number().min(1).required(), @@ -134,36 +120,35 @@ export const PurchaseRequestFormSchema: Yup.ObjectSchema 0); }) .typeError('Lokasi wajib dipilih!'), - credit_term: Yup.mixed().when('supplier_id', { - is: (supplier_id: number) => supplier_id && supplier_id > 0, - then: () => - 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() - .nullable() - .default(null) - .transform(() => null), + warehouse: Yup.object({ + value: Yup.number().min(1).required(), + label: Yup.string().required(), }), + 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), - purchase_items: Yup.array() + items: Yup.array() .of(PurchaseItemObjectSchema) .min(1, 'Minimal harus ada 1 item pembelian!') .required('Item pembelian wajib diisi!') .typeError('Item pembelian wajib diisi!'), }); -export const UpdatePurchaseRequestFormSchema = PurchaseRequestFormSchema; +export const UpdatePurchaseRequisitionsFormSchema = + PurchaseRequisitionsFormSchema; -export type PurchaseRequestFormValues = Yup.InferType< - typeof PurchaseRequestFormSchema +export type PurchaseRequisitionsFormValues = Yup.InferType< + typeof PurchaseRequisitionsFormSchema >; -export const getPurchaseRequestFormInitialValues = ( +export const getPurchaseRequisitionsFormInitialValues = ( initialValues?: Purchase -): PurchaseRequestFormValues => ({ +): PurchaseRequisitionsFormValues => ({ supplier: initialValues?.supplier ? { value: initialValues.supplier.id, @@ -171,11 +156,27 @@ export const getPurchaseRequestFormInitialValues = ( } : null, supplier_id: initialValues?.supplier?.id ?? 0, - area: null, - area_id: 0, - location: null, - location_id: 0, - credit_term: initialValues?.credit_term ?? '', + area: initialValues?.area + ? { + value: initialValues.area.id, + label: initialValues.area.name, + } + : 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, - purchase_items: [], + warehouse: initialValues?.warehouse + ? { + value: initialValues.warehouse.id, + label: initialValues.warehouse.name, + } + : undefined, + warehouse_id: initialValues?.warehouse?.id ?? 0, + items: [], });