fix(FE): adding standard fcr to growing production standard

This commit is contained in:
randy-ar
2026-02-03 14:39:34 +07:00
parent 40411b0417
commit c24cf7ed1a
2 changed files with 63 additions and 43 deletions
@@ -32,7 +32,7 @@ const GrowingRepeaterFormSchema = Yup.object({
target_hen_house_production: Yup.number().optional(), target_hen_house_production: Yup.number().optional(),
target_egg_weight: Yup.number().optional(), target_egg_weight: Yup.number().optional(),
target_egg_mass: Yup.number().optional(), target_egg_mass: Yup.number().optional(),
standard_fcr: Yup.number().optional(), standard_fcr: Yup.number().required('Wajib diisi!'),
}).optional(), }).optional(),
}); });
@@ -386,14 +386,6 @@ const ProductionStandardForm = ({
`${row.original.production_standard_details?.target_egg_mass} kg`, `${row.original.production_standard_details?.target_egg_mass} kg`,
enableSorting: false, enableSorting: false,
}, },
{
header: 'FCR',
accessorFn: (row) =>
row.production_standard_details?.standard_fcr,
cell: ({ row }) =>
`${row.original.production_standard_details?.standard_fcr} g`,
enableSorting: false,
},
] ]
: []; : [];
@@ -468,6 +460,13 @@ const ProductionStandardForm = ({
return [ return [
...baseColumns, ...baseColumns,
...productionColumns, ...productionColumns,
{
header: 'FCR',
accessorFn: (row) => row.production_standard_details?.standard_fcr,
cell: ({ row }) =>
`${row.original.production_standard_details?.standard_fcr} g`,
enableSorting: false,
},
...uniformityColumns, ...uniformityColumns,
...(formType !== 'detail' ? [actionColumn] : []), ...(formType !== 'detail' ? [actionColumn] : []),
]; ];
@@ -753,24 +752,46 @@ const ProductionStandardForm = ({
e.preventDefault(); e.preventDefault();
// For GROWING category, clear production_standard_details errors and set default values // For GROWING category, clear production_standard_details errors and set default values
// but preserve standard_fcr since it's used for both LAYING and GROWING
if (formik.values.project_category === 'GROWING') { if (formik.values.project_category === 'GROWING') {
// Set default values for production_standard_details // Set default values for production_standard_details, preserving standard_fcr
formik.values.details?.forEach((detail) => { formik.values.details?.forEach((detail) => {
detail.production_standard_details = { detail.production_standard_details = {
target_hen_day_production: 0, target_hen_day_production: 0,
target_hen_house_production: 0, target_hen_house_production: 0,
target_egg_weight: 0, target_egg_weight: 0,
target_egg_mass: 0, target_egg_mass: 0,
standard_fcr: 0, standard_fcr:
detail.production_standard_details?.standard_fcr || 0,
}; };
}); });
// Clear any errors related to production_standard_details // Clear errors only for LAYING-specific fields in production_standard_details
// Preserve standard_fcr error since it's required for both categories
const currentErrors = { ...formik.errors }; const currentErrors = { ...formik.errors };
if (currentErrors.details && Array.isArray(currentErrors.details)) { if (currentErrors.details && Array.isArray(currentErrors.details)) {
const cleanedDetails = currentErrors.details const cleanedDetails = currentErrors.details
.map((detailError) => { .map((detailError) => {
if (detailError && typeof detailError === 'object') { if (detailError && typeof detailError === 'object') {
const prodDetails = (
detailError as {
production_standard_details?: ProductionDetailsErrors;
}
).production_standard_details;
// If there's standard_fcr error, preserve it
if (prodDetails && prodDetails.standard_fcr) {
const { production_standard_details, ...rest } =
detailError;
return {
...rest,
production_standard_details: {
standard_fcr: prodDetails.standard_fcr,
},
};
}
// Otherwise, remove entire production_standard_details errors
const { production_standard_details, ...rest } = detailError; const { production_standard_details, ...rest } = detailError;
return Object.keys(rest).length > 0 ? rest : undefined; return Object.keys(rest).length > 0 ? rest : undefined;
} }
@@ -896,7 +917,7 @@ const ProductionStandardForm = ({
gridTemplateColumns: gridTemplateColumns:
formik.values.project_category === 'LAYING' formik.values.project_category === 'LAYING'
? 'repeat(10, minmax(auto, 1fr)) minmax(auto, auto)' ? 'repeat(10, minmax(auto, 1fr)) minmax(auto, auto)'
: 'repeat(4, minmax(auto, 1fr)) minmax(auto, auto)', : 'repeat(5, minmax(auto, 1fr)) minmax(auto, auto)',
}} }}
> >
<NumberInput <NumberInput
@@ -1042,20 +1063,21 @@ const ProductionStandardForm = ({
) )
} }
/> />
</>
)}
<NumberInput <NumberInput
name='production_standard_details.standard_fcr' name='production_standard_details.standard_fcr'
label='FCR' label='FCR'
placeholder='1' placeholder='1'
value={ value={
repeaterFormik.values repeaterFormik.values.production_standard_details
.production_standard_details?.standard_fcr ?.standard_fcr
} }
onChange={repeaterFormik.handleChange} onChange={repeaterFormik.handleChange}
onBlur={repeaterFormik.handleBlur} onBlur={repeaterFormik.handleBlur}
bottomLabel='Gram (g)' bottomLabel='Gram (g)'
errorMessage={getProductionDetailsError( errorMessage={getProductionDetailsError(
repeaterFormik.errors repeaterFormik.errors.production_standard_details,
.production_standard_details,
'standard_fcr' 'standard_fcr'
)} )}
isError={ isError={
@@ -1073,8 +1095,6 @@ const ProductionStandardForm = ({
) )
} }
/> />
</>
)}
<NumberInput <NumberInput
name='production_standard_uniformity_details.target_mean_bw' name='production_standard_uniformity_details.target_mean_bw'
label='Mean BW' label='Mean BW'