@@ -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; | ||||