|
@@ -11,6 +11,7 @@ import { StaffResult } from "@/app/api/staff"; |
|
|
import { TeamResult } from "@/app/api/team"; |
|
|
import { TeamResult } from "@/app/api/team"; |
|
|
import { Customer } from "@/app/api/customer"; |
|
|
import { Customer } from "@/app/api/customer"; |
|
|
import { Subsidiary } from "@/app/api/subsidiary"; |
|
|
import { Subsidiary } from "@/app/api/subsidiary"; |
|
|
|
|
|
import CostAndExpenseReportLoading from "../CostAndExpenseReport/CostAndExpenseReportLoading"; |
|
|
|
|
|
|
|
|
interface Props { |
|
|
interface Props { |
|
|
team: TeamResult[] |
|
|
team: TeamResult[] |
|
@@ -19,6 +20,12 @@ interface Props { |
|
|
needAll: boolean |
|
|
needAll: boolean |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type combo = { |
|
|
|
|
|
value: string, |
|
|
|
|
|
label: string, |
|
|
|
|
|
group: string |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
type SearchQuery = Partial<Omit<ProjectResourceOverconsumptionReportFilter, "id">>; |
|
|
type SearchQuery = Partial<Omit<ProjectResourceOverconsumptionReportFilter, "id">>; |
|
|
type SearchParamNames = keyof SearchQuery; |
|
|
type SearchParamNames = keyof SearchQuery; |
|
|
|
|
|
|
|
@@ -26,19 +33,27 @@ const ResourceOverconsumptionReport: React.FC<Props> = ({ team, customer, subsid |
|
|
const { t } = useTranslation("report"); |
|
|
const { t } = useTranslation("report"); |
|
|
const statusCombo = ["Potential Overconsumption"] |
|
|
const statusCombo = ["Potential Overconsumption"] |
|
|
const teamCombo = team.map(t => `${t.code} - ${t.name}`).sort() |
|
|
const teamCombo = team.map(t => `${t.code} - ${t.name}`).sort() |
|
|
const custCombo = customer.map(c => ({ |
|
|
|
|
|
|
|
|
const custCombo: combo[] = customer.map(c => ({ |
|
|
value: `custId-${c.id}`, |
|
|
value: `custId-${c.id}`, |
|
|
label: `${c.code} - ${c.name}`, |
|
|
label: `${c.code} - ${c.name}`, |
|
|
group: t("Client") |
|
|
group: t("Client") |
|
|
})).sort() |
|
|
|
|
|
const subsidiariesCombo = subsidiaries.map(sub => ({ |
|
|
|
|
|
|
|
|
})) |
|
|
|
|
|
.sort((a: combo, b: combo) => { |
|
|
|
|
|
const [_custType_A, id_A] = readIntFromString(a.value) as [string, number] |
|
|
|
|
|
const [_custType_B, id_B] = readIntFromString(b.value) as [string, number] |
|
|
|
|
|
return (id_A - id_B) |
|
|
|
|
|
}); |
|
|
|
|
|
const subsidiariesCombo: combo[] = subsidiaries.map(sub => ({ |
|
|
value: `subsidiaryId-${sub.id}`, |
|
|
value: `subsidiaryId-${sub.id}`, |
|
|
label: `${sub.code} - ${sub.name}`, |
|
|
label: `${sub.code} - ${sub.name}`, |
|
|
group: t("Subsidiary") |
|
|
group: t("Subsidiary") |
|
|
})).sort() |
|
|
|
|
|
// const staffCombo = staffs.map(staff => `${staff.name} - ${staff.staffId}`) |
|
|
|
|
|
// console.log(staffs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
})) |
|
|
|
|
|
.sort((a: combo, b: combo) => { |
|
|
|
|
|
const [_custType_A, id_A] = readIntFromString(a.value) as [string, number] |
|
|
|
|
|
const [_custType_B, id_B] = readIntFromString(b.value) as [string, number] |
|
|
|
|
|
return (id_A - id_B) |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
const searchCriteria: Criterion<SearchParamNames>[] = useMemo( |
|
|
const searchCriteria: Criterion<SearchParamNames>[] = useMemo( |
|
|
() => [ |
|
|
() => [ |
|
|
{ |
|
|
{ |
|
@@ -83,18 +98,11 @@ return ( |
|
|
status: "All", |
|
|
status: "All", |
|
|
lowerLimit: 0.9 |
|
|
lowerLimit: 0.9 |
|
|
} |
|
|
} |
|
|
if (query.team.length > 0 && query.team.toLocaleLowerCase() !== "all") { |
|
|
|
|
|
|
|
|
if (query.team.length > 0 && query.team.toLocaleLowerCase() !== "all") { |
|
|
index = teamCombo.findIndex(team => team === query.team) |
|
|
index = teamCombo.findIndex(team => team === query.team) |
|
|
// console.log(index) |
|
|
|
|
|
// console.log(teamCombo) |
|
|
|
|
|
const sortedTeam = team.sort((a, b) => a.code.localeCompare(b.code)) |
|
|
|
|
|
// console.log(sortedTeam) |
|
|
|
|
|
const sortedId = sortedTeam[index].id |
|
|
|
|
|
// console.log(sortedId) |
|
|
|
|
|
// console.log(team.find(team => query.team === `${team.code} - Team ${team.staffName}`)?.id) |
|
|
|
|
|
// const teamId = team.find(team => query.team === `${team.code} - Team ${team.staffName}`)?.id |
|
|
|
|
|
postData.teamId = sortedId |
|
|
|
|
|
// postData.teamId = teamId |
|
|
|
|
|
|
|
|
const teamId = team[index].id |
|
|
|
|
|
console.log(teamId) |
|
|
|
|
|
postData.teamId = teamId |
|
|
} |
|
|
} |
|
|
if (Boolean(query.lowerLimit)) { |
|
|
if (Boolean(query.lowerLimit)) { |
|
|
postData.lowerLimit = query.lowerLimit/100 |
|
|
postData.lowerLimit = query.lowerLimit/100 |
|
|