@@ -2,12 +2,13 @@ | |||
import { CostAndExpenseReportFilter, CostAndExpenseReportRequest } from "@/app/api/reports"; | |||
import { useTranslation } from "react-i18next"; | |||
import SearchBox, { Criterion } from "../SearchBox"; | |||
import { useMemo } from "react"; | |||
import { useMemo, useState } from "react"; | |||
import { TeamResult } from "@/app/api/team"; | |||
import { Customer } from "@/app/api/customer"; | |||
import { Subsidiary } from "@/app/api/subsidiary"; | |||
import { fetchCostAndExpenseReport } from "@/app/api/reports/actions"; | |||
import { downloadFile } from "@/app/utils/commonUtil"; | |||
import CostAndExpenseReportLoading from "./CostAndExpenseReportLoading"; | |||
interface Props { | |||
team: TeamResult[]; | |||
@@ -16,10 +17,14 @@ interface Props { | |||
needAll: boolean | undefined; | |||
} | |||
interface SubComponents { | |||
Loading: typeof CostAndExpenseReportLoading; | |||
} | |||
type SearchQuery = Partial<Omit<CostAndExpenseReportFilter, "id">>; | |||
type SearchParamNames = keyof SearchQuery; | |||
const CostAndExpenseReport: React.FC<Props> = ({ team, customer, subsidiary, needAll }) => { | |||
const CostAndExpenseReport: React.FC<Props> & SubComponents = ({ team, customer, subsidiary, needAll }) => { | |||
const { t } = useTranslation("report"); | |||
const teamCombo = team.map((t) => `${t.code} - ${t.name}`); | |||
// const custCombo = customer.map(c => ({label: `${c.name} - ${c.code}`, value: c.id})) | |||
@@ -62,12 +67,17 @@ const CostAndExpenseReport: React.FC<Props> = ({ team, customer, subsidiary, nee | |||
[t] | |||
); | |||
const [loading, setLoading] = useState(false); | |||
return ( | |||
<> | |||
{loading && <CostAndExpenseReport.Loading />} | |||
{!loading && | |||
<SearchBox | |||
formType={"download"} | |||
criteria={searchCriteria} | |||
onSearch={async (query: any) => { | |||
setLoading(true); | |||
let index = 0 | |||
let postData: CostAndExpenseReportRequest = { | |||
teamId: null, | |||
@@ -95,10 +105,13 @@ const CostAndExpenseReport: React.FC<Props> = ({ team, customer, subsidiary, nee | |||
if (response) { | |||
downloadFile(new Uint8Array(response.blobValue), response.filename!!) | |||
} | |||
setLoading(false); | |||
}} | |||
/> | |||
/>} | |||
</> | |||
); | |||
}; | |||
CostAndExpenseReport.Loading = CostAndExpenseReportLoading | |||
export default CostAndExpenseReport; |
@@ -4,14 +4,20 @@ import React, { useMemo, useState } from "react"; | |||
import SearchBox, { Criterion } from "../ReportSearchBox4"; | |||
import { useTranslation } from "react-i18next"; | |||
import { CostandExpense } from "@/app/api/report4"; | |||
import { CostandExpenseReportGenLoading } from "./CostandExpenseReportGenLoading" | |||
interface Props { | |||
projects: CostandExpense[]; | |||
} | |||
interface SubComponents{ | |||
Loading: typeof CostandExpenseReportGenLoading | |||
} | |||
type SearchQuery = Partial<Omit<CostandExpense, "id">>; | |||
type SearchParamNames = keyof SearchQuery; | |||
const ProgressByClientSearch: React.FC<Props> = ({ projects }) => { | |||
const CostandExpenseReportGen: React.FC<Props> & SubComponents = ({ projects }) => { | |||
const { t } = useTranslation("projects"); | |||
const searchCriteria: Criterion<SearchParamNames>[] = useMemo( | |||
@@ -29,17 +35,24 @@ const ProgressByClientSearch: React.FC<Props> = ({ projects }) => { | |||
[t], | |||
); | |||
const [loading, setLoading] = React.useState(false); | |||
return ( | |||
<> | |||
{loading && <CostandExpenseReportGen.Loading />} | |||
{!loading && | |||
<SearchBox | |||
criteria={searchCriteria} | |||
onSearch={(query) => { | |||
console.log(query); | |||
setLoading(true) | |||
// console.log(query); | |||
}} | |||
/> | |||
/>} | |||
{/* <DownloadReportButton /> */} | |||
</> | |||
); | |||
}; | |||
export default ProgressByClientSearch; | |||
CostandExpenseReportGen.Loading = CostandExpenseReportGenLoading | |||
export default CostandExpenseReportGen; |
@@ -6,7 +6,7 @@ import Stack from "@mui/material/Stack"; | |||
import React from "react"; | |||
// Can make this nicer | |||
export const DelayReportGenLoading: React.FC = () => { | |||
export const CostandExpenseReportGenLoading: React.FC = () => { | |||
return ( | |||
<> | |||
<Card> | |||
@@ -38,4 +38,4 @@ export const DelayReportGenLoading: React.FC = () => { | |||
); | |||
}; | |||
export default DelayReportGenLoading; | |||
export default CostandExpenseReportGenLoading; |
@@ -10,16 +10,23 @@ import { fetchAllClientSubsidiaryProjects } from "@/app/api/clientprojects/actio | |||
import { fetchProjectsFinancialStatusReport } from "@/app/api/reporte1/action"; | |||
import { downloadFile } from "@/app/utils/commonUtil"; | |||
import { SessionStaff } from "@/config/authConfig"; | |||
import FinancialStatusReportGenLoading from "./FinancialStatusReportGenLoading"; | |||
//import { DownloadReportButton } from './DownloadReportButton'; | |||
interface Props { | |||
projects: FinancialStatus[]; | |||
teamCombo : TeamCombo[]; | |||
userStaff: SessionStaff; | |||
} | |||
interface SubComponents { | |||
Loading: typeof FinancialStatusReportGenLoading; | |||
} | |||
type SearchQuery = Partial<Omit<TeamCombo, "id">>; | |||
type SearchParamNames = keyof SearchQuery; | |||
const GenFinancialStatusReport: React.FC<Props> = ({ projects, teamCombo, userStaff }) => { | |||
const GenFinancialStatusReport: React.FC<Props> & SubComponents = ({ projects, teamCombo, userStaff }) => { | |||
const { t } = useTranslation("projects"); | |||
const combo = teamCombo.map(combo => {return `${combo.code} - ${combo.name}`}) | |||
@@ -37,11 +44,16 @@ const GenFinancialStatusReport: React.FC<Props> = ({ projects, teamCombo, userSt | |||
[t], | |||
); | |||
const [loading, setLoading] = useState(false); | |||
return ( | |||
<> | |||
{loading && <GenFinancialStatusReport.Loading />} | |||
{!loading && | |||
<SearchBox | |||
criteria={searchCriteria} | |||
onSearch={async (query) => { | |||
setLoading(true) | |||
if (query.code.length > 0 && query.code.toLocaleLowerCase() !== "all") { | |||
const projectIndex = teamCombo.findIndex((project) => `${project.code} - ${project.name}` === query.code) | |||
console.log(teamCombo[projectIndex].id) | |||
@@ -56,12 +68,15 @@ const GenFinancialStatusReport: React.FC<Props> = ({ projects, teamCombo, userSt | |||
downloadFile(new Uint8Array(response.blobValue), response.filename!!) | |||
} | |||
} | |||
setLoading(false) | |||
}} | |||
formType="download" | |||
/> | |||
/>} | |||
{/* <DownloadReportButton /> */} | |||
</> | |||
); | |||
}; | |||
GenFinancialStatusReport.Loading = FinancialStatusReportGenLoading | |||
export default GenFinancialStatusReport; |