Bug: Correction du refus des reservations et d'envoi de mail
All checks were successful
Organisation/sirh/pipeline/head This commit looks good
All checks were successful
Organisation/sirh/pipeline/head This commit looks good
This commit is contained in:
1
Jenkinsfile
vendored
1
Jenkinsfile
vendored
@@ -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
|
||||||
|
|||||||
Binary file not shown.
@@ -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
|
||||||
|
|||||||
Binary file not shown.
@@ -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: {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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."})
|
||||||
|
|||||||
@@ -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();
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user