refactor(FE-114,136): update RecordingForm schema and types to include location and coop fields

This commit is contained in:
rstubryan
2025-10-15 17:39:27 +07:00
parent 2ee88a2742
commit 64a32fd214
3 changed files with 443 additions and 319 deletions
@@ -8,63 +8,73 @@ export const RecordingFormSchema = Yup.object({
label: Yup.string().required(), label: Yup.string().required(),
}).nullable(), }).nullable(),
flock_id: Yup.number().required('Flock wajib diisi!'), flock_id: Yup.number().required('Flock wajib diisi!'),
tanggal_recording: Yup.date() location: Yup.object({
value: Yup.number().min(1).required(),
label: Yup.string().required(),
}).nullable(),
location_id: Yup.number().required('Lokasi wajib diisi!'),
coop: Yup.object({
value: Yup.number().min(1).required(),
label: Yup.string().required(),
}).nullable(),
coop_id: Yup.number().required('Kandang wajib diisi!'),
recording_date: Yup.date()
.required('Tanggal recording wajib diisi') .required('Tanggal recording wajib diisi')
.typeError('Format tanggal tidak valid'), .typeError('Format tanggal tidak valid'),
data_pakan: Yup.array() feed_data: Yup.array()
.of( .of(
Yup.object({ Yup.object({
nama_pakan: Yup.string().required('Nama pakan wajib diisi!'), feed_name: Yup.string().required('Nama pakan wajib diisi!'),
qty_pakan: Yup.number() feed_qty: Yup.number()
.required('Qty pakan wajib diisi!') .required('Qty pakan wajib diisi!')
.min(1, 'Qty minimal 1!'), .min(1, 'Qty minimal 1!'),
stock_pakan: Yup.number() feed_stock: Yup.number()
.required('Stock pakan wajib diisi!') .required('Stock pakan wajib diisi!')
.min(0, 'Stock minimal 0!'), .min(0, 'Stock minimal 0!'),
}) })
) )
.min(1, 'Minimal harus ada 1 data pakan!') .min(1, 'Minimal harus ada 1 data pakan!')
.required('Data pakan wajib diisi!'), .required('Data pakan wajib diisi!'),
bobot_badan: Yup.array() body_weight: Yup.array()
.of( .of(
Yup.object({ Yup.object({
berat_ayam: Yup.number() chicken_weight: Yup.number()
.required('Berat ayam wajib diisi!') .required('Berat ayam wajib diisi!')
.min(1, 'Berat minimal 1!'), .min(1, 'Berat minimal 1!'),
jumlah_ayam: Yup.number() chicken_count: Yup.number()
.required('Jumlah ayam wajib diisi!') .required('Jumlah ayam wajib diisi!')
.min(1, 'Jumlah minimal 1!'), .min(1, 'Jumlah minimal 1!'),
rata_rata_berat_ayam: Yup.number() average_chicken_weight: Yup.number()
.required('Rata-rata berat ayam wajib diisi!') .required('Rata-rata berat ayam wajib diisi!')
.min(1, 'Rata-rata minimal 1!'), .min(1, 'Rata-rata minimal 1!'),
}) })
) )
.min(1, 'Minimal harus ada 1 data bobot badan!') .min(1, 'Minimal harus ada 1 data bobot badan!')
.required('Data bobot badan wajib diisi!'), .required('Data bobot badan wajib diisi!'),
vaksinasi: Yup.array() vaccination: Yup.array()
.of( .of(
Yup.object({ Yup.object({
nama_vaksin: Yup.string().required('Nama vaksin wajib diisi!'), vaccine_name: Yup.string().required('Nama vaksin wajib diisi!'),
total_stock: Yup.number() total_stock: Yup.number()
.required('Total stock wajib diisi!') .required('Total stock wajib diisi!')
.min(0, 'Total stock minimal 0!'), .min(0, 'Total stock minimal 0!'),
jumlah_stock: Yup.number() used_stock: Yup.number()
.required('Jumlah stock wajib diisi!') .required('Jumlah stock wajib diisi!')
.min(0, 'Jumlah stock minimal 0!'), .min(0, 'Jumlah stock minimal 0!'),
}) })
) )
.min(1, 'Minimal harus ada 1 data vaksinasi!') .min(1, 'Minimal harus ada 1 data vaksinasi!')
.required('Data vaksinasi wajib diisi!'), .required('Data vaksinasi wajib diisi!'),
mortalitas: Yup.array() mortality: Yup.array()
.of( .of(
Yup.object({ Yup.object({
kondisi: Yup.mixed<string>() condition: Yup.mixed<string>()
.oneOf( .oneOf(
RECORDING_FLAG_OPTIONS.map((opt) => opt.value), RECORDING_FLAG_OPTIONS.map((opt) => opt.value),
'Kondisi tidak valid!' 'Kondisi tidak valid!'
) )
.required('Kondisi wajib diisi!'), .required('Kondisi wajib diisi!'),
jumlah: Yup.number() count: Yup.number()
.required('Jumlah wajib diisi!') .required('Jumlah wajib diisi!')
.min(1, 'Jumlah minimal 1!'), .min(1, 'Jumlah minimal 1!'),
}) })
@@ -87,34 +97,48 @@ export const getRecordingFormInitialValues = (
} }
: null, : null,
flock_id: initialValues?.flock?.id ?? 0, flock_id: initialValues?.flock?.id ?? 0,
tanggal_recording: initialValues?.tanggal_recording location: initialValues?.location
? new Date(initialValues.tanggal_recording) ? {
value: initialValues.location.id,
label: initialValues.location.name,
}
: null,
location_id: initialValues?.location?.id ?? 0,
coop: initialValues?.coop
? {
value: initialValues.coop.id,
label: initialValues.coop.name,
}
: null,
coop_id: initialValues?.coop?.id ?? 0,
recording_date: initialValues?.recording_date
? new Date(initialValues.recording_date)
: new Date(), : new Date(),
data_pakan: initialValues?.data_pakan ?? [ feed_data: initialValues?.feed_data ?? [
{ {
nama_pakan: '', feed_name: '',
qty_pakan: 0, feed_qty: 0,
stock_pakan: 0, feed_stock: 0,
}, },
], ],
bobot_badan: initialValues?.bobot_badan ?? [ body_weight: initialValues?.body_weight ?? [
{ {
berat_ayam: 0, chicken_weight: 0,
jumlah_ayam: 0, chicken_count: 0,
rata_rata_berat_ayam: 0, average_chicken_weight: 0,
}, },
], ],
vaksinasi: initialValues?.vaksinasi ?? [ vaccination: initialValues?.vaccination ?? [
{ {
nama_vaksin: '', vaccine_name: '',
total_stock: 0, total_stock: 0,
jumlah_stock: 0, used_stock: 0,
}, },
], ],
mortalitas: initialValues?.mortalitas ?? [ mortality: initialValues?.mortality ?? [
{ {
kondisi: '', condition: '',
jumlah: 0, count: 0,
}, },
], ],
}); });
File diff suppressed because it is too large Load Diff
+36 -30
View File
@@ -1,28 +1,32 @@
import { BaseMetadata } from '@/types/api/api-general'; import { BaseMetadata } from '@/types/api/api-general';
import { Flock } from '@/types/api/flock/flock'; import { Flock } from '@/types/api/flock/flock';
import { Location } from '@/types/api/master-data/location';
import { Kandang } from '@/types/api/master-data/kandang';
export type BaseRecording = { export type BaseRecording = {
id: number; id: number;
flock: Flock; flock: Flock;
tanggal_recording: string; recording_date: string;
data_pakan: { location: Location;
nama_pakan: string; coop: Kandang;
qty_pakan: number; feed_data: {
stock_pakan: number; feed_name: string;
feed_qty: number;
feed_stock: number;
}[]; }[];
bobot_badan: { body_weight: {
berat_ayam: number; chicken_weight: number;
jumlah_ayam: number; chicken_count: number;
rata_rata_berat_ayam: number; average_chicken_weight: number;
}[]; }[];
vaksinasi: { vaccination: {
nama_vaksin: string; vaccine_name: string;
total_stock: number; total_stock: number;
jumlah_stock: number; used_stock: number;
}[]; }[];
mortalitas: { mortality: {
kondisi: string; condition: string;
jumlah: number; count: number;
}[]; }[];
}; };
@@ -30,25 +34,27 @@ export type Recording = BaseMetadata & BaseRecording;
export type CreateRecordingPayload = { export type CreateRecordingPayload = {
flock_id: number; flock_id: number;
tanggal_recording: string; recording_date: string;
data_pakan: { location_id: number;
nama_pakan: string; coop_id: number;
qty_pakan: number; feed_data: {
stock_pakan: number; feed_name: string;
feed_qty: number;
feed_stock: number;
}[]; }[];
bobot_badan: { body_weight: {
berat_ayam: number; chicken_weight: number;
jumlah_ayam: number; chicken_count: number;
rata_rata_berat_ayam: number; average_chicken_weight: number;
}[]; }[];
vaksinasi: { vaccination: {
nama_vaksin: string; vaccine_name: string;
total_stock: number; total_stock: number;
jumlah_stock: number; used_stock: number;
}[]; }[];
mortalitas: { mortality: {
kondisi: string; condition: string;
jumlah: number; count: number;
}[]; }[];
}; };