From 7b593eec0870eec9801537561bcbf17717ccbf65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Mogu=C3=A9rou?= Date: Thu, 2 May 2024 01:39:34 +0200 Subject: [PATCH] work on admin panel --- colloscope/admin.py | 20 ++++++++++++++++++-- colloscope/models.py | 25 +++++++++++++++++-------- colloscope/views.py | 20 ++++++++++---------- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/colloscope/admin.py b/colloscope/admin.py index 2ee6296..46e9ba3 100644 --- a/colloscope/admin.py +++ b/colloscope/admin.py @@ -1,7 +1,12 @@ from django.contrib import admin from colloscope.models import * -admin.site.register(Lycee) + +@admin.register(Lycee) +class LyceeAdmin(admin.ModelAdmin): + list_display = ('uai', 'libelle', 'vacances') + + admin.site.register(Classe) admin.site.register(Periode) admin.site.register(Matiere) @@ -10,7 +15,18 @@ admin.site.register(Groupe) admin.site.register(Etudiant) admin.site.register(Appartenance) admin.site.register(Colleur) -admin.site.register(Creneau) + +@admin.register(Creneau) +class CreneauAdmin(admin.ModelAdmin): + list_display = ('matiere', 'colleur', "periode", 'view_jour', "heure", "duree") + list_filter = ("matiere", "colleur", "periode") + + def view_jour(self, obj): + jours = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"] + return jours[obj.jour] + + view_jour.short_description = 'Jour' + admin.site.register(Rotation) admin.site.register(Amendement) admin.site.register(Profil) diff --git a/colloscope/models.py b/colloscope/models.py index 3e2f25f..8942c5b 100644 --- a/colloscope/models.py +++ b/colloscope/models.py @@ -1,4 +1,6 @@ from datetime import date, datetime, timedelta + +from asgiref.sync import async_to_sync from pytz import timezone import asyncio @@ -91,7 +93,7 @@ class Classe(models.Model): return jour - async def periode(self, jour): + def periode(self, jour): """ Entrées : - self @@ -104,9 +106,9 @@ class Classe(models.Model): - Le jour n'est pas dans une période - Le jour est au chevauchement de deux périodes """ - return Periode.objects.aget(classe=self, debut__lte=jour, fin__gte=jour) + return Periode.objects.get(classe=self, debut__lte=jour, fin__gte=jour) - async def periode_actuelle(self): + def periode_actuelle(self): #return self.periode(date.today()) // ne fonctionne pas entre les périodes """ On prend la période non révolue la plus récente @@ -115,7 +117,7 @@ class Classe(models.Model): return Periode.objects \ .filter(classe=self, fin__gte=date.today()) \ .order_by("-debut") \ - .afirst() + .first() def __str__(self): return f"{self.libelle} ({self.lycee.libelle})" @@ -279,6 +281,9 @@ class Creneau(models.Model): est_colle = models.BooleanField() capacite = models.IntegerField() + class Meta: + verbose_name_plural = "Creneaux" + def __str__(self): jours = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"] @@ -356,6 +361,10 @@ class Rotation(models.Model): amendement = Amendement(rotation=self, etudiant=etudiant, est_positif=est_positif) amendement.save() + if notifier: + func = async_to_sync(amendement.notifier) + func() + def __str__(self): return f"{self.creneau} le {self.date} avec groupes {'+'.join(str(groupe) for groupe in self.groupes.all())}" @@ -387,16 +396,16 @@ class Profil(models.Model): return f"Profil {self.utilisateur} : {self.etudiant} ; {self.colleur}" @staticmethod - async def from_request(request, preprocess=lambda query: query): + def from_request(request, preprocess=lambda query: query): user = request.user session = request.session - match await session.aget("profil"): + match session.get("profil"): case "etudiant": - profil = await preprocess(Profil.objects.filter(utilisateur=user)).aget() + profil = preprocess(Profil.objects.filter(utilisateur=user)).get() return profil.etudiant case "colleur": - profil = await preprocess(Profil.objects.filter(utilisateur=user)).aget() + profil = preprocess(Profil.objects.filter(utilisateur=user)).get() return profil.colleur case _: raise ValueError("profil non choisi") diff --git a/colloscope/views.py b/colloscope/views.py index 08e16c6..3aafa65 100644 --- a/colloscope/views.py +++ b/colloscope/views.py @@ -53,21 +53,21 @@ def choix_profil(request): return HttpResponse(template.render(context)) -async def get_lien_calendrier(etudiant, periode): +def get_lien_calendrier(etudiant, periode): try: - lien = await LienCalendrier.objects.aget(etudiant=etudiant, periode=periode) + lien = LienCalendrier.objects.get(etudiant=etudiant, periode=periode) except LienCalendrier.DoesNotExist: code = uuid4().hex lien = LienCalendrier(code=code, etudiant=etudiant, periode=periode) - await lien.asave() + lien.save() return f"calendrier.ics?key={lien.code}" #@login_required -async def dashboard(request): +def dashboard(request): try: - etudiant = await Profil.from_request( + etudiant = Profil.from_request( request, preprocess=lambda query: (query .select_related("etudiant__classe") @@ -79,8 +79,8 @@ async def dashboard(request): if not isinstance(etudiant, Etudiant): return HttpResponse("pas encore supporté") - periode = await etudiant.classe.periode_actuelle() - groupe = await etudiant.groupe_de_colle(periode) + periode = etudiant.classe.periode_actuelle() + groupe = etudiant.groupe_de_colle(periode) rotations = periode.query_rotations_etudiant(etudiant) @@ -91,7 +91,7 @@ async def dashboard(request): colles_par_sem[i] = n, lundi, colles template = loader.get_template("dashboard.html") - lien_calendrier = await get_lien_calendrier(etudiant, periode) + lien_calendrier = get_lien_calendrier(etudiant, periode) context = { "etudiant": etudiant, @@ -105,9 +105,9 @@ async def dashboard(request): @login_required -async def marketplace(request): +def marketplace(request): try: - etudiant = await Profil.from_request( + etudiant = Profil.from_request( request, preprocess=lambda query: query \ .select_related("etudiant__classe") \