diff --git a/src/dashboards/MasterCorporate/MasterStatistical.tsx b/src/dashboards/MasterCorporate/MasterStatistical.tsx
index fb4c559b..8978395a 100644
--- a/src/dashboards/MasterCorporate/MasterStatistical.tsx
+++ b/src/dashboards/MasterCorporate/MasterStatistical.tsx
@@ -14,6 +14,7 @@ import {useListSearch} from "@/hooks/useListSearch";
import axios from "axios";
import {toast} from "react-toastify";
import Button from "@/components/Low/Button";
+import {getUserName} from "@/utils/users";
interface GroupedCorporateUsers {
// list of user Ids
@@ -71,44 +72,44 @@ const MasterStatistical = (props: Props) => {
const tableResults = React.useMemo(
() =>
- assignments
- .reduce((accmA: TableData[], a: AssignmentWithCorporateId) => {
- const userResults = a.assignees.map((assignee) => {
- const userStats = a.results.find((r) => r.user === assignee)?.stats || [];
- const userData = users.find((u) => u.id === assignee);
- const corporate = users.find((u) => u.id === a.assigner)?.name || "";
- const commonData = {
- user: userData?.name || "N/A",
- email: userData?.email || "N/A",
- userId: assignee,
- corporateId: a.corporateId,
- exams: a.exams.map((x) => x.id).join(", "),
- corporate,
- assignment: a.name,
- };
- if (userStats.length === 0) {
- return {
- ...commonData,
- correct: 0,
- submitted: false,
- date: null,
- };
- }
-
+ assignments.reduce((accmA: TableData[], a: AssignmentWithCorporateId) => {
+ const userResults = a.assignees.map((assignee) => {
+ const userStats = a.results.find((r) => r.user === assignee)?.stats || [];
+ const userData = users.find((u) => u.id === assignee);
+ const corporate = getUserName(users.find((u) => u.id === a.assigner));
+ const commonData = {
+ user: userData?.name || "N/A",
+ email: userData?.email || "N/A",
+ userId: assignee,
+ corporateId: a.corporateId,
+ exams: a.exams.map((x) => x.id).join(", "),
+ corporate,
+ assignment: a.name,
+ };
+ if (userStats.length === 0) {
return {
...commonData,
- correct: userStats.reduce((n, e) => n + e.score.correct, 0),
- submitted: true,
- date: moment.max(userStats.map((e) => moment(e.date))),
+ correct: 0,
+ submitted: false,
+ date: null,
};
- }) as TableData[];
+ }
- return [...accmA, ...userResults];
- }, [])
- .filter((x) => x.user !== "N/A"),
+ return {
+ ...commonData,
+ correct: userStats.reduce((n, e) => n + e.score.correct, 0),
+ submitted: true,
+ date: moment.max(userStats.map((e) => moment(e.date))),
+ };
+ }) as TableData[];
+
+ return [...accmA, ...userResults];
+ }, []),
[assignments, users],
);
+ useEffect(() => console.log(assignments), [assignments]);
+
const getCorporateScores = (corporateId: string): UserCount => {
const corporateAssignmentsUsers = assignments.filter((a) => a.corporateId === corporateId).reduce((acc, a) => acc + a.assignees.length, 0);
@@ -171,13 +172,6 @@ const MasterStatistical = (props: Props) => {
}),
]
: []),
- columnHelper.accessor("corporate", {
- header: "Corporate",
- id: "corporate",
- cell: (info) => {
- return {info.getValue()};
- },
- }),
columnHelper.accessor("assignment", {
header: "Assignment",
id: "assignment",
@@ -197,7 +191,7 @@ const MasterStatistical = (props: Props) => {
},
}),
columnHelper.accessor("correct", {
- header: "Correct",
+ header: "Score",
id: "correct",
cell: (info) => {
return {info.getValue()};
diff --git a/src/dashboards/MasterCorporate/index.tsx b/src/dashboards/MasterCorporate/index.tsx
index 49d7236f..efa958e0 100644
--- a/src/dashboards/MasterCorporate/index.tsx
+++ b/src/dashboards/MasterCorporate/index.tsx
@@ -83,18 +83,6 @@ export default function MasterCorporateDashboard({user}: Props) {
const {assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments} = useAssignments({corporate: user.id});
const assignmentsGroups = useMemo(() => groups.filter((x) => x.admin === user.id || x.participants.includes(user.id)), [groups, user.id]);
- const assignmentsUsers = useMemo(
- () =>
- [...students, ...teachers].filter((x) =>
- !!selectedUser
- ? groups
- .filter((g) => g.admin === selectedUser.id)
- .flatMap((g) => g.participants)
- .includes(x.id) || false
- : groups.flatMap((g) => g.participants).includes(x.id),
- ),
- [groups, selectedUser, teachers, students],
- );
const appendUserFilters = useFilterStore((state) => state.appendUserFilter);
const router = useRouter();
diff --git a/src/utils/assignments.be.ts b/src/utils/assignments.be.ts
index e3e9ff45..e2341020 100644
--- a/src/utils/assignments.be.ts
+++ b/src/utils/assignments.be.ts
@@ -1,18 +1,18 @@
import client from "@/lib/mongodb";
-import { Assignment } from "@/interfaces/results";
-import { getAllAssignersByCorporate } from "@/utils/groups.be";
+import {Assignment} from "@/interfaces/results";
+import {getAllAssignersByCorporate} from "@/utils/groups.be";
const db = client.db(process.env.MONGODB_DB);
export const getAssignmentsByAssigner = async (id: string, startDate?: Date, endDate?: Date) => {
- let query: any = { assigner: id };
+ let query: any = {assigner: id};
if (startDate) {
- query.startDate = { $gte: startDate.toISOString() };
+ query.startDate = {$gte: startDate.toISOString()};
}
if (endDate) {
- query.endDate = { $lte: endDate.toISOString() };
+ query.endDate = {$lte: endDate.toISOString()};
}
return await db.collection("assignments").find(query).toArray();
@@ -26,7 +26,14 @@ export const getAssignmentsByAssignerBetweenDates = async (id: string, startDate
};
export const getAssignmentsByAssigners = async (ids: string[], startDate?: Date, endDate?: Date) => {
- return (await Promise.all(ids.map((id) => getAssignmentsByAssigner(id, startDate, endDate)))).flat();
+ return await db
+ .collection("assignments")
+ .find({
+ assigner: {$in: ids},
+ ...(!!startDate ? {startDate: {$gte: startDate.toISOString()}} : {}),
+ ...(!!endDate ? {endDate: {$lte: endDate.toISOString()}} : {}),
+ })
+ .toArray();
};
export const getAssignmentsForCorporates = async (idsList: string[], startDate?: Date, endDate?: Date) => {
@@ -57,4 +64,4 @@ export const getAssignmentsForCorporates = async (idsList: string[], startDate?:
);
return assignments.flat();
-}
\ No newline at end of file
+};
diff --git a/src/utils/groups.be.ts b/src/utils/groups.be.ts
index 42fe68f9..7757ecd8 100644
--- a/src/utils/groups.be.ts
+++ b/src/utils/groups.be.ts
@@ -1,8 +1,9 @@
import {app} from "@/firebase";
+import {Assignment} from "@/interfaces/results";
import {CorporateUser, Group, MasterCorporateUser, StudentUser, TeacherUser, User} from "@/interfaces/user";
import client from "@/lib/mongodb";
import moment from "moment";
-import {getUser} from "./users.be";
+import {getLinkedUsers, getUser} from "./users.be";
import {getSpecificUsers} from "./users.be";
const db = client.db(process.env.MONGODB_DB);
@@ -71,17 +72,10 @@ export const getUsersGroups = async (ids: string[]) => {
};
export const getAllAssignersByCorporate = async (corporateID: string): Promise => {
- const groups = await getUserGroups(corporateID);
- const groupUsers = (await Promise.all(groups.map(async (g) => await Promise.all(g.participants.map(getUser)))))
- .flat()
- .filter((x) => !!x) as User[];
- const teacherPromises = await Promise.all(
- groupUsers.map(async (u) =>
- u.type === "teacher" ? u.id : u.type === "corporate" ? [...(await getAllAssignersByCorporate(u.id)), u.id] : undefined,
- ),
- );
+ const linkedTeachers = await getLinkedUsers(corporateID, "mastercorporate", "teacher");
+ const linkedCorporates = await getLinkedUsers(corporateID, "mastercorporate", "corporate");
- return teacherPromises.filter((x) => !!x).flat() as string[];
+ return [...linkedTeachers.users.map((x) => x.id), ...linkedCorporates.users.map((x) => x.id)];
};
export const getGroupsForUser = async (admin?: string, participant?: string) => {