diff --git a/Back-End/Planning/urls.py b/Back-End/Planning/urls.py index f796b1d..a2ef0c2 100644 --- a/Back-End/Planning/urls.py +++ b/Back-End/Planning/urls.py @@ -1,10 +1,11 @@ from django.urls import path, re_path -from Planning.views import PlanningView,PlanningWithIdView,EventsView,EventsWithIdView +from Planning.views import PlanningView,PlanningWithIdView,EventsView,EventsWithIdView,UpcomingEventsView urlpatterns = [ re_path(r'^plannings$', PlanningView.as_view(), name="planning"), re_path(r'^plannings/(?P[0-9]+)$', PlanningWithIdView.as_view(), name="planning"), re_path(r'^events$', EventsView.as_view(), name="events"), re_path(r'^events/(?P[0-9]+)$', EventsWithIdView.as_view(), name="events"), + re_path(r'^events/upcoming', UpcomingEventsView.as_view(), name="events"), ] \ No newline at end of file diff --git a/Back-End/Planning/views.py b/Back-End/Planning/views.py index 6bb4e7b..e3fb852 100644 --- a/Back-End/Planning/views.py +++ b/Back-End/Planning/views.py @@ -1,5 +1,6 @@ from django.http.response import JsonResponse from rest_framework.views import APIView +from django.utils import timezone from .models import Planning, Events @@ -86,4 +87,11 @@ class EventsWithIdView(APIView): return JsonResponse({'error': 'Event not found'}, status=404) event.delete() - return JsonResponse({'message': 'Event deleted'}, status=204) \ No newline at end of file + return JsonResponse({'message': 'Event deleted'}, status=204) + +class UpcomingEventsView(APIView): + def get(self, request): + current_date = timezone.now() + upcoming_events = Events.objects.filter(start__gte=current_date) + events_serializer = EventsSerializer(upcoming_events, many=True) + return JsonResponse(events_serializer.data, safe=False) \ No newline at end of file diff --git a/Front-End/messages/en/sidebar.json b/Front-End/messages/en/sidebar.json index ce09e55..92a6836 100644 --- a/Front-End/messages/en/sidebar.json +++ b/Front-End/messages/en/sidebar.json @@ -2,7 +2,7 @@ "dashboard": "Dashboard", "subscriptions": "Subscriptions", "structure": "Structure", - "planning": "Schedule", + "events": "Events", "grades": "Grades", "settings": "Settings", "schoolAdmin": "School Administration" diff --git a/Front-End/messages/fr/sidebar.json b/Front-End/messages/fr/sidebar.json index 3982d5f..20d351f 100644 --- a/Front-End/messages/fr/sidebar.json +++ b/Front-End/messages/fr/sidebar.json @@ -2,7 +2,7 @@ "dashboard": "Tableau de bord", "subscriptions": "Inscriptions", "structure": "Structure", - "planning": "Emploi du temps", + "events": "Evenements", "grades": "Notes", "settings": "Paramètres", "schoolAdmin": "Administration Scolaire" diff --git a/Front-End/project.inlang/.gitignore b/Front-End/project.inlang/.gitignore deleted file mode 100644 index 5e46596..0000000 --- a/Front-End/project.inlang/.gitignore +++ /dev/null @@ -1 +0,0 @@ -cache \ No newline at end of file diff --git a/Front-End/project.inlang/project_id b/Front-End/project.inlang/project_id deleted file mode 100644 index f461c3d..0000000 --- a/Front-End/project.inlang/project_id +++ /dev/null @@ -1 +0,0 @@ -2ff5cbbb4bc1c6d178400871dfa342ac4f0b18e9b86cb64a1110be1ec54238c1 \ No newline at end of file diff --git a/Front-End/project.inlang/settings.json b/Front-End/project.inlang/settings.json deleted file mode 100644 index fb6c9ff..0000000 --- a/Front-End/project.inlang/settings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - // official schema ensures that your project file is valid - "$schema": "https://inlang.com/schema/project-settings", - // the "source" language tag that is used in your project - "sourceLanguageTag": "fr", - // all the language tags you want to support in your project - "languageTags": ["fr", "en"], - "modules": [ - "https://cdn.jsdelivr.net/npm/@inlang/plugin-json@4/dist/index.js" - ], // or use another storage module: https://inlang.com/c/plugins (i18next, json, inlang message format) - "settings": {} -} \ No newline at end of file diff --git a/Front-End/src/app/[locale]/admin/layout.js b/Front-End/src/app/[locale]/admin/layout.js index a59ce20..5539218 100644 --- a/Front-End/src/app/[locale]/admin/layout.js +++ b/Front-End/src/app/[locale]/admin/layout.js @@ -47,7 +47,7 @@ export default function Layout({ "subscriptions": { "id": "subscriptions", "name": t('subscriptions'), "url": FE_ADMIN_SUBSCRIPTIONS_URL, "icon": Users }, "structure": { "id": "structure", "name": t('structure'), "url": FE_ADMIN_STRUCTURE_URL, "icon": Building }, "grades": { "id": "grades", "name": t('grades'), "url": FE_ADMIN_GRADES_URL, "icon": FileText }, - "planning": { "id": "planning", "name": t('planning'), "url": FE_ADMIN_PLANNING_URL, "icon": Calendar }, + "planning": { "id": "planning", "name": t('events'), "url": FE_ADMIN_PLANNING_URL, "icon": Calendar }, "settings": { "id": "settings", "name": t('settings'), "url": FE_ADMIN_SETTINGS_URL, "icon": Settings } }; diff --git a/Front-End/src/app/[locale]/admin/page.js b/Front-End/src/app/[locale]/admin/page.js index 7f63247..331e7ba 100644 --- a/Front-End/src/app/[locale]/admin/page.js +++ b/Front-End/src/app/[locale]/admin/page.js @@ -1,4 +1,3 @@ - 'use client' import React, { useState, useEffect } from 'react'; import { useTranslations } from 'next-intl'; @@ -9,6 +8,7 @@ import { fetchClasses } from '@/app/actions/schoolAction'; import StatCard from '@/components/StatCard'; import logger from '@/utils/logger'; import { fetchRegisterForms } from '@/app/actions/subscriptionAction'; +import { fetchUpcomingEvents } from '@/app/actions/planningAction'; // Composant EventCard pour afficher les événements @@ -64,22 +64,14 @@ export default function DashboardPage() { logger.error('Error fetching pending registrations:', error); }); + fetchUpcomingEvents().then(data => { + setUpcomingEvents(data); + }).catch(error => { + logger.error('Error fetching upcoming events:', error); + }); + // Simulation de chargement des données setTimeout(() => { - setUpcomingEvents([ - { - title: "Réunion de rentrée", - date: "2024-09-01", - description: "Présentation de l'année scolaire", - type: "meeting" - }, - { - title: "Date limite inscriptions", - date: "2024-08-15", - description: "Clôture des inscriptions", - type: "deadline" - } - ]); setMonthlyStats({ inscriptions: [150, 180, 210, 245], completionRate: 78 diff --git a/Front-End/src/app/actions/planningAction.js b/Front-End/src/app/actions/planningAction.js index 035d057..cba39fe 100644 --- a/Front-End/src/app/actions/planningAction.js +++ b/Front-End/src/app/actions/planningAction.js @@ -104,5 +104,9 @@ export const deleteEvent = (id, csrfToken) => { return removeDatas(`${BE_PLANNING_EVENTS_URL}/${id}`, csrfToken) } +export const fetchUpcomingEvents = () => { + return getData(`${BE_PLANNING_EVENTS_URL}/upcoming`); +}; +