mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
chore: Capacité de l'établissement retourné en variable de session /
login sur la home page
This commit is contained in:
@ -223,7 +223,7 @@ def makeToken(user):
|
||||
"""
|
||||
try:
|
||||
# Récupérer tous les rôles de l'utilisateur actifs
|
||||
roles = ProfileRole.objects.filter(profile=user, is_active=True).values('role_type', 'establishment__id', 'establishment__name', 'establishment__evaluation_frequency')
|
||||
roles = ProfileRole.objects.filter(profile=user, is_active=True).values('role_type', 'establishment__id', 'establishment__name', 'establishment__evaluation_frequency', 'establishment__total_capacity')
|
||||
|
||||
# Générer le JWT avec la bonne syntaxe datetime
|
||||
access_payload = {
|
||||
|
||||
@ -23,7 +23,7 @@ import {
|
||||
} from '@/app/actions/subscriptionAction';
|
||||
import { useEstablishment } from '@/context/EstablishmentContext';
|
||||
import { useClasses } from '@/context/ClassesContext';
|
||||
import { Award, BookOpen, FileText } from 'lucide-react';
|
||||
import { Award, FileText } from 'lucide-react';
|
||||
import SectionHeader from '@/components/SectionHeader';
|
||||
import GradesDomainBarChart from '@/components/Grades/GradesDomainBarChart';
|
||||
import InputText from '@/components/InputText';
|
||||
@ -210,7 +210,7 @@ export default function Page() {
|
||||
return (
|
||||
<div className="p-8 space-y-8">
|
||||
<SectionHeader
|
||||
icon={BookOpen}
|
||||
icon={Award}
|
||||
title="Suivi pédagogique"
|
||||
description="Suivez le parcours d'un élève"
|
||||
/>
|
||||
@ -219,7 +219,7 @@ export default function Page() {
|
||||
<div className="flex flex-row gap-8 items-start">
|
||||
{/* Colonne gauche : InputText + bouton */}
|
||||
<div className="w-4/5 flex items-end gap-4">
|
||||
<div className="flex-1">
|
||||
<div className="flex-[3_3_0%]">
|
||||
<InputText
|
||||
name="studentSearch"
|
||||
type="text"
|
||||
@ -231,8 +231,7 @@ export default function Page() {
|
||||
enable={true}
|
||||
/>
|
||||
</div>
|
||||
{/* Sélecteur de période */}
|
||||
{formData.selectedStudent && (
|
||||
<div className="flex-[1_1_0%]">
|
||||
<SelectChoice
|
||||
name="period"
|
||||
label="Période"
|
||||
@ -250,9 +249,10 @@ export default function Page() {
|
||||
})}
|
||||
selected={selectedPeriod || ''}
|
||||
callback={(e) => setSelectedPeriod(Number(e.target.value))}
|
||||
disabled={false}
|
||||
disabled={!formData.selectedStudent}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex-[1_1_0%] flex items-end">
|
||||
<Button
|
||||
primary
|
||||
onClick={() => {
|
||||
@ -263,15 +263,16 @@ export default function Page() {
|
||||
const url = `${FE_ADMIN_GRADES_STUDENT_COMPETENCIES_URL}?studentId=${formData.selectedStudent}&period=${periodString}`;
|
||||
router.push(url);
|
||||
}}
|
||||
className="mb-1 px-4 py-2 rounded-md shadow bg-emerald-500 text-white hover:bg-emerald-600"
|
||||
className="mb-1 px-4 py-2 rounded-md shadow bg-emerald-500 text-white hover:bg-emerald-600 w-full"
|
||||
icon={<Award className="w-6 h-6" />}
|
||||
text="Evaluer"
|
||||
title="Evaluez l'élève"
|
||||
disabled={!formData.selectedStudent || !selectedPeriod}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/* Colonne droite : Photo élève */}
|
||||
<div className="w-2/5 flex flex-col items-center justify-center">
|
||||
<div className="w-1/5 flex flex-col items-center justify-center">
|
||||
{formData.selectedStudent &&
|
||||
(() => {
|
||||
const student = students.find(
|
||||
|
||||
@ -38,7 +38,8 @@ export default function DashboardPage() {
|
||||
});
|
||||
|
||||
const [classes, setClasses] = useState([]);
|
||||
const { selectedEstablishmentId } = useEstablishment();
|
||||
const { selectedEstablishmentId, selectedEstablishmentTotalCapacity } =
|
||||
useEstablishment();
|
||||
const { showNotification } = useNotification();
|
||||
|
||||
useEffect(() => {
|
||||
@ -116,13 +117,13 @@ export default function DashboardPage() {
|
||||
/>
|
||||
<StatCard
|
||||
title={t('structureCapacity')}
|
||||
value={`${structureCapacity}`}
|
||||
value={`${selectedEstablishmentTotalCapacity}`}
|
||||
icon={<School className="text-green-500" size={24} />}
|
||||
color="emerald"
|
||||
/>
|
||||
<StatCard
|
||||
title={t('capacityRate')}
|
||||
value={`${((totalStudents / structureCapacity) * 100).toFixed(1)}%`}
|
||||
value={`${((totalStudents / selectedEstablishmentTotalCapacity) * 100).toFixed(1)}%`}
|
||||
icon={<School className="text-orange-500" size={24} />}
|
||||
color="orange"
|
||||
/>
|
||||
|
||||
@ -62,8 +62,7 @@ export default function FlashNotification({
|
||||
<p className="text-gray-700">{message}</p>
|
||||
{type === 'error' && errorCode && (
|
||||
<div className="mt-2 text-xs text-gray-500">
|
||||
Code :{' '}
|
||||
<span className="font-mono font-bold">{errorCode}</span>
|
||||
Code : <span className="font-mono font-bold">{errorCode}</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@ -21,6 +21,15 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
);
|
||||
return storedEstablishmentEvaluationFrequency;
|
||||
});
|
||||
const [
|
||||
selectedEstablishmentTotalCapacity,
|
||||
setSelectedEstablishmentTotalCapacityState,
|
||||
] = useState(() => {
|
||||
const storedEstablishmentTotalCapacity = +sessionStorage.getItem(
|
||||
'setSelectedEstablishmentTotalCapacity'
|
||||
);
|
||||
return storedEstablishmentTotalCapacity;
|
||||
});
|
||||
const [selectedRoleId, setSelectedRoleIdState] = useState(() => {
|
||||
const storedRoleId = +sessionStorage.getItem('selectedRoleId');
|
||||
return storedRoleId;
|
||||
@ -51,6 +60,12 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
sessionStorage.setItem('selectedEstablishmentEvaluationFrequency', id);
|
||||
};
|
||||
|
||||
const setSelectedEstablishmentTotalCapacity = (id) => {
|
||||
setSelectedEstablishmentTotalCapacityState(id);
|
||||
logger.debug('setSelectedEstablishmentTotalCapacity', id);
|
||||
sessionStorage.setItem('selectedEstablishmentTotalCapacity', id);
|
||||
};
|
||||
|
||||
const setSelectedRoleId = (id) => {
|
||||
setSelectedRoleIdState(id);
|
||||
sessionStorage.setItem('selectedRoleId', id);
|
||||
@ -88,6 +103,7 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
id: role.establishment__id,
|
||||
name: role.establishment__name,
|
||||
evaluation_frequency: role.establishment__evaluation_frequency,
|
||||
total_capacity: role.establishment__total_capacity,
|
||||
role_id: i,
|
||||
role_type: role.role_type,
|
||||
}));
|
||||
@ -104,6 +120,9 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
setSelectedEstablishmentEvaluationFrequency(
|
||||
userEstablishments[roleIndexDefault].evaluation_frequency
|
||||
);
|
||||
setSelectedEstablishmentTotalCapacity(
|
||||
userEstablishments[roleIndexDefault].total_capacity
|
||||
);
|
||||
setProfileRole(userEstablishments[roleIndexDefault].role_type);
|
||||
}
|
||||
if (endInitFunctionHandler) {
|
||||
@ -133,6 +152,8 @@ export const EstablishmentProvider = ({ children }) => {
|
||||
setSelectedEstablishmentId,
|
||||
selectedEstablishmentEvaluationFrequency,
|
||||
setSelectedEstablishmentEvaluationFrequency,
|
||||
selectedEstablishmentTotalCapacity,
|
||||
setSelectedEstablishmentTotalCapacity,
|
||||
selectedRoleId,
|
||||
setSelectedRoleId,
|
||||
profileRole,
|
||||
|
||||
@ -132,9 +132,9 @@ export const FE_API_DOCUSEAL_DOWNLOAD_URL = '/api/docuseal/downloadTemplate';
|
||||
export function getRedirectUrlFromRole(role) {
|
||||
switch (role) {
|
||||
case RIGHTS.ADMIN:
|
||||
return FE_ADMIN_SUBSCRIPTIONS_URL;
|
||||
return FE_ADMIN_HOME_URL;
|
||||
case RIGHTS.TEACHER:
|
||||
return FE_ADMIN_SUBSCRIPTIONS_URL;
|
||||
return FE_ADMIN_HOME_URL;
|
||||
case RIGHTS.PARENT:
|
||||
return FE_PARENTS_HOME_URL;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user