浏览代码

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
tags/Baseline_180220205_Frontend
MSI\2Fi 8 个月前
父节点
当前提交
b041e1e389
共有 5 个文件被更改,包括 86 次插入28 次删除
  1. +2
    -2
      src/app/api/projects/actions.ts
  2. +40
    -17
      src/components/CreateProject/CreateProject.tsx
  3. +3
    -3
      src/components/CreateProject/Milestone.tsx
  4. +2
    -2
      src/components/CreateProject/MilestoneSection.tsx
  5. +39
    -4
      src/components/CreateProject/ProjectClientDetails.tsx

+ 2
- 2
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[];
};
};


+ 40
- 17
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<Props> = ({
// 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<Props> = ({
.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<Props> = ({
errors.projectName ||
errors.projectDescription ||
errors.projectCode ||
errors.clientId
errors.clientId ||
errors.projectPlanStart ||
errors.projectPlanEnd
) {
setTabIndex(0);
} else if (


+ 3
- 3
src/components/CreateProject/Milestone.tsx 查看文件

@@ -85,9 +85,9 @@ const Milestone: React.FC<Props> = ({ 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)
})


+ 2
- 2
src/components/CreateProject/MilestoneSection.tsx 查看文件

@@ -326,7 +326,7 @@ const MilestoneSection: React.FC<Props> = ({ taskGroupId }) => {
<Typography variant="overline" display="block" marginBlockEnd={1}>
{t("Stage Milestones")}
</Typography>
<Grid container spacing={2} columns={{ xs: 6, sm: 12 }}>
{/* <Grid container spacing={2} columns={{ xs: 6, sm: 12 }}>
<Grid item xs>
<FormControl fullWidth>
<DatePicker
@@ -385,7 +385,7 @@ const MilestoneSection: React.FC<Props> = ({ taskGroupId }) => {
/>
</FormControl>
</Grid>
</Grid>
</Grid> */}
<Box
sx={(theme) => ({
marginBlockStart: 1,


+ 39
- 4
src/components/CreateProject/ProjectClientDetails.tsx 查看文件

@@ -86,6 +86,8 @@ const ProjectClientDetails: React.FC<Props> = ({
getValues,
reset,
resetField,
setError,
clearErrors
} = useFormContext<CreateProjectInputs>();

const subsidiaryMap = useMemo<{
@@ -242,6 +244,34 @@ const ProjectClientDetails: React.FC<Props> = ({
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 (
<Card sx={{ display: isActive ? "block" : "none" }}>
<CardContent component={Stack} spacing={4}>
@@ -311,8 +341,10 @@ const ProjectClientDetails: React.FC<Props> = ({
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<Props> = ({
}}
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)
,
},
}}


正在加载...
取消
保存