|
@@ -108,8 +108,8 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
const todayDate = new Date(); |
|
|
const todayDate = new Date(); |
|
|
const firstDayOfWeek = new Date(); |
|
|
const firstDayOfWeek = new Date(); |
|
|
const lastDayOfWeek = new Date(); |
|
|
const lastDayOfWeek = new Date(); |
|
|
firstDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 1); |
|
|
|
|
|
lastDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 7); |
|
|
|
|
|
|
|
|
firstDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 0); |
|
|
|
|
|
lastDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 6); |
|
|
const firstDayOfMonth = new Date( |
|
|
const firstDayOfMonth = new Date( |
|
|
todayDate.getFullYear(), |
|
|
todayDate.getFullYear(), |
|
|
todayDate.getMonth(), |
|
|
todayDate.getMonth(), |
|
@@ -259,12 +259,14 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
const [staffOptions, setStaffOptions]: any[] = React.useState([]); |
|
|
const [staffOptions, setStaffOptions]: any[] = React.useState([]); |
|
|
const [teamManhoursTeamId, setTeamManhoursTeamId]: any[] = React.useState(abilityViewDashboardAll ? 0 : staff.teamId); |
|
|
const [teamManhoursTeamId, setTeamManhoursTeamId]: any[] = React.useState(abilityViewDashboardAll ? 0 : staff.teamId); |
|
|
const [teamUnsubmitTeamId, setTeamUnsubmitTeamId]: any[] = React.useState(abilityViewDashboardAll ? 0 : staff.teamId); |
|
|
const [teamUnsubmitTeamId, setTeamUnsubmitTeamId]: any[] = React.useState(abilityViewDashboardAll ? 0 : staff.teamId); |
|
|
|
|
|
const [staffGradeTeamId, setStaffGradeTeamId]: any[] = React.useState(abilityViewDashboardAll ? 0 : staff.teamId); |
|
|
const [staffId, setStaffId]: any[] = React.useState(0); |
|
|
const [staffId, setStaffId]: any[] = React.useState(0); |
|
|
const [unsubmitCount, setUnsubmitCount]: any[] = React.useState([]); |
|
|
const [unsubmitCount, setUnsubmitCount]: any[] = React.useState([]); |
|
|
const [currentPageUnsubmitStaffList, setCurrentPageUnsubmitStaffList]: any[] = React.useState([]); |
|
|
const [currentPageUnsubmitStaffList, setCurrentPageUnsubmitStaffList]: any[] = React.useState([]); |
|
|
const [currentPageunsubmitCount, setCurrentPageUnsubmitCount]: any[] = React.useState([]); |
|
|
const [currentPageunsubmitCount, setCurrentPageUnsubmitCount]: any[] = React.useState([]); |
|
|
const [unsubmitStaffList, setUnsubmitStaffList]: any[] = React.useState([]); |
|
|
const [unsubmitStaffList, setUnsubmitStaffList]: any[] = React.useState([]); |
|
|
const [individualStaffProjectList, setIndividualStaffProjectList]: any[] = React.useState([]); |
|
|
const [individualStaffProjectList, setIndividualStaffProjectList]: any[] = React.useState([]); |
|
|
|
|
|
const [individualStaffProjectCodeList, setIndividualStaffProjectCodeList]: any[] = React.useState([]); |
|
|
const [individualStaffManhours, setIndividualStaffManhours]: any[] = React.useState([]); |
|
|
const [individualStaffManhours, setIndividualStaffManhours]: any[] = React.useState([]); |
|
|
const [individualStaffManhoursPercentage, setIndividualStaffManhoursPercentage]: any[] = React.useState([]); |
|
|
const [individualStaffManhoursPercentage, setIndividualStaffManhoursPercentage]: any[] = React.useState([]); |
|
|
const [totalNormalConsumption, setTotalNormalConsumption]: any = React.useState('NA'); |
|
|
const [totalNormalConsumption, setTotalNormalConsumption]: any = React.useState('NA'); |
|
@@ -381,7 +383,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const fetchTotalManhoursByGradeData = async () => { |
|
|
const fetchTotalManhoursByGradeData = async () => { |
|
|
const fetchResult = await fetchTotalManhoursByGrade(weeklyValueByStaffGrade.format('YYYY-MM-DD'), weeklyToValueByStaffGrade.format('YYYY-MM-DD')); |
|
|
|
|
|
|
|
|
const fetchResult = await fetchTotalManhoursByGrade(weeklyValueByStaffGrade.format('YYYY-MM-DD'), weeklyToValueByStaffGrade.format('YYYY-MM-DD'),staffGradeTeamId); |
|
|
const actualManhours = fetchResult[0].staffGradeTotalManhours |
|
|
const actualManhours = fetchResult[0].staffGradeTotalManhours |
|
|
const plannedManhours = fetchResult[0].staffGradeTotalPlannedManhours |
|
|
const plannedManhours = fetchResult[0].staffGradeTotalPlannedManhours |
|
|
var chartMax = 5 |
|
|
var chartMax = 5 |
|
@@ -428,7 +430,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
setTotalManHoursByGradeMaxValue(chartMax) |
|
|
setTotalManHoursByGradeMaxValue(chartMax) |
|
|
} |
|
|
} |
|
|
const fetchMonthlyTotalManhoursByGradeData = async () => { |
|
|
const fetchMonthlyTotalManhoursByGradeData = async () => { |
|
|
const fetchResult = await fetchTotalManhoursByGrade(totalManHoursMonthlyFromValue.format('YYYY-MM-DD'), totalManHoursMonthlyToValue.endOf('month').format('YYYY-MM-DD')); |
|
|
|
|
|
|
|
|
const fetchResult = await fetchTotalManhoursByGrade(totalManHoursMonthlyFromValue.format('YYYY-MM-DD'), totalManHoursMonthlyToValue.endOf('month').format('YYYY-MM-DD'),staffGradeTeamId); |
|
|
const actualManhours = fetchResult[0].staffGradeTotalManhours |
|
|
const actualManhours = fetchResult[0].staffGradeTotalManhours |
|
|
const plannedManhours = fetchResult[0].staffGradeTotalPlannedManhours |
|
|
const plannedManhours = fetchResult[0].staffGradeTotalPlannedManhours |
|
|
var chartMax = 5 |
|
|
var chartMax = 5 |
|
@@ -517,6 +519,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursByDay |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursByDay |
|
|
const result = [] |
|
|
const result = [] |
|
|
const projectList = [] |
|
|
const projectList = [] |
|
|
|
|
|
const projectCodeList = [] |
|
|
const percentageList = [] |
|
|
const percentageList = [] |
|
|
var maxValue = 12 |
|
|
var maxValue = 12 |
|
|
|
|
|
|
|
@@ -528,11 +531,13 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
maxValue = manhoursResult[i].manhours |
|
|
maxValue = manhoursResult[i].manhours |
|
|
} |
|
|
} |
|
|
result.push(manhoursResult[i].manhours) |
|
|
result.push(manhoursResult[i].manhours) |
|
|
|
|
|
projectCodeList.push(manhoursResult[i].projectNo) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
percentageList.push(manhoursResult[i].percentage) |
|
|
|
|
|
|
|
|
percentageList.push(manhoursResult[i].manhours) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
|
|
|
setIndividualStaffProjectCodeList(projectCodeList) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
@@ -551,6 +556,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursWeekly |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursWeekly |
|
|
const result = [] |
|
|
const result = [] |
|
|
const projectList = [] |
|
|
const projectList = [] |
|
|
|
|
|
const projectCodeList = [] |
|
|
const percentageList = [] |
|
|
const percentageList = [] |
|
|
var maxValue = 12 |
|
|
var maxValue = 12 |
|
|
if (manhoursResult.length > 0) { |
|
|
if (manhoursResult.length > 0) { |
|
@@ -559,11 +565,13 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
maxValue = manhoursResult[i].manhours |
|
|
maxValue = manhoursResult[i].manhours |
|
|
} |
|
|
} |
|
|
result.push(manhoursResult[i].manhours) |
|
|
result.push(manhoursResult[i].manhours) |
|
|
|
|
|
projectCodeList.push(manhoursResult[i].projectNo) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
percentageList.push(manhoursResult[i].percentage) |
|
|
percentageList.push(manhoursResult[i].percentage) |
|
|
} |
|
|
} |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
|
|
|
setIndividualStaffProjectCodeList(projectCodeList) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
|
setTotalNormalConsumption(totalResult[0].normalManhours) |
|
|
setTotalNormalConsumption(totalResult[0].normalManhours) |
|
@@ -580,6 +588,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursByMonth |
|
|
const leaveResult = fetchResult[0].individualStaffTotalLeaveHoursByMonth |
|
|
const result = [] |
|
|
const result = [] |
|
|
const projectList = [] |
|
|
const projectList = [] |
|
|
|
|
|
const projectCodeList = [] |
|
|
const percentageList = [] |
|
|
const percentageList = [] |
|
|
var maxValue = 12 |
|
|
var maxValue = 12 |
|
|
if (manhoursResult.length > 0) { |
|
|
if (manhoursResult.length > 0) { |
|
@@ -588,11 +597,13 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
maxValue = manhoursResult[i].manhours |
|
|
maxValue = manhoursResult[i].manhours |
|
|
} |
|
|
} |
|
|
result.push(manhoursResult[i].manhours) |
|
|
result.push(manhoursResult[i].manhours) |
|
|
|
|
|
projectCodeList.push(manhoursResult[i].projectNo) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
projectList.push(manhoursResult[i].projectName) |
|
|
percentageList.push(manhoursResult[i].percentage) |
|
|
percentageList.push(manhoursResult[i].percentage) |
|
|
} |
|
|
} |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
setIndividualManhoursMaxValue(maxValue) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
setIndividualStaffProjectList(projectList) |
|
|
|
|
|
setIndividualStaffProjectCodeList(projectCodeList) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhours(result) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
|
setIndividualStaffManhoursPercentage(percentageList) |
|
|
setTotalNormalConsumption(totalResult[0].normalManhours) |
|
|
setTotalNormalConsumption(totalResult[0].normalManhours) |
|
@@ -862,7 +873,7 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
enabled: true, |
|
|
enabled: true, |
|
|
}, |
|
|
}, |
|
|
xaxis: { |
|
|
xaxis: { |
|
|
categories: individualStaffProjectList, |
|
|
|
|
|
|
|
|
categories: individualStaffProjectCodeList, |
|
|
}, |
|
|
}, |
|
|
yaxis: [ |
|
|
yaxis: [ |
|
|
{ |
|
|
{ |
|
@@ -878,6 +889,13 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
borderColor: "#f1f1f1", |
|
|
borderColor: "#f1f1f1", |
|
|
}, |
|
|
}, |
|
|
annotations: {}, |
|
|
annotations: {}, |
|
|
|
|
|
tooltip: { |
|
|
|
|
|
x: { |
|
|
|
|
|
formatter: (value, { series, seriesIndex, dataPointIndex, w }) => { |
|
|
|
|
|
return individualStaffProjectList[dataPointIndex]; |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
series: [ |
|
|
series: [ |
|
|
{ |
|
|
{ |
|
|
name: "Manhours(Hour)", |
|
|
name: "Manhours(Hour)", |
|
@@ -1442,6 +1460,28 @@ const StaffUtilization: React.FC<Props> = ({ abilities, staff }) => { |
|
|
</div> |
|
|
</div> |
|
|
<div className="inline-block w-fit mt-2"> |
|
|
<div className="inline-block w-fit mt-2"> |
|
|
<div className="inline-block mt-2 ml-6"> |
|
|
<div className="inline-block mt-2 ml-6"> |
|
|
|
|
|
{abilityViewDashboardAll && |
|
|
|
|
|
<div className="inline-block"> |
|
|
|
|
|
<div className="inline-block ml-6"> |
|
|
|
|
|
<Label className="text-slate-500 font-medium"> |
|
|
|
|
|
Team: |
|
|
|
|
|
</Label> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div className="inline-block ml-1 w-60"> |
|
|
|
|
|
<Select |
|
|
|
|
|
placeholder="Please select a team" |
|
|
|
|
|
options={teamManhoursTeamOptions} |
|
|
|
|
|
isClearable={true} |
|
|
|
|
|
onChange={(selectedOption: any) => { |
|
|
|
|
|
if (selectedOption === null) { |
|
|
|
|
|
setStaffGradeTeamId(null); |
|
|
|
|
|
} else { |
|
|
|
|
|
setStaffGradeTeamId(selectedOption.value); |
|
|
|
|
|
} |
|
|
|
|
|
}} |
|
|
|
|
|
/> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div>} |
|
|
{staffGradeManhoursSpentSelect === "Weekly" && ( |
|
|
{staffGradeManhoursSpentSelect === "Weekly" && ( |
|
|
<LocalizationProvider dateAdapter={AdapterDayjs}> |
|
|
<LocalizationProvider dateAdapter={AdapterDayjs}> |
|
|
<DatePicker |
|
|
<DatePicker |
|
|