Pārlūkot izejas kodu

update report access

tags/Baseline_30082024_FRONTEND_UAT
MSI\derek pirms 1 gada
vecāks
revīzija
aad70869f3
6 mainītis faili ar 56 papildinājumiem un 37 dzēšanām
  1. +1
    -0
      src/app/api/reports/index.ts
  2. +11
    -2
      src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx
  3. +12
    -21
      src/components/ProjectCompletionReport/ProjectCompletionReport.tsx
  4. +8
    -2
      src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx
  5. +3
    -2
      src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx
  6. +21
    -10
      src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx

+ 1
- 0
src/app/api/reports/index.ts Parādīt failu

@@ -100,6 +100,7 @@ export interface ProjectCompletionReportRequest {
startDate: String;
endDate: String;
outstanding: Boolean;
teamId?: number
}
export interface CostAndExpenseReportFilter {
team: string[];


+ 11
- 2
src/components/GenerateMonthlyWorkHoursReport/GenerateMonthlyWorkHoursReportWrapper.tsx Parādīt failu

@@ -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 <GenerateMonthlyWorkHoursReport staffs={staffs}/>;
};


+ 12
- 21
src/components/ProjectCompletionReport/ProjectCompletionReport.tsx Parādīt failu

@@ -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<Omit<ProjectCompletionReportFilter, "id">>;
@@ -19,6 +20,7 @@ type SearchParamNames = keyof SearchQuery;

const ProjectCompletionReport: React.FC<Props> = (
{
teamId
}
) => {
const { t } = useTranslation("report");
@@ -28,8 +30,8 @@ const ProjectCompletionReport: React.FC<Props> = (
const searchCriteria: Criterion<SearchParamNames>[] = 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<Props> = (
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!!);
}
}
}}


+ 8
- 2
src/components/ProjectCompletionReport/ProjectCompletionReportWrapper.tsx Parādīt failu

@@ -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 <ProjectCompletionReport/>
const session: any = await getServerSession(authOptions)
const teamId = session.staff?.team.id
const role = session!.role

return <ProjectCompletionReport teamId={role === TEAM_LEAD && session.staff?.team ? teamId : null}/>
};

ProjectCompletionReportWrapper.Loading = ProjectCompletionReportLoading;


+ 3
- 2
src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReport.tsx Parādīt failu

@@ -16,12 +16,13 @@ interface Props {
team: TeamResult[]
customer: Customer[]
subsidiaries: Subsidiary[]
needAll: boolean
}

type SearchQuery = Partial<Omit<ProjectResourceOverconsumptionReportFilter, "id">>;
type SearchParamNames = keyof SearchQuery;

const ResourceOverconsumptionReport: React.FC<Props> = ({ team, customer, subsidiaries }) => {
const ResourceOverconsumptionReport: React.FC<Props> = ({ team, customer, subsidiaries, needAll }) => {
const { t } = useTranslation("report");
console.log(customer)
const statusCombo = ["Overconsumption", "Potential Overconsumption"]
@@ -46,7 +47,7 @@ const ResourceOverconsumptionReport: React.FC<Props> = ({ team, customer, subsid
paramName: "team",
type: "select",
options: teamCombo,
needAll: true
needAll: needAll
},
{
label: t("Client"),


+ 21
- 10
src/components/ResourceOverconsumptionReport/ResourceOverconsumptionReportWrapper.tsx Parādīt failu

@@ -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 <ResourceOverconsumptionReport team={teams} customer={customers} subsidiaries={subsidiaries}/>;
if (role === TEAM_LEAD) {
needAll = false
teams = teams.filter((team) => team.id === teamId);
}

return <ResourceOverconsumptionReport team={teams} customer={customers} subsidiaries={subsidiaries} needAll={needAll}/>;
};

ResourceOvercomsumptionReportWrapper.Loading = ResourceOvercomsumptionReportLoading;


Notiek ielāde…
Atcelt
Saglabāt