| @@ -21,6 +21,7 @@ export interface InvoiceResultV2 { | |||||
| projectCode: string; | projectCode: string; | ||||
| projectName: string; | projectName: string; | ||||
| team: string; | team: string; | ||||
| teamId: number; | |||||
| teamCodeName: string; | teamCodeName: string; | ||||
| stage: string; | stage: string; | ||||
| paymentMilestone: string; | paymentMilestone: string; | ||||
| @@ -23,8 +23,6 @@ import CreateInvoiceModal from "./CreateInvoiceModal"; | |||||
| interface Props { | interface Props { | ||||
| issuedInvoice: issuedInvoiceList[]; | |||||
| receivedInvoice: receivedInvoiceList[]; | |||||
| invoices: invoiceList[]; | invoices: invoiceList[]; | ||||
| } | } | ||||
| @@ -45,13 +43,13 @@ type SearchParamNames = keyof SearchQuery; | |||||
| type SearchQuery2 = Partial<Omit<receivedInvoiceSearchForm, "id">>; | type SearchQuery2 = Partial<Omit<receivedInvoiceSearchForm, "id">>; | ||||
| type SearchParamNames2 = keyof SearchQuery2; | type SearchParamNames2 = keyof SearchQuery2; | ||||
| const InvoiceSearch: React.FC<Props> = ({ issuedInvoice, receivedInvoice, invoices }) => { | |||||
| const InvoiceSearch: React.FC<Props> = ({ invoices }) => { | |||||
| // console.log(invoices) | // console.log(invoices) | ||||
| const { t } = useTranslation("Invoice"); | const { t } = useTranslation("Invoice"); | ||||
| const [tabIndex, setTabIndex] = useState(0); | const [tabIndex, setTabIndex] = useState(0); | ||||
| const [filteredIssuedInvoices, setFilteredIssuedInvoices] = useState(issuedInvoice); | |||||
| const [filteredReceivedInvoices, setFilteredReceivedInvoices] = useState(receivedInvoice); | |||||
| // const [filteredIssuedInvoices, setFilteredIssuedInvoices] = useState(issuedInvoice); | |||||
| // const [filteredReceivedInvoices, setFilteredReceivedInvoices] = useState(receivedInvoice); | |||||
| const [filteredIvoices, setFilterInovices] = useState(invoices); | const [filteredIvoices, setFilterInovices] = useState(invoices); | ||||
| const searchCriteria: Criterion<SearchParamNames>[] = useMemo( | const searchCriteria: Criterion<SearchParamNames>[] = useMemo( | ||||
| @@ -67,16 +65,7 @@ const InvoiceSearch: React.FC<Props> = ({ issuedInvoice, receivedInvoice, invoic | |||||
| { label: t("Issue Date"), label2: t("Issue Date To"), paramName: "invoiceDate", type: "dateRange" }, | { label: t("Issue Date"), label2: t("Issue Date To"), paramName: "invoiceDate", type: "dateRange" }, | ||||
| { label: t("Settle Date"), label2: t("Settle Date To"), paramName: "dueDate", type: "dateRange" }, | { label: t("Settle Date"), label2: t("Settle Date To"), paramName: "dueDate", type: "dateRange" }, | ||||
| ], | ], | ||||
| [t, issuedInvoice], | |||||
| ); | |||||
| const searchCriteria2: Criterion<SearchParamNames2>[] = useMemo( | |||||
| () => [ | |||||
| { label: t("Invoice No"), paramName: "invoiceNo", type: "text" }, | |||||
| { label: t("Project Code"), paramName: "projectCode", type: "text" }, | |||||
| { label: t("Recipt Date"), label2: t("Recipt Date To"), paramName: "receiptDate", type: "dateRange" }, | |||||
| ], | |||||
| [t, issuedInvoice], | |||||
| [t, invoices], | |||||
| ); | ); | ||||
| const onReset = useCallback(() => { | const onReset = useCallback(() => { | ||||
| @@ -4,6 +4,8 @@ import InvoiceSearch from "./InvoiceSearch"; | |||||
| import InvoiceSearchLoading from "./InvoiceSearchLoading"; | import InvoiceSearchLoading from "./InvoiceSearchLoading"; | ||||
| import { fetchInvoicesV3, fetchIssuedInvoices, fetchReceivedInvoices, issuedInvoiceList, issuedInvoiceResult } from "@/app/api/invoices"; | import { fetchInvoicesV3, fetchIssuedInvoices, fetchReceivedInvoices, issuedInvoiceList, issuedInvoiceResult } from "@/app/api/invoices"; | ||||
| import { INPUT_DATE_FORMAT, convertDateArrayToString, convertDateToString, moneyFormatter, timestampToDateString } from "@/app/utils/formatUtil"; | import { INPUT_DATE_FORMAT, convertDateArrayToString, convertDateToString, moneyFormatter, timestampToDateString } from "@/app/utils/formatUtil"; | ||||
| import { fetchTeam } from "@/app/api/team"; | |||||
| import { fetchUserStaff } from "@/app/utils/fetchUtil"; | |||||
| interface SubComponents { | interface SubComponents { | ||||
| @@ -16,39 +18,16 @@ interface SubComponents { | |||||
| // } | // } | ||||
| const InvoiceSearchWrapper: React.FC & SubComponents = async () => { | const InvoiceSearchWrapper: React.FC & SubComponents = async () => { | ||||
| const issuedInvoices = await fetchIssuedInvoices() | |||||
| const receivedInvoices = await fetchReceivedInvoices() | |||||
| const userStaff = await fetchUserStaff() | |||||
| const teamId = userStaff?.teamId | |||||
| const invoices = await fetchInvoicesV3() | const invoices = await fetchInvoicesV3() | ||||
| // console.log(invoices) | |||||
| const convertedIssedInvoices = issuedInvoices.map((invoice)=>{ | |||||
| return{ | |||||
| id: invoice.id, | |||||
| invoiceNo: invoice.invoiceNo, | |||||
| projectCode: invoice.projectCode, | |||||
| projectName: invoice.projectName, | |||||
| stage: invoice.stage, | |||||
| paymentMilestone: invoice.paymentMilestone, | |||||
| invoiceDate: convertDateArrayToString(invoice.invoiceDate, INPUT_DATE_FORMAT, false)!!, | |||||
| dueDate: convertDateArrayToString(invoice.dueDate, INPUT_DATE_FORMAT, false)!!, | |||||
| issuedAmount: moneyFormatter.format(invoice.issuedAmount) | |||||
| } | |||||
| }) | |||||
| const convertedReceivedInvoices = receivedInvoices.map((invoice)=>{ | |||||
| return{ | |||||
| id: invoice.id, | |||||
| invoiceNo: invoice.invoiceNo, | |||||
| projectCode: invoice.projectCode, | |||||
| projectName: invoice.projectName, | |||||
| team: invoice.team, | |||||
| receiptDate: convertDateArrayToString(invoice.receiptDate, INPUT_DATE_FORMAT, false)!!, | |||||
| receivedAmount: moneyFormatter.format(invoice.receivedAmount) | |||||
| } | |||||
| }) | |||||
| let filteredInvoice = invoices | |||||
| if (teamId) { | |||||
| filteredInvoice = invoices.filter(invoice => invoice.teamId === teamId) | |||||
| } | |||||
| const convertedInvoices = invoices.map((invoice)=>{ | |||||
| const convertedInvoices = filteredInvoice.map((invoice)=>{ | |||||
| return{ | return{ | ||||
| id: invoice.id, | id: invoice.id, | ||||
| invoiceNo: invoice.invoiceNo, | invoiceNo: invoice.invoiceNo, | ||||
| @@ -64,8 +43,6 @@ const InvoiceSearchWrapper: React.FC & SubComponents = async () => { | |||||
| }) | }) | ||||
| return <InvoiceSearch | return <InvoiceSearch | ||||
| issuedInvoice={convertedIssedInvoices} | |||||
| receivedInvoice={convertedReceivedInvoices} | |||||
| invoices={convertedInvoices} | invoices={convertedInvoices} | ||||
| /> | /> | ||||
| @@ -2,7 +2,9 @@ import { fetchProjectCategories, fetchProjects } from "@/app/api/projects"; | |||||
| import React from "react"; | import React from "react"; | ||||
| import ProjectSearch from "./ProjectSearch"; | import ProjectSearch from "./ProjectSearch"; | ||||
| import ProjectSearchLoading from "./ProjectSearchLoading"; | import ProjectSearchLoading from "./ProjectSearchLoading"; | ||||
| import { fetchUserAbilities } from "@/app/utils/fetchUtil"; | |||||
| import { fetchUserAbilities, fetchUserStaff } from "@/app/utils/fetchUtil"; | |||||
| import { authOptions } from "@/config/authConfig"; | |||||
| import { getServerSession } from "next-auth"; | |||||
| interface SubComponents { | interface SubComponents { | ||||
| Loading: typeof ProjectSearchLoading; | Loading: typeof ProjectSearchLoading; | ||||
| @@ -10,11 +12,16 @@ interface SubComponents { | |||||
| const ProjectSearchWrapper: React.FC & SubComponents = async () => { | const ProjectSearchWrapper: React.FC & SubComponents = async () => { | ||||
| const projectCategories = await fetchProjectCategories(); | const projectCategories = await fetchProjectCategories(); | ||||
| const userStaff = await fetchUserStaff() | |||||
| const teamId = userStaff?.teamId | |||||
| const projects = await fetchProjects(); | const projects = await fetchProjects(); | ||||
| let filteredProjects = projects | |||||
| if (teamId) { | |||||
| filteredProjects = projects.filter(project => project.teamId === teamId) | |||||
| } | |||||
| const abilities = await fetchUserAbilities() | const abilities = await fetchUserAbilities() | ||||
| return <ProjectSearch projects={projects} projectCategories={projectCategories} abilities={abilities}/>; | |||||
| return <ProjectSearch projects={filteredProjects} projectCategories={projectCategories} abilities={abilities}/>; | |||||
| }; | }; | ||||
| ProjectSearchWrapper.Loading = ProjectSearchLoading; | ProjectSearchWrapper.Loading = ProjectSearchLoading; | ||||