mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
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<CreatePurchaseRequestPayload> & {
|
|
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<CreatePurchaseRequestPayload['purchase_items']>[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,
|
|
},
|
|
],
|
|
});
|