Nettoyage des profils
This commit is contained in:
parent
f55af9e723
commit
bde601dd1a
|
@ -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
|
||||||
|
|
||||||
|
@ -413,22 +414,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):
|
||||||
|
|
|
@ -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"),
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Reference in New Issue