|
|
@@ -0,0 +1,63 @@ |
|
|
|
"use client"; |
|
|
|
|
|
|
|
import React, { useMemo } from "react"; |
|
|
|
import SearchBox, { Criterion } from "../SearchBox"; |
|
|
|
import { useTranslation } from "react-i18next"; |
|
|
|
import { ProjectResult } from "@/app/api/projects"; |
|
|
|
import { ProjectPandLReportFilter } from "@/app/api/reports"; |
|
|
|
import { fetchProjectPandLReport } from "@/app/api/reports/actions"; |
|
|
|
import { downloadFile } from "@/app/utils/commonUtil"; |
|
|
|
import { dateTypeCombo } from "@/app/utils/comboUtil"; |
|
|
|
import { FormHelperText } from "@mui/material"; |
|
|
|
import { errorDialog, errorDialogWithContent } from "../Swal/CustomAlerts"; |
|
|
|
|
|
|
|
interface Props { |
|
|
|
projects: ProjectResult[]; |
|
|
|
} |
|
|
|
|
|
|
|
type SearchQuery = Partial<Omit<ProjectPandLReportFilter, "id">>; |
|
|
|
type SearchParamNames = keyof SearchQuery; |
|
|
|
|
|
|
|
const GenerateProjectPandLReport: React.FC<Props> = ({ projects }) => { |
|
|
|
const { t } = useTranslation("report"); |
|
|
|
const projectCombo = projects.map(project => `${project.code} - ${project.name}`) |
|
|
|
|
|
|
|
const searchCriteria: Criterion<SearchParamNames>[] = useMemo( |
|
|
|
() => [ |
|
|
|
{ label: t("Project *"), paramName: "project", type: "select", options: projectCombo, needAll: false}, |
|
|
|
{ label: t("Start Month *"), label2: t("End Month *"), paramName: "startMonth", type: "dateRange", needMonth: true }, |
|
|
|
|
|
|
|
], |
|
|
|
[t], |
|
|
|
); |
|
|
|
|
|
|
|
return ( |
|
|
|
<> |
|
|
|
<SearchBox |
|
|
|
criteria={searchCriteria} |
|
|
|
onSearch={async (query) => { |
|
|
|
|
|
|
|
if (query.project.length > 0 && query.project.toLocaleLowerCase() !== "all") { |
|
|
|
const projectIndex = projectCombo.findIndex(project => project === query.project) |
|
|
|
console.log(projects[projectIndex].id, query.startMonth, query.startMonthTo) |
|
|
|
if(projects[projectIndex].id != null && query.startMonth != "" && query.startMonthTo != undefined){ |
|
|
|
const response = await fetchProjectPandLReport({ projectId: projects[projectIndex].id, startMonth: query.startMonth, endMonth: query.startMonthTo }) |
|
|
|
if (response) { |
|
|
|
downloadFile(new Uint8Array(response.blobValue), response.filename!!) |
|
|
|
} |
|
|
|
}else{ |
|
|
|
errorDialogWithContent(t("Download Fail"), |
|
|
|
t(`Please check the required field`), t) |
|
|
|
.then(() => { |
|
|
|
window.location.reload() |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
}} |
|
|
|
formType={"download"} |
|
|
|
/> |
|
|
|
</> |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
export default GenerateProjectPandLReport; |