Nettoyage des profils

This commit is contained in:
Valentin Moguérou 2024-05-17 01:42:44 +02:00
parent eb84355d17
commit acb5eff36b
4 changed files with 21 additions and 72 deletions

View File

@ -9,6 +9,7 @@ from django.db import models
from django.db.models import F, Q, Count, QuerySet, Subquery, OuterRef, Sum from django.db.models import F, Q, Count, QuerySet, Subquery, OuterRef, Sum
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _
from discord import Webhook from discord import Webhook
@ -411,22 +412,7 @@ class Profile(models.Model):
colleur = models.ForeignKey(Colleur, null=True, blank=True, on_delete=models.SET_NULL) colleur = models.ForeignKey(Colleur, null=True, blank=True, on_delete=models.SET_NULL)
def __str__(self): def __str__(self):
return f"Profil {self.user} : {self.student} ; {self.colleur}" return "Student" if self.student is not None else "Colleur"
@staticmethod
def from_request(request, preprocess=lambda query: query):
user = request.user
session = request.session
match session.get("profile"):
case "student":
profil = preprocess(Profile.objects.filter(user=user)).get()
return profil.student
case "colleur":
profil = preprocess(Profile.objects.filter(user=user)).get()
return profil.colleur
case _:
raise ValueError("profil non choisi")
class CalendarLink(models.Model): class CalendarLink(models.Model):

View File

@ -11,7 +11,6 @@ urlpatterns = [
path("export/calendar/<str:key>/calendar.ics", views.icalendar, name="export-ics"), path("export/calendar/<str:key>/calendar.ics", views.icalendar, name="export-ics"),
path("calendrier.ics", path("calendrier.ics",
lambda req: redirect("colloscope:export-ics", key=req.GET.get("key")), name="export-ics-old"), lambda req: redirect("colloscope:export-ics", key=req.GET.get("key")), name="export-ics-old"),
path("select_profile", views.select_profile, name="select_profile"),
path("marketplace", views.marketplace, name="marketplace"), path("marketplace", views.marketplace, name="marketplace"),
path("action/enroll", views.enroll, name="enroll"), path("action/enroll", views.enroll, name="enroll"),
path("action/withdraw", views.withdraw, name="withdraw"), path("action/withdraw", views.withdraw, name="withdraw"),

View File

@ -20,41 +20,12 @@ def handler404(request):
return render(request, '404.html', context, status=404) return render(request, '404.html', context, status=404)
@login_required
def select_profile(request):
user = request.user
session = request.session
if not Profile.objects.filter(user=user).exists():
profile = Profile(user=user)
profile.save()
else:
profile = Profile.objects.get(user=user)
if profile.student is not None and profile.colleur is None:
session["profile"] = "student"
return redirect("colloscope:home")
elif profile.colleur is not None and profile.student is None:
session["profile"] = "colleur"
return redirect("colloscope:home")
else:
if profile.student is not None:
template = loader.get_template("select_profile.html")
else:
template = loader.get_template("unbound_profile.html")
context = {
"profile": profile,
}
return HttpResponse(template.render(context))
class ColleListView(LoginRequiredMixin, ListView): class ColleListView(LoginRequiredMixin, ListView):
model = Colle model = Colle
context_object_name = "colles" context_object_name = "colles"
def get_queryset(self): def get_queryset(self):
student = Profile.from_request(self.request) student = self.request.user.profile.student
base_query = (student.cls base_query = (student.cls
.current_term() .current_term()
.query_colles() .query_colles()
@ -71,12 +42,11 @@ class ColleListView(LoginRequiredMixin, ListView):
@login_required @login_required
def dashboard(request): def dashboard(request):
try: try:
student = Profile.from_request( student = (Student.objects
request, .select_related("cls")
preprocess=lambda query: (query .prefetch_related("cls__term_set")
.select_related("student__cls") .get(profile__user=request.user))
.prefetch_related("student__cls__term_set"))
)
except ValueError: except ValueError:
return redirect("colloscope:select_profile") return redirect("colloscope:select_profile")
@ -123,12 +93,10 @@ class WithdrawForm(AmendForm):
@login_required @login_required
def marketplace(request): def marketplace(request):
try: try:
student = Profile.from_request( student = (Student.objects
request, .select_related("cls")
preprocess=lambda query: (query .prefetch_related("cls__term_set")
.select_related("student__cls") .get(profile__user=request.user))
.prefetch_related("student__cls__term_set"))
)
except ValueError: except ValueError:
return redirect("colloscope:select_profile") return redirect("colloscope:select_profile")
@ -148,12 +116,10 @@ def marketplace(request):
@login_required @login_required
def colloscope(request): def colloscope(request):
try: try:
student = Profile.from_request( student = (Student.objects
request, .select_related("cls")
preprocess=lambda query: (query .prefetch_related("cls__term_set")
.select_related("student__cls") .get(profile__user=request.user))
.prefetch_related("student__cls__term_set"))
)
except ValueError: except ValueError:
return redirect("colloscope:select_profile") return redirect("colloscope:select_profile")
@ -243,12 +209,10 @@ def icalendar(request, key):
def amend(request, colle_id, do_enroll): def amend(request, colle_id, do_enroll):
try: try:
student = Profile.from_request( student = (Student.objects
request, .select_related("cls")
preprocess=lambda query: (query .prefetch_related("cls__term_set")
.select_related("student__cls") .get(profile__user=request.user))
.prefetch_related("student__cls__term_set"))
)
except ValueError: except ValueError:
return redirect("colloscope.choix_profil") return redirect("colloscope.choix_profil")

View File

@ -50,7 +50,7 @@
<div class="block"> <div class="block">
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
<div class="link"> <div class="link">
<i class="fa-solid fa-user"></i> {{ user.username }} ({{ request.session.profile }}) <i class="fa-solid fa-user"></i> {{ user.username }} ({{ request.user.profile }})
</div> </div>
<form action="{% url 'logout' %}" method="post"> <form action="{% url 'logout' %}" method="post">