Commit e2a32c2d authored by Bonnegent Sebastien's avatar Bonnegent Sebastien
Browse files

Merge branch 'Issues#91' into 'master'

Issues#91

See merge request !56
parents 7368f2ad 04e87423
Pipeline #18055 passed with stages
in 5 minutes and 29 seconds
from .models import Semestre, Sujet, PAO, Campagne, Preinscription, Lien
from .version import VERSION
import csv
import logging
from decimal import Decimal
......@@ -12,6 +10,8 @@ from django.http import HttpResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.views import generic
from django.views.generic import edit
from .models import Semestre, Sujet, PAO, Campagne, Preinscription, Lien
from .version import VERSION
LOG = logging.getLogger(__name__)
......@@ -333,7 +333,7 @@ def preinscriptions_list(request, sujet_pk):
if request.user.has_perm("projets.add_campagne") is False:
messages.error(
request,
f"Impossible de voir la liste des préincrits, la campagne est fermé.",
f"Impossible de voir la liste des préincrits, la campagne est fermée.",
)
return redirect("pao:sujet-detail", sujet_pk)
......@@ -356,9 +356,7 @@ def preinscriptions_list(request, sujet_pk):
if accepter_preinscription(request, p):
context["nb_places_restantes"] -= 1
context["nb_inscriptions_possible"] -= 1
liste_eleve.append(
f"{p.etudiant.get_full_name()}"
)
liste_eleve.append(f"{p.etudiant.get_full_name()}")
if liste_eleve:
messages.info(
request,
......@@ -488,8 +486,8 @@ def sujet_enable(request, pk):
sujet = get_object_or_404(Sujet, pk=pk)
if sujet.is_editable_by(request.user):
LOG.info(f"[sujet:{pk}] état modifié par {request.user}")
sujet.toggle_state()
LOG.info(f"[sujet:{pk}] état modifié par {request.user}")
else:
messages.error(request, "Accès non autorisé")
return redirect("pao:sujet-detail", pk)
......@@ -569,7 +567,7 @@ def last_campagne(request):
try:
campagne.pk
except AttributeError:
messages.error(request, "affichage impossible, aucune campagne créée")
messages.error(request, "Affichage impossible, aucune campagne créée")
return redirect("pao:home")
return redirect("pao:campagne-detail", campagne.pk)
......@@ -649,8 +647,8 @@ def campagne_ouvert(request, pk):
"Impossible d'ouvrir la campagne, une campagne est déjà ouverte",
)
else:
LOG.info(f"[campagne activité:{pk}] état modifié par {request.user}")
campagne.toggle_ouvert()
LOG.info(f"[campagne activité:{pk}] état modifié par {request.user}")
else:
messages.error(request, "Accès non autorisé")
return redirect("pao:campagne-list")
......@@ -663,9 +661,9 @@ def campagne_sujets_deactivate(request):
sujets_to_deactivate = Sujet.objects.filter(actif=True)
if sujets_to_deactivate.count() > 0:
for sujet in sujets_to_deactivate:
LOG.info(f"[sujet:{sujet.id}] sujet désactivé par {request.user}")
sujet.actif = False
sujet.save()
LOG.info(f"[sujet:{sujet.id}] sujet désactivé par {request.user}")
messages.info(
request, f"{sujets_to_deactivate.count()} sujets ont été désactivés"
)
......@@ -684,8 +682,8 @@ def campagne_note(request, pk):
campagne = get_object_or_404(Campagne, pk=pk)
if request.user.has_perm("projets.add_campagne"):
LOG.info(f"[période d'évaluation':{pk}] état modifié par {request.user}")
campagne.toggle_note()
LOG.info(f"[période d'évaluation':{pk}] état modifié par {request.user}")
else:
messages.error(request, "Accès non autorisé")
return redirect("pao:campagne-list")
......@@ -782,41 +780,69 @@ def pao_create(request, sujet_pk, etudiant_pk):
context["menu_pao"] = "active"
context["sujet"] = get_object_or_404(Sujet, pk=sujet_pk)
context["etudiant"] = get_object_or_404(User, pk=etudiant_pk)
# GESTION DES EXCEPTIONS
# sujet
if not context["sujet"].is_editable_by(request.user):
messages.error(request, "Vous n'avez pas les droits nécessaires")
return redirect("pao:home")
if context["sujet"].actif is False:
messages.warning(request, "Ce sujet n'est pas actif")
return redirect("pao:sujet-detail", sujet_pk)
# campagne
if Campagne.objects.filter(ouvert=True).count() == 0:
messages.error(
request, "Aucune campagne en cours, vous ne pouvez pas créer de nouveau pao"
)
return render(request, "projets/pao_create.html", context)
campagne = Campagne.objects.filter(ouvert=True)[0]
# etudiant
etudiants_deja_inscrits = [
pao.etudiant for pao in context["sujet"].get_pao_by_campagne(campagne)
]
if context["etudiant"] in etudiants_deja_inscrits:
messages.error(
request,
f"{context['etudiant'].get_full_name()} est déjà inscrit à ce {settings.PAO}",
)
LOG.debug(
f"Tentative bloquée de double inscription de {context['etudiant'].get_full_name()} au {settings.PAO} {context['sujet']}"
)
return render(request, "projets/pao_create.html", context)
etudiants_preinscrits = [
preinscription.etudiant
for preinscription in context["sujet"].get_preinscriptions()
]
if context["etudiant"] in etudiants_preinscrits:
messages.error(
request,
f"{context['etudiant'].get_full_name()} est déjà pré-inscrit à ce {settings.PAO}. Veuillez accepter sa pré-inscription pour l'inscrire.",
)
LOG.info(
f"{context['etudiant'].get_full_name()} n'a pas été inscrit car il est déjà pré-inscrit au {settings.PAO} {context['sujet']}"
)
return redirect("pao:sujet-detail", sujet_pk)
if campagne.get_nb_pao_etudiant(context["etudiant"]) >= settings.MAX_INSCRIPTIONS:
messages.error(
request,
f"Erreur dans l'enregistrement de {context['etudiant'].get_full_name()}, nombre max d'inscriptions atteint pour cet étudiant.",
)
LOG.info(
f"Inscription refusée, nb inscriptions max atteint: {context['etudiant'].get_full_name()} (sujet : {context['sujet']})"
)
return render(request, "projets/pao_create.html", context)
# CRÉATION DU PAO
if request.method == "POST":
# création de l'objet
semestre = get_object_or_404(Semestre, pk=request.POST["semestre"])
LOG.debug(f"semestre: {semestre}")
if semestre not in context["sujet"].semestres.all():
messages.error(request, "Mauvais choix de semestre")
return render(request, "projets/pao_create.html", context)
try:
campagne = Campagne.objects.filter(ouvert=True)[0]
except IndexError:
messages.error(request, "Création impossible, aucune campagne en cours")
return render(request, "projets/pao_create.html", context)
if (
campagne.get_nb_pao_etudiant(context["etudiant"])
>= settings.MAX_INSCRIPTIONS
):
messages.error(
request,
f"Erreur dans l'enregistrement de {context['etudiant'].get_full_name()}, nombre max d'inscriptions atteint pour cet étudiant.",
)
LOG.info(
f"Inscription refusée, nb inscriptions max atteint :{context['etudiant'].get_full_name()} (sujet : {context['sujet']})"
)
return render(request, "projets/pao_create.html", context)
try:
PAO(
sujet=context["sujet"],
......@@ -832,7 +858,9 @@ def pao_create(request, sujet_pk, etudiant_pk):
# mail de confirmation
message = f"Bonjour {context['etudiant'].first_name},\n\nVous avez été inscrit au {settings.PAO}: {context['sujet'].nom}.\n\nCe {settings.PAO} est dispensé par {context['sujet'].display_responsables()}\n\nDescription: {context['sujet'].description}"
objet_mail = f"Inscription {settings.PAO} - {context['sujet'].nom}"
send_mail(objet_mail, message, settings.SERVER_EMAIL, [context["etudiant"].email])
send_mail(
objet_mail, message, settings.SERVER_EMAIL, [context["etudiant"].email]
)
LOG.info(
f"Mail de confirmation d'inscription au {settings.PAO} {context['sujet']} envoyé à {context['etudiant'].get_full_name()}"
)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment