reports fully implemented

This commit is contained in:
echo 2026-03-19 05:04:12 +01:00
parent 06973ccfb2
commit e586662c19
2 changed files with 74 additions and 35 deletions

Binary file not shown.

View File

@ -44,19 +44,27 @@ export function ReportFilters({
try { try {
setLoading(true); setLoading(true);
// Fetch current user info
const userResponse = await fetch("/api/users/me"); const userResponse = await fetch("/api/users/me");
if (userResponse.ok) { if (!userResponse.ok) {
setLoading(false);
return;
}
const userData = await userResponse.json(); const userData = await userResponse.json();
setCurrentUser(userData.user); setCurrentUser(userData.user);
// Determine which clients to show based on role const currentRole = userData.user.role;
if (userData.user.role === "client") { let allUsers: (User & { client?: Client | null })[] = [];
// Regular users can only view their own report
if (currentRole === "client") {
setUsers([userData.user]); setUsers([userData.user]);
onUserChange(userData.user.id); onUserChange(userData.user.id);
} else if (userData.user.role === "trainer") { setLoading(false);
// Trainers can only view their assigned clients return;
}
if (currentRole === "trainer") {
allUsers.push(userData.user);
const assignmentsRes = await fetch("/api/trainer-client"); const assignmentsRes = await fetch("/api/trainer-client");
if (assignmentsRes.ok) { if (assignmentsRes.ok) {
const assignmentsData = await assignmentsRes.json(); const assignmentsData = await assignmentsRes.json();
@ -65,27 +73,58 @@ export function ReportFilters({
.map((a: any) => a.clientId); .map((a: any) => a.clientId);
if (assignedClientIds.length > 0) { if (assignedClientIds.length > 0) {
// Fetch assigned clients
const clientsRes = await fetch( const clientsRes = await fetch(
`/api/users?role=client&ids=${assignedClientIds.join(",")}`, `/api/users?role=client&ids=${assignedClientIds.join(",")}`,
); );
if (clientsRes.ok) { if (clientsRes.ok) {
const clientsData = await clientsRes.json(); const clientsData = await clientsRes.json();
setUsers(clientsData.data?.users || []); allUsers = [...allUsers, ...(clientsData.data?.users || [])];
}
} else {
setUsers([]);
}
}
} else {
// Admins and superadmins can view all clients
const clientsRes = await fetch("/api/users?role=client");
if (clientsRes.ok) {
const clientsData = await clientsRes.json();
setUsers(clientsData.data?.users || []);
} }
} }
} }
setUsers(allUsers);
setLoading(false);
return;
}
if (currentRole === "admin") {
allUsers.push(userData.user);
}
if (currentRole === "superAdmin" || currentRole === "admin") {
const [adminsRes, trainersRes, clientsRes] = await Promise.all([
fetch("/api/users?role=admin"),
fetch("/api/users?role=trainer"),
fetch("/api/users?role=client"),
]);
const [adminsData, trainersData, clientsData] = await Promise.all([
adminsRes.ok ? adminsRes.json() : { data: { users: [] } },
trainersRes.ok ? trainersRes.json() : { data: { users: [] } },
clientsRes.ok ? clientsRes.json() : { data: { users: [] } },
]);
allUsers = [
...allUsers,
...(adminsData.data?.users || []),
...(trainersData.data?.users || []),
...(clientsData.data?.users || []),
];
if (currentRole === "superAdmin") {
const superAdminsRes = await fetch("/api/users?role=superAdmin");
if (superAdminsRes.ok) {
const superAdminsData = await superAdminsRes.json();
allUsers = [...(superAdminsData.data?.users || []), ...allUsers];
}
}
setUsers(allUsers);
setLoading(false);
return;
}
setUsers(allUsers);
} catch (error) { } catch (error) {
log.error("Failed to fetch users:", error); log.error("Failed to fetch users:", error);
} finally { } finally {
@ -120,7 +159,7 @@ export function ReportFilters({
<SelectContent> <SelectContent>
{users.map((user) => ( {users.map((user) => (
<SelectItem key={user.id} value={user.id}> <SelectItem key={user.id} value={user.id}>
{user.firstName} {user.lastName} {user.firstName} {user.lastName} ({user.role})
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>