From aad70869f3c04e78c101cbcfb9f6fc5ac89ccd62 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Thu, 30 May 2024 15:46:38 +0800 Subject: [PATCH] update report access --- src/app/api/reports/index.ts | 1 + .../GenerateMonthlyWorkHoursReportWrapper.tsx | 13 ++++++-- .../ProjectCompletionReport.tsx | 33 +++++++------------ .../ProjectCompletionReportWrapper.tsx | 10 ++++-- .../ResourceOverconsumptionReport.tsx | 5 +-- .../ResourceOverconsumptionReportWrapper.tsx | 31 +++++++++++------ 6 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/app/api/reports/index.ts b/src/app/api/reports/index.ts index 223a680..adcf6b6 100644 --- a/src/app/api/reports/index.ts +++ b/src/app/api/reports/index.ts @@ -100,6 +100,7 @@ export interface ProjectCompletionReportRequest { startDate: String; endDate: String; outstanding: Boolean; + teamId?: number } export interface CostAndExpenseReportFilter { team: string[]; diff --git a/src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx b/src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx index 4ce7ac9..05bfeac 100644 --- a/src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx +++ b/src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx @@ -3,13 +3,22 @@ import GenerateMonthlyWorkHoursReportLoading from "./GenerateMonthlyWorkHoursRep import { fetchProjects } from "@/app/api/projects"; import GenerateMonthlyWorkHoursReport from "./GenerateMonthlyWorkHoursReport"; import { fetchStaff } from "@/app/api/staff"; - +import { getServerSession } from "next-auth"; +import { authOptions } from "@/config/authConfig"; +import { TEAM_LEAD } from "@/middleware"; interface SubComponents { Loading: typeof GenerateMonthlyWorkHoursReportLoading; } const GenerateMonthlyWorkHoursReportWrapper: React.FC & SubComponents = async () => { - const staffs = await fetchStaff(); + const session: any = await getServerSession(authOptions) + const teamId = session.staff?.team.id + const role = session!.role + let staffs = await fetchStaff(); + + if (role === TEAM_LEAD) { + staffs = staffs.filter((staff) => staff.teamId === teamId); + } return ; }; diff --git a/src/components/ProjectCompletionReport/ProjectCompletionReport.tsx b/src/components/ProjectCompletionReport/ProjectCompletionReport.tsx index 888d4b2..5b916ac 100644 --- a/src/components/ProjectCompletionReport/ProjectCompletionReport.tsx +++ b/src/components/ProjectCompletionReport/ProjectCompletionReport.tsx @@ -12,6 +12,7 @@ import { downloadFile } from "@/app/utils/commonUtil"; import { fetchProjectCompletionReport } from "@/app/api/reports/actions"; interface Props { + teamId: number| null } type SearchQuery = Partial>; @@ -19,6 +20,7 @@ type SearchParamNames = keyof SearchQuery; const ProjectCompletionReport: React.FC = ( { + teamId } ) => { const { t } = useTranslation("report"); @@ -28,8 +30,8 @@ const ProjectCompletionReport: React.FC = ( const searchCriteria: Criterion[] = useMemo( () => [ { - label: t("startDate"), - label2: t("endDate"), + label: t("Completion Date From"), + label2: t("Completion Date To"), paramName: "startDate", type: "dateRange", }, @@ -50,37 +52,26 @@ const ProjectCompletionReport: React.FC = ( formType={"download"} criteria={searchCriteria} onSearch={async (query: any) => { - console.log(query); let postData: ProjectCompletionReportRequest = { startDate: "", endDate: dayjs().format(INPUT_DATE_FORMAT).toString(), - outstanding: false + outstanding: query.outstanding && query.outstanding === "Outstanding Accounts Receivable" }; - if (query.endDate && query.endDate.length > 0) { - postData.endDate = query.endDate; + if (query.startDateTo && query.startDateTo.length > 0) { + postData.endDate = query.startDateTo; + } + if (teamId) { + postData.teamId = teamId } - // check if start date exist if (query.startDate.length === 0) { setError(t("Start Date cant be empty")); } else { postData.startDate = query.startDate; - if (query.outstanding && query.outstanding === "Outstanding Accounts Receivable") { - // outstanding report - postData.outstanding = true - } console.log(postData) - const response = - await fetchProjectCompletionReport( - postData - ); - // normal report - + const response = await fetchProjectCompletionReport(postData); if (response) { - downloadFile( - new Uint8Array(response.blobValue), - response.filename!! - ); + downloadFile(new Uint8Array(response.blobValue), response.filename!!); } } }} diff --git a/src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx b/src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx index 0dd10cb..b1aa577 100644 --- a/src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx +++ b/src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx @@ -3,14 +3,20 @@ import { fetchAllCustomers } from "@/app/api/customer"; import { fetchTeam } from "@/app/api/team"; import ProjectCompletionReportLoading from "./ProjectCompletionReportLoading"; import ProjectCompletionReport from "./ProjectCompletionReport"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/config/authConfig"; +import { TEAM_LEAD } from "@/middleware"; interface SubComponents { Loading: typeof ProjectCompletionReportLoading; } const ProjectCompletionReportWrapper: React.FC & SubComponents = async () => { - - return + const session: any = await getServerSession(authOptions) + const teamId = session.staff?.team.id + const role = session!.role + + return }; ProjectCompletionReportWrapper.Loading = ProjectCompletionReportLoading; diff --git a/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx b/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx index c6ee254..36d4a6d 100644 --- a/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx +++ b/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx @@ -16,12 +16,13 @@ interface Props { team: TeamResult[] customer: Customer[] subsidiaries: Subsidiary[] + needAll: boolean } type SearchQuery = Partial>; type SearchParamNames = keyof SearchQuery; -const ResourceOverconsumptionReport: React.FC = ({ team, customer, subsidiaries }) => { +const ResourceOverconsumptionReport: React.FC = ({ team, customer, subsidiaries, needAll }) => { const { t } = useTranslation("report"); console.log(customer) const statusCombo = ["Overconsumption", "Potential Overconsumption"] @@ -46,7 +47,7 @@ const ResourceOverconsumptionReport: React.FC = ({ team, customer, subsid paramName: "team", type: "select", options: teamCombo, - needAll: true + needAll: needAll }, { label: t("Client"), diff --git a/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx b/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx index 0f6e234..ade577a 100644 --- a/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx +++ b/src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx @@ -4,24 +4,35 @@ import ResourceOverconsumptionReport from "./ResourceOverconsumptionReport"; import { fetchTeam } from "@/app/api/team"; import { fetchAllCustomers } from "@/app/api/customer"; import { fetchAllSubsidiaries } from "@/app/api/subsidiary"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/config/authConfig"; +import { TEAM_LEAD } from "@/middleware"; interface SubComponents { Loading: typeof ResourceOvercomsumptionReportLoading; } const ResourceOvercomsumptionReportWrapper: React.FC & SubComponents = async () => { + const session: any = await getServerSession(authOptions) + const teamId = session.staff?.team.id + const role = session!.role + let needAll = true + let teams = await fetchTeam() const [ - teams, - customers, - subsidiaries] - = await Promise.all( - [ - fetchTeam(), - fetchAllCustomers(), - fetchAllSubsidiaries() - ]) + customers, + subsidiaries] + = await Promise.all( + [ + fetchAllCustomers(), + fetchAllSubsidiaries() + ]) - return ; + if (role === TEAM_LEAD) { + needAll = false + teams = teams.filter((team) => team.id === teamId); + } + + return ; }; ResourceOvercomsumptionReportWrapper.Loading = ResourceOvercomsumptionReportLoading;