Bug: Correction du refus des reservations et d'envoi de mail
All checks were successful
Organisation/sirh/pipeline/head This commit looks good

This commit is contained in:
2026-05-15 16:31:11 +00:00
parent b03a4214c0
commit 8503689aa4
8 changed files with 25 additions and 19 deletions

1
Jenkinsfile vendored
View File

@@ -39,6 +39,7 @@ pipeline
python manage.py makemigrations python manage.py makemigrations
python manage.py migrate python manage.py migrate
echo $SUDO_PASSWORD | sudo -S rm -r staticfiles
python manage.py collectstatic --noinput python manage.py collectstatic --noinput
echo $SUDO_PASSWORD | sudo -S chown -R www-data:www-data /var/www/sirh echo $SUDO_PASSWORD | sudo -S chown -R www-data:www-data /var/www/sirh

View File

@@ -2,7 +2,6 @@ from datetime import date
from decimal import Decimal, InvalidOperation from decimal import Decimal, InvalidOperation
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required

View File

@@ -78,6 +78,11 @@ $("bouton-annuler").addEventListener("click", (e) => {
const csrf = document.querySelector("[name=csrfmiddlewaretoken]").value; const csrf = document.querySelector("[name=csrfmiddlewaretoken]").value;
const url_annuler = $("formulaire-details").dataset.urlannuler; const url_annuler = $("formulaire-details").dataset.urlannuler;
console.log("URL d'annulation :");
console.log($("formulaire-details"))
e.preventDefault();
fetch( fetch(
url_annuler, url_annuler,
{ {
@@ -128,6 +133,9 @@ if($("refuserReservation")){
const url = e.currentTarget.dataset.lienrefus; const url = e.currentTarget.dataset.lienrefus;
const idRes = $("id_reservation_detail").value; const idRes = $("id_reservation_detail").value;
console.log(idRes);
e.preventDefault();
fetch(url, { fetch(url, {
method: "POST", method: "POST",
headers: { headers: {

View File

@@ -12,7 +12,7 @@
<div class="modal-body"> <div class="modal-body">
<form method="POST" data-urlannuler="{% url 'gestion_salle:annuler-reservation' %}" data-urlvalider="{% url 'gestion_salle:valider-reservation' %}" id="formulaire-details"> <form method="POST" data-urlannuler="{% url 'gestion_salle:annuler-reservation' %}" data-urlvalider="{% url 'gestion_salle:valider-reservation' %}" id="formulaire-details">
{% csrf_token %} {% csrf_token %}
<input type='hidden' class="form-control" id="id_reservation_detail" name='id_reservation'> <input type='' class="form-control" id="id_reservation_detail" name='id_reservation'>
<div class="form-group mb-2"> <div class="form-group mb-2">
<label>Employé :</label> <label>Employé :</label>
<input class="form-control" id="employe" readonly> <input class="form-control" id="employe" readonly>

View File

@@ -1,4 +1,5 @@
from datetime import timedelta from datetime import timedelta
import json
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
@@ -19,8 +20,6 @@ def index(request: HttpRequest):
messages.error(request, "Profil employé introuvable.") messages.error(request, "Profil employé introuvable.")
return redirect('gestion_conges:conge') return redirect('gestion_conges:conge')
if request.method == "POST": if request.method == "POST":
form = ReservationForm(request.POST) form = ReservationForm(request.POST)
@@ -108,6 +107,7 @@ def liste_reservation(request:HttpRequest):
reservations = Reservation.objects.filter(statut = "validee") reservations = Reservation.objects.filter(statut = "validee")
liste_reservation = [] liste_reservation = []
for reservation in reservations: for reservation in reservations:
print(reservation.statut)
color = None color = None
if reservation.statut == "en_attente": if reservation.statut == "en_attente":
color = "#ffc107" color = "#ffc107"
@@ -220,12 +220,11 @@ def valider_reservation(request: HttpRequest):
reservation.statut = 'validee' reservation.statut = 'validee'
reservation.save() reservation.save()
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION: fonctions_utilitaire.envoyer_mail(
fonctions_utilitaire.envoyer_mail( sujet = "Reservation de salle",
sujet = "Reservation de salle", message = f"""Bonjour {request.user.first_name} {request.user.last_name}, votre reservation de la salle {dict(Reservation.TYPE_CHOICES).get(reservation.salle)} du {reservation.date_debut.strftime('%d/%m/%Y')} au {reservation.date_fin.strftime('%d/%m/%Y')} pour motif "{reservation.motif_reservation}" a été validée. Veuillez vous connecter à la plateforme pour plus de détails.""",
message = f"""Bonjour {request.user.first_name} {request.user.last_name}, votre reservation de la salle {dict(Reservation.TYPE_CHOICES).get(reservation.salle)} du {reservation.date_debut.strftime('%d/%m/%Y')} au {reservation.date_fin.strftime('%d/%m/%Y')} pour motif "{reservation.motif_reservation}" a été validée. Veuillez vous connecter à la plateforme pour plus de détails.""", destinataires = [reservation.employe.user.email]
destinataires = [reservation.employe.user.email] )
)
messages.success(request, f"Réservation de {reservation.employe.get_full_name()} validée avec succès.") messages.success(request, f"Réservation de {reservation.employe.get_full_name()} validée avec succès.")
return redirect('gestion_salle:reservation-salle') return redirect('gestion_salle:reservation-salle')
@@ -234,22 +233,21 @@ def valider_reservation(request: HttpRequest):
def refuser_reservation(request: HttpRequest): def refuser_reservation(request: HttpRequest):
"""Refuser une réservation""" """Refuser une réservation"""
if request.method == 'POST': if request.method == 'POST':
reservation_id = request.POST.get('id_reservation') reservation_id = json.loads(request.body).get('id_reservation')
try: try:
reservation = Reservation.objects.get(id=reservation_id) reservation = Reservation.objects.get(id=reservation_id)
except Reservation.DoesNotExist: except Reservation.DoesNotExist:
messages.error(request, "La réservation n'existe pas.") messages.error(request, "La réservation n'existe pas.")
return redirect("salle") return JsonResponse({"message": "Une erreur s'est produite lors de l'annulation de la reservation."})
reservation.statut = 'refusee' reservation.statut = 'refusee'
reservation.save() reservation.save()
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION: fonctions_utilitaire.envoyer_mail(
fonctions_utilitaire.envoyer_mail( sujet = "Reservation de salle",
sujet = "Reservation de salle", message = f"""Bonjour {request.user.first_name} {request.user.last_name}, votre reservation de la salle {dict(Reservation.TYPE_CHOICES).get(reservation.salle)} du {reservation.date_debut.strftime('%d/%m/%Y')} au {reservation.date_fin.strftime('%d/%m/%Y')} pour motif "{reservation.motif_reservation}" a été refusée. Veuillez vous connecter à l'Assistante de Direction pour plus de détails.""",
message = f"""Bonjour {request.user.first_name} {request.user.last_name}, votre reservation de la salle {dict(Reservation.TYPE_CHOICES).get(reservation.salle)} du {reservation.date_debut.strftime('%d/%m/%Y')} au {reservation.date_fin.strftime('%d/%m/%Y')} pour motif "{reservation.motif_reservation}" a été refusée. Veuillez vous connecter à l'Assistante de Direction pour plus de détails.""", destinataires = [reservation.employe.user.email]
destinataires = [reservation.employe.user.email] )
)
return JsonResponse({"message": "Réservation refusée avec succès."}) return JsonResponse({"message": "Réservation refusée avec succès."})

View File

@@ -190,4 +190,4 @@ tableau_reservation_attente.on("rowClick", (row, rowData) => {
const modal = new bootstrap.Modal($("modalDetailReservation")); const modal = new bootstrap.Modal($("modalDetailReservation"));
bootstrap.Modal.getOrCreateInstance($("modalReservationAttente")).hide(); bootstrap.Modal.getOrCreateInstance($("modalReservationAttente")).hide();
modal.show(); modal.show();
}) })