work on admin panel

This commit is contained in:
Valentin Moguérou 2024-05-02 01:39:34 +02:00
parent 62989bdae9
commit 7b593eec08
3 changed files with 45 additions and 20 deletions

View File

@ -1,7 +1,12 @@
from django.contrib import admin from django.contrib import admin
from colloscope.models import * 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(Classe)
admin.site.register(Periode) admin.site.register(Periode)
admin.site.register(Matiere) admin.site.register(Matiere)
@ -10,7 +15,18 @@ admin.site.register(Groupe)
admin.site.register(Etudiant) admin.site.register(Etudiant)
admin.site.register(Appartenance) admin.site.register(Appartenance)
admin.site.register(Colleur) 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(Rotation)
admin.site.register(Amendement) admin.site.register(Amendement)
admin.site.register(Profil) admin.site.register(Profil)

View File

@ -1,4 +1,6 @@
from datetime import date, datetime, timedelta from datetime import date, datetime, timedelta
from asgiref.sync import async_to_sync
from pytz import timezone from pytz import timezone
import asyncio import asyncio
@ -91,7 +93,7 @@ class Classe(models.Model):
return jour return jour
async def periode(self, jour): def periode(self, jour):
""" """
Entrées : Entrées :
- self - self
@ -104,9 +106,9 @@ class Classe(models.Model):
- Le jour n'est pas dans une période - Le jour n'est pas dans une période
- Le jour est au chevauchement de deux périodes - 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 #return self.periode(date.today()) // ne fonctionne pas entre les périodes
""" """
On prend la période non révolue la plus récente On prend la période non révolue la plus récente
@ -115,7 +117,7 @@ class Classe(models.Model):
return Periode.objects \ return Periode.objects \
.filter(classe=self, fin__gte=date.today()) \ .filter(classe=self, fin__gte=date.today()) \
.order_by("-debut") \ .order_by("-debut") \
.afirst() .first()
def __str__(self): def __str__(self):
return f"{self.libelle} ({self.lycee.libelle})" return f"{self.libelle} ({self.lycee.libelle})"
@ -279,6 +281,9 @@ class Creneau(models.Model):
est_colle = models.BooleanField() est_colle = models.BooleanField()
capacite = models.IntegerField() capacite = models.IntegerField()
class Meta:
verbose_name_plural = "Creneaux"
def __str__(self): def __str__(self):
jours = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"] 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 = Amendement(rotation=self, etudiant=etudiant, est_positif=est_positif)
amendement.save() amendement.save()
if notifier:
func = async_to_sync(amendement.notifier)
func()
def __str__(self): def __str__(self):
return f"{self.creneau} le {self.date} avec groupes {'+'.join(str(groupe) for groupe in self.groupes.all())}" 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}" return f"Profil {self.utilisateur} : {self.etudiant} ; {self.colleur}"
@staticmethod @staticmethod
async def from_request(request, preprocess=lambda query: query): def from_request(request, preprocess=lambda query: query):
user = request.user user = request.user
session = request.session session = request.session
match await session.aget("profil"): match session.get("profil"):
case "etudiant": case "etudiant":
profil = await preprocess(Profil.objects.filter(utilisateur=user)).aget() profil = preprocess(Profil.objects.filter(utilisateur=user)).get()
return profil.etudiant return profil.etudiant
case "colleur": case "colleur":
profil = await preprocess(Profil.objects.filter(utilisateur=user)).aget() profil = preprocess(Profil.objects.filter(utilisateur=user)).get()
return profil.colleur return profil.colleur
case _: case _:
raise ValueError("profil non choisi") raise ValueError("profil non choisi")

View File

@ -53,21 +53,21 @@ def choix_profil(request):
return HttpResponse(template.render(context)) return HttpResponse(template.render(context))
async def get_lien_calendrier(etudiant, periode): def get_lien_calendrier(etudiant, periode):
try: try:
lien = await LienCalendrier.objects.aget(etudiant=etudiant, periode=periode) lien = LienCalendrier.objects.get(etudiant=etudiant, periode=periode)
except LienCalendrier.DoesNotExist: except LienCalendrier.DoesNotExist:
code = uuid4().hex code = uuid4().hex
lien = LienCalendrier(code=code, etudiant=etudiant, periode=periode) lien = LienCalendrier(code=code, etudiant=etudiant, periode=periode)
await lien.asave() lien.save()
return f"calendrier.ics?key={lien.code}" return f"calendrier.ics?key={lien.code}"
#@login_required #@login_required
async def dashboard(request): def dashboard(request):
try: try:
etudiant = await Profil.from_request( etudiant = Profil.from_request(
request, request,
preprocess=lambda query: (query preprocess=lambda query: (query
.select_related("etudiant__classe") .select_related("etudiant__classe")
@ -79,8 +79,8 @@ async def dashboard(request):
if not isinstance(etudiant, Etudiant): if not isinstance(etudiant, Etudiant):
return HttpResponse("pas encore supporté") return HttpResponse("pas encore supporté")
periode = await etudiant.classe.periode_actuelle() periode = etudiant.classe.periode_actuelle()
groupe = await etudiant.groupe_de_colle(periode) groupe = etudiant.groupe_de_colle(periode)
rotations = periode.query_rotations_etudiant(etudiant) rotations = periode.query_rotations_etudiant(etudiant)
@ -91,7 +91,7 @@ async def dashboard(request):
colles_par_sem[i] = n, lundi, colles colles_par_sem[i] = n, lundi, colles
template = loader.get_template("dashboard.html") template = loader.get_template("dashboard.html")
lien_calendrier = await get_lien_calendrier(etudiant, periode) lien_calendrier = get_lien_calendrier(etudiant, periode)
context = { context = {
"etudiant": etudiant, "etudiant": etudiant,
@ -105,9 +105,9 @@ async def dashboard(request):
@login_required @login_required
async def marketplace(request): def marketplace(request):
try: try:
etudiant = await Profil.from_request( etudiant = Profil.from_request(
request, request,
preprocess=lambda query: query \ preprocess=lambda query: query \
.select_related("etudiant__classe") \ .select_related("etudiant__classe") \