import * as Yup from 'yup'; import { Supplier } from '@/types/api/master-data/supplier'; import { Warehouse } from '@/types/api/master-data/warehouse'; import { CreatePurchaseRequestPayload } from '@/types/api/purchase/purchase'; export const PurchaseRequestFormSchema = Yup.object({ supplier: Yup.object({ value: Yup.number().min(1).required(), label: Yup.string().required(), }).nullable(), supplier_id: Yup.number() .default(0) .typeError('Supplier wajib diisi!') .test( 'is-valid-supplier', 'Supplier wajib diisi!', (value) => value !== undefined && value !== null && value > 0 ) .required('Supplier wajib diisi!'), warehouse: Yup.array() .of( Yup.object({ value: Yup.number().min(1).required(), label: Yup.string().required(), }) ) .min(1, 'Minimal harus ada 1 warehouse!') .required('Warehouse wajib diisi!') .nullable(), warehouse_ids: Yup.array() .of(Yup.number().min(1)) .min(1, 'Minimal harus ada 1 warehouse!') .required('Warehouse wajib diisi!'), credit_term: Yup.number() .required('Termin kredit wajib diisi!') .min(1, 'Termin kredit tidak boleh negatif!') .typeError('Termin kredit harus berupa angka!'), notes: Yup.string().optional().nullable(), purchase_items: Yup.array() .of( Yup.object({ product_id: Yup.number() .required('Produk wajib diisi!') .min(1, 'Produk wajib diisi!') .typeError('Produk harus berupa angka!'), product_warehouse_id: Yup.number() .required('Product warehouse wajib diisi!') .min(1, 'Product warehouse wajib diisi!') .typeError('Product warehouse harus berupa angka!'), total_qty: Yup.number() .required('Jumlah total wajib diisi!') .min(1, 'Jumlah total tidak boleh negatif!') .typeError('Jumlah total harus berupa angka!'), price: Yup.number() .required('Harga wajib diisi!') .min(1, 'Harga tidak boleh negatif!') .typeError('Harga harus berupa angka!'), }) ) .min(1, 'Minimal harus ada 1 item pembelian!') .required('Item pembelian wajib diisi!'), }); export const UpdatePurchaseRequestFormSchema = PurchaseRequestFormSchema; export type PurchaseRequestFormValues = Yup.InferType< typeof PurchaseRequestFormSchema >; type PurchaseRequestFormData = Partial & { supplier?: Supplier; warehouse?: Warehouse[]; purchase_items?: CreatePurchaseRequestPayload['purchase_items']; }; export const getPurchaseRequestFormInitialValues = ( initialValues?: PurchaseRequestFormData ): PurchaseRequestFormValues => ({ supplier: initialValues?.supplier ? { value: initialValues.supplier.id, label: initialValues.supplier.name, } : null, supplier_id: initialValues?.supplier_id ?? 0, warehouse: initialValues?.warehouse?.map((warehouse) => ({ value: warehouse.id, label: warehouse.name, })) ?? [], warehouse_ids: initialValues?.warehouse_ids ?? [], credit_term: initialValues?.credit_term ?? 0, notes: initialValues?.notes ?? '', purchase_items: initialValues?.purchase_items?.map( (item: NonNullable[0]) => ({ product_id: item.product_id, product_warehouse_id: item.product_warehouse_id, total_qty: item.total_qty, price: item.price, }) ) ?? [ { product_id: 0, product_warehouse_id: 0, total_qty: 0, price: 0, }, ], });