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.contrib.auth.models import User
from django.conf import settings
from django.utils.translation import gettext_lazy as _
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)
def __str__(self):
return f"Profil {self.user} : {self.student} ; {self.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")
return "Student" if self.student is not None else "Colleur"
class CalendarLink(models.Model):

View File

@ -11,7 +11,6 @@ urlpatterns = [
path("export/calendar/<str:key>/calendar.ics", views.icalendar, name="export-ics"),
path("calendrier.ics",
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("action/enroll", views.enroll, name="enroll"),
path("action/withdraw", views.withdraw, name="withdraw"),

View File

@ -20,41 +20,12 @@ def handler404(request):
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):
model = Colle
context_object_name = "colles"
def get_queryset(self):
student = Profile.from_request(self.request)
student = self.request.user.profile.student
base_query = (student.cls
.current_term()
.query_colles()
@ -71,12 +42,11 @@ class ColleListView(LoginRequiredMixin, ListView):
@login_required
def dashboard(request):
try:
student = Profile.from_request(
request,
preprocess=lambda query: (query
.select_related("student__cls")
.prefetch_related("student__cls__term_set"))
)
student = (Student.objects
.select_related("cls")
.prefetch_related("cls__term_set")
.get(profile__user=request.user))
except ValueError:
return redirect("colloscope:select_profile")
@ -123,12 +93,10 @@ class WithdrawForm(AmendForm):
@login_required
def marketplace(request):
try:
student = Profile.from_request(
request,
preprocess=lambda query: (query
.select_related("student__cls")
.prefetch_related("student__cls__term_set"))
)
student = (Student.objects
.select_related("cls")
.prefetch_related("cls__term_set")
.get(profile__user=request.user))
except ValueError:
return redirect("colloscope:select_profile")
@ -148,12 +116,10 @@ def marketplace(request):
@login_required
def colloscope(request):
try:
student = Profile.from_request(
request,
preprocess=lambda query: (query
.select_related("student__cls")
.prefetch_related("student__cls__term_set"))
)
student = (Student.objects
.select_related("cls")
.prefetch_related("cls__term_set")
.get(profile__user=request.user))
except ValueError:
return redirect("colloscope:select_profile")
@ -243,12 +209,10 @@ def icalendar(request, key):
def amend(request, colle_id, do_enroll):
try:
student = Profile.from_request(
request,
preprocess=lambda query: (query
.select_related("student__cls")
.prefetch_related("student__cls__term_set"))
)
student = (Student.objects
.select_related("cls")
.prefetch_related("cls__term_set")
.get(profile__user=request.user))
except ValueError:
return redirect("colloscope.choix_profil")

View File

@ -50,7 +50,7 @@
<div class="block">
{% if request.user.is_authenticated %}
<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>
<form action="{% url 'logout' %}" method="post">