From b041e1e389bddcc4452d71aa66c561ba507ab990 Mon Sep 17 00:00:00 2001 From: "MSI\\2Fi" Date: Mon, 23 Dec 2024 15:22:02 +0800 Subject: [PATCH] Remove stage start date and stage end date validation Use plan start date and plan end date as every stage start date and stage end date --- src/app/api/projects/actions.ts | 4 +- .../CreateProject/CreateProject.tsx | 57 +++++++++++++------ src/components/CreateProject/Milestone.tsx | 6 +- .../CreateProject/MilestoneSection.tsx | 4 +- .../CreateProject/ProjectClientDetails.tsx | 43 ++++++++++++-- 5 files changed, 86 insertions(+), 28 deletions(-) diff --git a/src/app/api/projects/actions.ts b/src/app/api/projects/actions.ts index 1f21dc1..96d79b9 100644 --- a/src/app/api/projects/actions.ts +++ b/src/app/api/projects/actions.ts @@ -59,8 +59,8 @@ export interface CreateProjectInputs { // Milestones milestones: { [taskGroupId: TaskGroup["id"]]: { - startDate: string; - endDate: string; + startDate: string | null; + endDate: string | null; payments: PaymentInputs[]; }; }; diff --git a/src/components/CreateProject/CreateProject.tsx b/src/components/CreateProject/CreateProject.tsx index 5bfcc47..1368fa5 100644 --- a/src/components/CreateProject/CreateProject.tsx +++ b/src/components/CreateProject/CreateProject.tsx @@ -96,7 +96,9 @@ const hasErrorsInTab = ( errors.projectName || errors.projectDescription || errors.clientId || - errors.projectCode + errors.projectCode || + errors.projectPlanStart || + errors.projectPlanEnd ); case 2: return ( @@ -273,6 +275,17 @@ const CreateProject: React.FC = ({ // detect errors let hasErrors = false; + if( + !data.projectPlanStart || !data.projectPlanEnd + ){ + formProps.setError("projectPlanStart", { + message: "projectPlanStart is not valid", + type: "required", + }); + setTabIndex(0); + hasErrors = true; + } + // Tab - Staff Allocation and Resource if ( data.totalManhour === null || @@ -349,21 +362,29 @@ const CreateProject: React.FC = ({ .forEach((key) => { const { startDate, endDate, payments } = data.milestones[parseFloat(key)]; - - if ( - !Boolean(startDate) || - startDate === "Invalid Date" || - !Boolean(endDate) || - endDate === "Invalid Date" || - new Date(startDate) > new Date(endDate) - ) { - formProps.setError("milestones", { - message: "milestones is not valid", - type: "invalid", - }); - setTabIndex(3); - hasErrors = true; - } + if ( + !Boolean(startDate) || + startDate === "Invalid Date" || + !Boolean(endDate) || + endDate === "Invalid Date" + ){ + data.milestones[parseFloat(key)].startDate = null + data.milestones[parseFloat(key)].endDate = null + } + // if ( + // !Boolean(startDate) || + // startDate === "Invalid Date" || + // !Boolean(endDate) || + // endDate === "Invalid Date" || + // new Date(startDate) > new Date(endDate) + // ) { + // formProps.setError("milestones", { + // message: "milestones is not valid", + // type: "invalid", + // }); + // setTabIndex(3); + // hasErrors = true; + // } projectTotal += payments.reduce( (acc, payment) => acc + payment.amount, @@ -471,7 +492,9 @@ const CreateProject: React.FC = ({ errors.projectName || errors.projectDescription || errors.projectCode || - errors.clientId + errors.clientId || + errors.projectPlanStart || + errors.projectPlanEnd ) { setTabIndex(0); } else if ( diff --git a/src/components/CreateProject/Milestone.tsx b/src/components/CreateProject/Milestone.tsx index e9816c1..5b4c3a6 100644 --- a/src/components/CreateProject/Milestone.tsx +++ b/src/components/CreateProject/Milestone.tsx @@ -85,9 +85,9 @@ const Milestone: React.FC = ({ allTasks, isActive }) => { milestonesKeys.forEach(key => { const { startDate, endDate, payments } = milestones[parseFloat(key)] - if (new Date(startDate) > new Date(endDate) || !Boolean(startDate) || !Boolean(endDate)) { - hasError = true - } + // if (new Date(startDate) > new Date(endDate) || !Boolean(startDate) || !Boolean(endDate)) { + // hasError = true + // } projectTotal += payments.reduce((acc, payment) => acc + payment.amount, 0) }) diff --git a/src/components/CreateProject/MilestoneSection.tsx b/src/components/CreateProject/MilestoneSection.tsx index 34f6bf8..ea050eb 100644 --- a/src/components/CreateProject/MilestoneSection.tsx +++ b/src/components/CreateProject/MilestoneSection.tsx @@ -326,7 +326,7 @@ const MilestoneSection: React.FC = ({ taskGroupId }) => { {t("Stage Milestones")} - + {/* = ({ taskGroupId }) => { /> - + */} ({ marginBlockStart: 1, diff --git a/src/components/CreateProject/ProjectClientDetails.tsx b/src/components/CreateProject/ProjectClientDetails.tsx index 3bf394c..7ae40b1 100644 --- a/src/components/CreateProject/ProjectClientDetails.tsx +++ b/src/components/CreateProject/ProjectClientDetails.tsx @@ -86,6 +86,8 @@ const ProjectClientDetails: React.FC = ({ getValues, reset, resetField, + setError, + clearErrors } = useFormContext(); const subsidiaryMap = useMemo<{ @@ -242,6 +244,34 @@ const ProjectClientDetails: React.FC = ({ const planStart = getValues("projectPlanStart") const planEnd = getValues("projectPlanEnd") + useEffect(() => { + let hasErrors = false + if( + !planStart || planStart > planEnd + ){ + hasErrors = true; + } + if( + !planEnd || planStart > planEnd + ){ + hasErrors = true; + } + if(hasErrors){ + setError("projectPlanStart", { + message: "Project Plan Start date is not valid", + type: "required", + }); + setError("projectPlanEnd", { + message: "Project Plan End date is not valid", + type: "required", + }); + }else{ + clearErrors("projectPlanStart") + clearErrors("projectPlanEnd") + } + },[planStart, planEnd]) + + return ( @@ -311,8 +341,10 @@ const ProjectClientDetails: React.FC = ({ textField: { // required: true, error: - Boolean(errors.projectPlanStart) - || new Date(planStart) > new Date(planEnd) + // Boolean(errors.projectPlanStart) + // || + new Date(planStart) > new Date(planEnd) + || !Boolean(planStart) , }, }} @@ -335,9 +367,12 @@ const ProjectClientDetails: React.FC = ({ }} slotProps={{ textField: { + // required: true, error: - Boolean(errors.projectPlanEnd) - || new Date(planStart) > new Date(planEnd) + // Boolean(errors.projectPlanEnd) + // || + new Date(planStart) > new Date(planEnd) + || !Boolean(planEnd) , }, }}