mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
147 lines
4.0 KiB
TypeScript
147 lines
4.0 KiB
TypeScript
import * as Yup from 'yup';
|
|
import { Purchase } from '@/types/api/purchase/purchase';
|
|
|
|
type PurchaseRequestFormSchemaType = {
|
|
supplier?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
supplier_id: number;
|
|
credit_term: number;
|
|
area?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
area_id: number;
|
|
location?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
location_id: number;
|
|
notes: string | null;
|
|
items: {
|
|
warehouse?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
warehouse_id: number;
|
|
product?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
product_id: number;
|
|
qty: number;
|
|
}[];
|
|
};
|
|
|
|
export type PurchaseItemSchema = {
|
|
warehouse?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
warehouse_id: number;
|
|
product?: {
|
|
value: number;
|
|
label: string;
|
|
} | null;
|
|
product_id: number;
|
|
qty: number;
|
|
};
|
|
|
|
const PurchaseItemObjectSchema: Yup.ObjectSchema<PurchaseItemSchema> =
|
|
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!'),
|
|
qty: Yup.number()
|
|
.required('Kuantitas wajib diisi!')
|
|
.min(1, 'Kuantitas tidak boleh kurang dari 1!')
|
|
.typeError('Kuantitas wajib diisi!'),
|
|
});
|
|
|
|
export const PurchaseRequestFormSchema: Yup.ObjectSchema<PurchaseRequestFormSchemaType> =
|
|
Yup.object({
|
|
supplier: Yup.object({
|
|
value: Yup.number().min(1).required(),
|
|
label: Yup.string().required(),
|
|
}).nullable(),
|
|
credit_term: Yup.number()
|
|
.required('Jangka waktu kredit wajib diisi!')
|
|
.min(0, 'Jangka waktu kredit tidak boleh kurang dari 0!')
|
|
.typeError('Jangka waktu kredit wajib diisi!'),
|
|
supplier_id: Yup.number()
|
|
.required('Supplier wajib dipilih!')
|
|
.min(1, 'Supplier wajib dipilih!')
|
|
.typeError('Supplier wajib dipilih!'),
|
|
area: Yup.object({
|
|
value: Yup.number().min(1).required(),
|
|
label: Yup.string().required(),
|
|
}).nullable(),
|
|
area_id: Yup.number()
|
|
.required('Area wajib dipilih!')
|
|
.min(1, 'Area wajib dipilih!')
|
|
.typeError('Area wajib dipilih!'),
|
|
location: Yup.object({
|
|
value: Yup.number().min(1).required(),
|
|
label: Yup.string().required(),
|
|
}).nullable(),
|
|
location_id: Yup.number()
|
|
.required('Lokasi wajib dipilih!')
|
|
.min(1, 'Lokasi wajib dipilih!')
|
|
.typeError('Lokasi wajib dipilih!'),
|
|
notes: Yup.string().nullable().default(null),
|
|
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 type PurchaseRequestFormValues = Yup.InferType<
|
|
typeof PurchaseRequestFormSchema
|
|
>;
|
|
|
|
export const getPurchaseRequestFormInitialValues = (
|
|
initialValues?: Purchase
|
|
): PurchaseRequestFormValues => ({
|
|
supplier: initialValues?.supplier
|
|
? {
|
|
value: initialValues.supplier.id,
|
|
label: initialValues.supplier.name,
|
|
}
|
|
: null,
|
|
supplier_id: initialValues?.supplier?.id ?? 0,
|
|
credit_term: initialValues?.credit_term ?? 0,
|
|
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,
|
|
items: [],
|
|
});
|