diff --git a/src/components/pages/production/recording/grading/form/GradingForm.tsx b/src/components/pages/production/recording/grading/form/GradingForm.tsx index 1cc418ee..c7e2aa26 100644 --- a/src/components/pages/production/recording/grading/form/GradingForm.tsx +++ b/src/components/pages/production/recording/grading/form/GradingForm.tsx @@ -256,6 +256,8 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { }, [formik.values.eggs_grading]); const isGradingExceedsAvailable = currentGradingTotal > totalKonsumsiBaikEggs; + const isGradingIncomplete = currentGradingTotal < totalKonsumsiBaikEggs && totalKonsumsiBaikEggs > 0; + const hasUserStartedGrading = currentGradingTotal > 0; // GRADING HANDLERS const addGrading = () => { @@ -355,10 +357,21 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { duration: 3000, } ); + toast.dismiss('grading-incomplete'); + } else if (isGradingIncomplete && hasUserStartedGrading) { + toast.error( + `Total grading (${currentGradingTotal}) tidak sama dengan total telur konsumsi baik yang tersedia (${totalKonsumsiBaikEggs})! Semua telur harus digrading.`, + { + id: 'grading-incomplete', + duration: 3000, + } + ); + toast.dismiss('grading-exceeds'); } else { toast.dismiss('grading-exceeds'); + toast.dismiss('grading-incomplete'); } - }, [isGradingExceedsAvailable, currentGradingTotal, totalKonsumsiBaikEggs]); + }, [isGradingExceedsAvailable, isGradingIncomplete, hasUserStartedGrading, currentGradingTotal, totalKonsumsiBaikEggs]); useEffect(() => { if ( @@ -559,7 +572,9 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { className={`rounded-lg p-4 border-2 ${ isGradingExceedsAvailable ? 'bg-red-50 border-red-200' - : 'bg-green-50 border-green-200' + : isGradingIncomplete && hasUserStartedGrading + ? 'bg-yellow-50 border-yellow-200' + : 'bg-green-50 border-green-200' }`} >
@@ -578,21 +593,29 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => {
@@ -606,7 +629,9 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { className={`font-semibold ${ isGradingExceedsAvailable ? 'text-red-600' - : 'text-green-600' + : isGradingIncomplete && hasUserStartedGrading + ? 'text-yellow-600' + : 'text-green-600' }`} > {currentGradingTotal} / {totalKonsumsiBaikEggs} @@ -617,7 +642,9 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { className={`h-full transition-all duration-300 ${ isGradingExceedsAvailable ? 'bg-red-500' - : 'bg-green-500' + : isGradingIncomplete && hasUserStartedGrading + ? 'bg-yellow-500' + : 'bg-green-500' }`} style={{ width: `${Math.min((currentGradingTotal / totalKonsumsiBaikEggs) * 100, 100)}%`, @@ -634,6 +661,16 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { Melebihi batas tersedia )} + {isGradingIncomplete && hasUserStartedGrading && ( +
+ + Grading belum lengkap, semua telur harus digrading +
+ )} @@ -775,14 +812,17 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { decimalSeparator='.' isError={ isRepeaterInputError('eggs_grading', 'qty', idx) - .isError || isGradingExceedsAvailable + .isError || + (isGradingExceedsAvailable || (isGradingIncomplete && hasUserStartedGrading)) } errorMessage={ isRepeaterInputError('eggs_grading', 'qty', idx) .errorMessage || (isGradingExceedsAvailable ? `Total grading melebihi telur yang tersedia (${totalKonsumsiBaikEggs})` - : undefined) + : isGradingIncomplete && hasUserStartedGrading + ? `Total grading (${currentGradingTotal}) harus sama dengan total telur konsumsi baik (${totalKonsumsiBaikEggs})` + : undefined) } readOnly={type === 'detail'} className={{ @@ -903,7 +943,8 @@ const GradingForm = ({ type = 'add', initialValues }: GradingFormProps) => { disabled={ !formik.isValid || formik.isSubmitting || - isGradingExceedsAvailable + isGradingExceedsAvailable || + (isGradingIncomplete && hasUserStartedGrading) } > Submit