Просмотр исходного кода

fix

tags/Baseline_30082024_FRONTEND_UAT
Mac\David 1 год назад
Родитель
Сommit
b6d533c32e
3 измененных файлов: 57 добавлений и 11 удалений
  1. +2
    -2
      src/app/api/staffUtilization/index.ts
  2. +9
    -3
      src/components/ProgressByTeam/ProgressByTeam.tsx
  3. +46
    -6
      src/components/StaffUtilization/StaffUtilization.tsx

+ 2
- 2
src/app/api/staffUtilization/index.ts Просмотреть файл

@@ -71,8 +71,8 @@ export const fetchmonthlyTeamTotalManhours = cache(async (teamId: number, startd
return serverFetchJson<monthlyTeamTotalManhoursSpentResult[]>(`${BASE_API_URL}/dashboard/searchMonthlyActualTeamTotalManhoursSpent?teamId=${teamId}&startdate=${startdate}&enddate=${enddate}`); return serverFetchJson<monthlyTeamTotalManhoursSpentResult[]>(`${BASE_API_URL}/dashboard/searchMonthlyActualTeamTotalManhoursSpent?teamId=${teamId}&startdate=${startdate}&enddate=${enddate}`);
}); });


export const fetchTotalManhoursByGrade = cache(async (startdate:string, enddate:string) => {
return serverFetchJson<totalManhourByGradeResult[]>(`${BASE_API_URL}/dashboard/searchTotalManhoursSpentByStaffGrade?startdate=${startdate}&enddate=${enddate}`);
export const fetchTotalManhoursByGrade = cache(async (startdate:string, enddate:string, teamId:number) => {
return serverFetchJson<totalManhourByGradeResult[]>(`${BASE_API_URL}/dashboard/searchTotalManhoursSpentByStaffGrade?startdate=${startdate}&enddate=${enddate}&teamId=${teamId}`);
}); });


export const fetchWeeklyUnsubmit = cache(async (teamId:number,startdate:string, publicHolidayList:string) => { export const fetchWeeklyUnsubmit = cache(async (teamId:number,startdate:string, publicHolidayList:string) => {


+ 9
- 3
src/components/ProgressByTeam/ProgressByTeam.tsx Просмотреть файл

@@ -91,14 +91,14 @@ const ProgressByTeam: React.FC = () => {
} }


useEffect(() => { useEffect(() => {
const projectName = []
const projectNo = []
const manhourConsumptionPercentage = [] const manhourConsumptionPercentage = []
for (let i = 0; i < teamProjectResult.length; i++){ for (let i = 0; i < teamProjectResult.length; i++){
teamProjectResult[i].color = color[i] teamProjectResult[i].color = color[i]
projectName.push(teamProjectResult[i].projectName)
projectNo.push(teamProjectResult[i].projectNo)
manhourConsumptionPercentage.push(teamProjectResult[i].manhourConsumptionPercentage) manhourConsumptionPercentage.push(teamProjectResult[i].manhourConsumptionPercentage)
} }
setChartProjectName(projectName)
setChartProjectName(projectNo)
setChartManhourConsumptionPercentage(manhourConsumptionPercentage) setChartManhourConsumptionPercentage(manhourConsumptionPercentage)
}, [teamProjectResult]); }, [teamProjectResult]);


@@ -249,6 +249,12 @@ const ProgressByTeam: React.FC = () => {
}, },
flex: 0.1, flex: 0.1,
}, },
{
id: "projectCode",
field: "projectCode",
headerName: "Project No",
minWidth:100
},
{ {
id: "projectName", id: "projectName",
field: "projectName", field: "projectName",


+ 46
- 6
src/components/StaffUtilization/StaffUtilization.tsx Просмотреть файл

@@ -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:&nbsp;
</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


Загрузка…
Отмена
Сохранить