|
@@ -9,7 +9,7 @@ import Stack from "@mui/material/Stack"; |
|
|
import Tab from "@mui/material/Tab"; |
|
|
import Tab from "@mui/material/Tab"; |
|
|
import Tabs, { TabsProps } from "@mui/material/Tabs"; |
|
|
import Tabs, { TabsProps } from "@mui/material/Tabs"; |
|
|
import { useRouter } from "next/navigation"; |
|
|
import { useRouter } from "next/navigation"; |
|
|
import React, { useCallback, useState } from "react"; |
|
|
|
|
|
|
|
|
import React, { useCallback, useEffect, useState } from "react"; |
|
|
import { useTranslation } from "react-i18next"; |
|
|
import { useTranslation } from "react-i18next"; |
|
|
import ProjectClientDetails from "./ProjectClientDetails"; |
|
|
import ProjectClientDetails from "./ProjectClientDetails"; |
|
|
import TaskSetup from "./TaskSetup"; |
|
|
import TaskSetup from "./TaskSetup"; |
|
@@ -125,9 +125,29 @@ const CreateProject: React.FC<Props> = ({ |
|
|
abilities, |
|
|
abilities, |
|
|
}) => { |
|
|
}) => { |
|
|
const [serverError, setServerError] = useState(""); |
|
|
const [serverError, setServerError] = useState(""); |
|
|
|
|
|
const [loading, setLoading] = useState(true); |
|
|
const [tabIndex, setTabIndex] = useState(0); |
|
|
const [tabIndex, setTabIndex] = useState(0); |
|
|
const { t } = useTranslation(); |
|
|
const { t } = useTranslation(); |
|
|
const router = useRouter(); |
|
|
const router = useRouter(); |
|
|
|
|
|
const [buttonData, setButtonData] = useState<{ |
|
|
|
|
|
buttonName: string; |
|
|
|
|
|
title: string; |
|
|
|
|
|
confirmButtonText: string; |
|
|
|
|
|
successTitle: string; |
|
|
|
|
|
errorTitle: string; |
|
|
|
|
|
buttonText: string; |
|
|
|
|
|
buttonIcon: any; |
|
|
|
|
|
buttonColor: any |
|
|
|
|
|
}> ({ |
|
|
|
|
|
buttonName: "submit", |
|
|
|
|
|
title: t("Do you want to submit?"), |
|
|
|
|
|
confirmButtonText: t("Submit"), |
|
|
|
|
|
successTitle: t("Submit Success"), |
|
|
|
|
|
errorTitle: t("Submit Fail"), |
|
|
|
|
|
buttonText: t("Submit Project"), |
|
|
|
|
|
buttonIcon: <PlayArrow />, |
|
|
|
|
|
buttonColor : "success" |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
const handleCancel = () => { |
|
|
const handleCancel = () => { |
|
|
router.replace("/projects"); |
|
|
router.replace("/projects"); |
|
@@ -266,34 +286,14 @@ const CreateProject: React.FC<Props> = ({ |
|
|
// save project |
|
|
// save project |
|
|
setServerError(""); |
|
|
setServerError(""); |
|
|
|
|
|
|
|
|
let title = t("Do you want to submit?"); |
|
|
|
|
|
let confirmButtonText = t("Submit"); |
|
|
|
|
|
let successTitle = t("Submit Success"); |
|
|
|
|
|
let errorTitle = t("Submit Fail"); |
|
|
|
|
|
const buttonName = (event?.nativeEvent as any).submitter.name; |
|
|
|
|
|
|
|
|
|
|
|
if (buttonName === "start") { |
|
|
|
|
|
title = t("Do you want to start?"); |
|
|
|
|
|
confirmButtonText = t("Start"); |
|
|
|
|
|
successTitle = t("Start Success"); |
|
|
|
|
|
errorTitle = t("Start Fail"); |
|
|
|
|
|
} else if (buttonName === "complete") { |
|
|
|
|
|
title = t("Do you want to complete?"); |
|
|
|
|
|
confirmButtonText = t("Complete"); |
|
|
|
|
|
successTitle = t("Complete Success"); |
|
|
|
|
|
errorTitle = t("Complete Fail"); |
|
|
|
|
|
} else if (buttonName === "reopen") { |
|
|
|
|
|
title = t("Do you want to reopen?"); |
|
|
|
|
|
confirmButtonText = t("Reopen"); |
|
|
|
|
|
successTitle = t("Reopen Success"); |
|
|
|
|
|
errorTitle = t("Reopen Fail"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// const buttonName = (event?.nativeEvent as any).submitter.name; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
submitDialog( |
|
|
submitDialog( |
|
|
async () => { |
|
|
async () => { |
|
|
if (buttonName === "start") { |
|
|
|
|
|
|
|
|
if (buttonData.buttonName === "start") { |
|
|
data.projectActualStart = dayjs().format("YYYY-MM-DD"); |
|
|
data.projectActualStart = dayjs().format("YYYY-MM-DD"); |
|
|
} else if (buttonName === "complete") { |
|
|
|
|
|
|
|
|
} else if (buttonData.buttonName === "complete") { |
|
|
data.projectActualEnd = dayjs().format("YYYY-MM-DD"); |
|
|
data.projectActualEnd = dayjs().format("YYYY-MM-DD"); |
|
|
}/* else if (buttonName === "reopen") { |
|
|
}/* else if (buttonName === "reopen") { |
|
|
data.projectActualEnd = dayjs().format("YYYY-MM-DD"); |
|
|
data.projectActualEnd = dayjs().format("YYYY-MM-DD"); |
|
@@ -308,11 +308,11 @@ const CreateProject: React.FC<Props> = ({ |
|
|
response.message?.toLowerCase() === "success" && |
|
|
response.message?.toLowerCase() === "success" && |
|
|
response.errorPosition === null |
|
|
response.errorPosition === null |
|
|
) { |
|
|
) { |
|
|
successDialog(successTitle, t).then(() => { |
|
|
|
|
|
|
|
|
successDialog(buttonData.successTitle, t).then(() => { |
|
|
router.replace("/projects"); |
|
|
router.replace("/projects"); |
|
|
}); |
|
|
}); |
|
|
} else { |
|
|
} else { |
|
|
errorDialog(response.message ?? errorTitle, t).then(() => { |
|
|
|
|
|
|
|
|
errorDialog(response.message ?? buttonData.errorTitle, t).then(() => { |
|
|
if ( |
|
|
if ( |
|
|
response.errorPosition !== null && |
|
|
response.errorPosition !== null && |
|
|
response.errorPosition === "projectCode" |
|
|
response.errorPosition === "projectCode" |
|
@@ -323,13 +323,13 @@ const CreateProject: React.FC<Props> = ({ |
|
|
}); |
|
|
}); |
|
|
setTabIndex(0); |
|
|
setTabIndex(0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
return false; |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
t, |
|
|
t, |
|
|
{ title: title, confirmButtonText: confirmButtonText }, |
|
|
|
|
|
|
|
|
{ title: buttonData.title, confirmButtonText: buttonData.confirmButtonText }, |
|
|
); |
|
|
); |
|
|
} catch (e) { |
|
|
} catch (e) { |
|
|
setServerError(t("An error has occurred. Please try again later.")); |
|
|
setServerError(t("An error has occurred. Please try again later.")); |
|
@@ -417,6 +417,52 @@ const CreateProject: React.FC<Props> = ({ |
|
|
} |
|
|
} |
|
|
}, [totalManhour]) |
|
|
}, [totalManhour]) |
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
if (formProps?.getValues("projectName")){//defaultValues) { |
|
|
|
|
|
setLoading(false); |
|
|
|
|
|
const status = formProps.getValues("projectStatus")?.toLowerCase(); |
|
|
|
|
|
|
|
|
|
|
|
//Button Parameters// |
|
|
|
|
|
switch (status) { |
|
|
|
|
|
case "pending to start" : |
|
|
|
|
|
setButtonData({ |
|
|
|
|
|
buttonName: "start", |
|
|
|
|
|
title : t("Do you want to start?"), |
|
|
|
|
|
confirmButtonText : t("Start"), |
|
|
|
|
|
successTitle : t("Start Success"), |
|
|
|
|
|
errorTitle : t("Start Fail"), |
|
|
|
|
|
buttonText : t("Start Project"), |
|
|
|
|
|
buttonIcon : <PlayArrow />, |
|
|
|
|
|
buttonColor: "success" |
|
|
|
|
|
}) |
|
|
|
|
|
break; |
|
|
|
|
|
case "on-going" : |
|
|
|
|
|
setButtonData({ |
|
|
|
|
|
buttonName: "complete", |
|
|
|
|
|
title : t("Do you want to complete?"), |
|
|
|
|
|
confirmButtonText : t("Complete"), |
|
|
|
|
|
successTitle : t("Complete Success"), |
|
|
|
|
|
errorTitle : t("Complete Fail"), |
|
|
|
|
|
buttonText : t("Complete Project"), |
|
|
|
|
|
buttonIcon : <DoneIcon />, |
|
|
|
|
|
buttonColor: "info" |
|
|
|
|
|
}) |
|
|
|
|
|
break; |
|
|
|
|
|
case "completed" : |
|
|
|
|
|
setButtonData({ |
|
|
|
|
|
buttonName: "reopen", |
|
|
|
|
|
title : t("Do you want to reopen?"), |
|
|
|
|
|
confirmButtonText : t("Reopen"), |
|
|
|
|
|
successTitle : t("Reopen Success"), |
|
|
|
|
|
errorTitle : t("Reopen Fail"), |
|
|
|
|
|
buttonText : t("Reopen Project"), |
|
|
|
|
|
buttonIcon : <AutorenewIcon />, |
|
|
|
|
|
buttonColor: "secondary" |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
}}, [formProps] |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
return ( |
|
|
return ( |
|
|
<> |
|
|
<> |
|
|
<FormProvider {...formProps}> |
|
|
<FormProvider {...formProps}> |
|
@@ -425,47 +471,18 @@ const CreateProject: React.FC<Props> = ({ |
|
|
component="form" |
|
|
component="form" |
|
|
onSubmit={formProps.handleSubmit(onSubmit, onSubmitError)} |
|
|
onSubmit={formProps.handleSubmit(onSubmit, onSubmitError)} |
|
|
> |
|
|
> |
|
|
{isEditMode && !(formProps.getValues("projectDeleted") === true) && ( |
|
|
|
|
|
|
|
|
{isEditMode && !(formProps.getValues("projectDeleted") === true) && !loading && ( |
|
|
<Stack direction="row" gap={1}> |
|
|
<Stack direction="row" gap={1}> |
|
|
{/* {!formProps.getValues("projectActualStart") && ( */} |
|
|
{/* {!formProps.getValues("projectActualStart") && ( */} |
|
|
{formProps.getValues("projectStatus")?.toLowerCase() === |
|
|
|
|
|
"pending to start" && ( |
|
|
|
|
|
<Button |
|
|
|
|
|
name="start" |
|
|
|
|
|
type="submit" |
|
|
|
|
|
variant="contained" |
|
|
|
|
|
startIcon={<PlayArrow />} |
|
|
|
|
|
color="success" |
|
|
|
|
|
> |
|
|
|
|
|
{t("Start Project")} |
|
|
|
|
|
</Button> |
|
|
|
|
|
)} |
|
|
|
|
|
{/* {formProps.getValues("projectActualStart") && |
|
|
|
|
|
!formProps.getValues("projectActualEnd") && ( */} |
|
|
|
|
|
{formProps.getValues("projectStatus")?.toLowerCase() === |
|
|
|
|
|
"on-going" && ( |
|
|
|
|
|
<Button |
|
|
|
|
|
name="complete" |
|
|
|
|
|
type="submit" |
|
|
|
|
|
variant="contained" |
|
|
|
|
|
startIcon={<DoneIcon />} |
|
|
|
|
|
color="info" |
|
|
|
|
|
> |
|
|
|
|
|
{t("Complete Project")} |
|
|
|
|
|
</Button> |
|
|
|
|
|
)} |
|
|
|
|
|
{formProps.getValues("projectStatus")?.toLowerCase() === |
|
|
|
|
|
"completed" && ( |
|
|
|
|
|
<Button |
|
|
|
|
|
name="reopen" |
|
|
|
|
|
type="submit" |
|
|
|
|
|
variant="contained" |
|
|
|
|
|
startIcon={<AutorenewIcon />} |
|
|
|
|
|
color="secondary" |
|
|
|
|
|
> |
|
|
|
|
|
{t("Reopen Project")} |
|
|
|
|
|
</Button> |
|
|
|
|
|
)} |
|
|
|
|
|
|
|
|
<Button |
|
|
|
|
|
name={buttonData.buttonName} |
|
|
|
|
|
type="submit" |
|
|
|
|
|
variant="contained" |
|
|
|
|
|
startIcon={buttonData.buttonIcon} |
|
|
|
|
|
color={buttonData.buttonColor} |
|
|
|
|
|
> |
|
|
|
|
|
{t(buttonData.buttonText)} |
|
|
|
|
|
</Button> |
|
|
{!( |
|
|
{!( |
|
|
// formProps.getValues("projectActualStart") && |
|
|
// formProps.getValues("projectActualStart") && |
|
|
// formProps.getValues("projectActualEnd") |
|
|
// formProps.getValues("projectActualEnd") |
|
|