Bug: Affichage des details de la reservation
This commit is contained in:
@@ -39,7 +39,7 @@ class AffectationForm(forms.ModelForm):
|
|||||||
class ContratForm(forms.ModelForm):
|
class ContratForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Contrat
|
model = Contrat
|
||||||
fields = [
|
fields = (
|
||||||
"numero_contrat",
|
"numero_contrat",
|
||||||
"type_contrat",
|
"type_contrat",
|
||||||
"date_debut",
|
"date_debut",
|
||||||
@@ -47,7 +47,7 @@ class ContratForm(forms.ModelForm):
|
|||||||
"salaire_mensuel",
|
"salaire_mensuel",
|
||||||
"statut",
|
"statut",
|
||||||
"fichier_contrat"
|
"fichier_contrat"
|
||||||
]
|
)
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
'numero_contrat': forms.TextInput(attrs={'class': 'form-control'}),
|
'numero_contrat': forms.TextInput(attrs={'class': 'form-control'}),
|
||||||
@@ -62,19 +62,19 @@ class ContratForm(forms.ModelForm):
|
|||||||
class DepartementForm(forms.ModelForm):
|
class DepartementForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Departement
|
model = Departement
|
||||||
fields = ['nom']
|
fields = ('nom')
|
||||||
|
|
||||||
class FormationForm(forms.ModelForm):
|
class FormationForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Formation
|
model = Formation
|
||||||
fields = [
|
fields = (
|
||||||
'titre',
|
'titre',
|
||||||
'organisme',
|
'organisme',
|
||||||
'date_obtention',
|
'date_obtention',
|
||||||
'date_fin',
|
'date_fin',
|
||||||
'description',
|
'description',
|
||||||
'certificat'
|
'certificat'
|
||||||
]
|
)
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
'titre': forms.TextInput(attrs={"class": "form-control"}),
|
'titre': forms.TextInput(attrs={"class": "form-control"}),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from .models import Reservation
|
|||||||
class ReservationForm(forms.ModelForm):
|
class ReservationForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Reservation
|
model = Reservation
|
||||||
fields = ['salle', 'date_debut', 'date_fin', 'heure_debut', 'heure_fin', 'motif_reservation', 'besoin_zoom', 'besoin_ordi']
|
fields = ('salle', 'date_debut', 'date_fin', 'heure_debut', 'heure_fin', 'motif_reservation', 'besoin_zoom', 'besoin_ordi')
|
||||||
widgets = {
|
widgets = {
|
||||||
'date_debut': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
|
'date_debut': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
|
||||||
'date_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
|
'date_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
|
||||||
|
|||||||
@@ -181,7 +181,8 @@ tableau_reservation_attente.on("rowClick", (row, rowData) => {
|
|||||||
$("employe").value=data.employe;
|
$("employe").value=data.employe;
|
||||||
$("salle").value=data.salle;
|
$("salle").value=data.salle;
|
||||||
$("statut-reservation").innerHTML=data.statut;
|
$("statut-reservation").innerHTML=data.statut;
|
||||||
$("date_evenement").value=data.date_debut;
|
$("date_debut").value = data.date_debut;
|
||||||
|
$("date_fin").value = data.date_fin;
|
||||||
$("heure_debut").value=data.heure_debut;
|
$("heure_debut").value=data.heure_debut;
|
||||||
$("heure_fin").value=data.heure_fin;
|
$("heure_fin").value=data.heure_fin;
|
||||||
$("motif_reservation").value=data.motif_reservation;
|
$("motif_reservation").value=data.motif_reservation;
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
<!-- Modal d'affichage des détails d'une reservation -->
|
<!-- Modal d'affichage des détails d'une reservation -->
|
||||||
<<<<<<< HEAD
|
|
||||||
{% load tags_personnaliser %}
|
{% load tags_personnaliser %}
|
||||||
=======
|
|
||||||
>>>>>>> 6026af5 (Bug : Affichages des conges)
|
|
||||||
<div class="modal fade" id="modalDetailReservation" tabindex="-1" aria-labelledby="modalDetailReservationLabel" aria-hidden="true">
|
<div class="modal fade" id="modalDetailReservation" tabindex="-1" aria-labelledby="modalDetailReservationLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
@@ -25,8 +22,12 @@
|
|||||||
<input class="form-control" id="salle" readonly>
|
<input class="form-control" id="salle" readonly>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
<label>Date de l'évènement :</label>
|
<label>Date de debut :</label>
|
||||||
<input type='date' class="form-control" id="date_evenement" readonly >
|
<input type='date' class="form-control" id="date_debut" readonly >
|
||||||
|
</div>
|
||||||
|
<div class="form-group mb-2">
|
||||||
|
<label>Date de fin :</label>
|
||||||
|
<input type='date' class="form-control" id="date_fin" readonly >
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
<label>Heure de début :</label>
|
<label>Heure de début :</label>
|
||||||
|
|||||||
@@ -143,10 +143,12 @@ def liste_reservation_attente(request):
|
|||||||
return JsonResponse(liste_reservation, safe=False)
|
return JsonResponse(liste_reservation, safe=False)
|
||||||
|
|
||||||
def detail_reservation(request:HttpRequest, reservation_id:int):
|
def detail_reservation(request:HttpRequest, reservation_id:int):
|
||||||
|
|
||||||
reservation = Reservation.objects.get(id=reservation_id)
|
reservation = Reservation.objects.get(id=reservation_id)
|
||||||
employe = reservation.employe.user
|
employe = reservation.employe.user
|
||||||
|
|
||||||
reservation_json = {
|
reservation_json = {
|
||||||
|
|
||||||
'id_reservation': reservation_id,
|
'id_reservation': reservation_id,
|
||||||
'employe': f"{employe.first_name} {employe.last_name}",
|
'employe': f"{employe.first_name} {employe.last_name}",
|
||||||
'salle': reservation.salle,
|
'salle': reservation.salle,
|
||||||
@@ -159,7 +161,6 @@ def detail_reservation(request:HttpRequest, reservation_id:int):
|
|||||||
'besoin_ordinateur': reservation.besoin_ordi,
|
'besoin_ordinateur': reservation.besoin_ordi,
|
||||||
'lien_zoom': reservation.lien_zoom or '',
|
'lien_zoom': reservation.lien_zoom or '',
|
||||||
}
|
}
|
||||||
|
|
||||||
return JsonResponse(reservation_json, safe=True)
|
return JsonResponse(reservation_json, safe=True)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -247,4 +248,4 @@ def refuser_reservation(request:HttpRequest):
|
|||||||
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."})
|
||||||
|
|||||||
@@ -1,301 +0,0 @@
|
|||||||
from django.core.mail import send_mail
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
def send_notification_email(user, sujet, message):
|
|
||||||
"""
|
|
||||||
Fonction générique pour envoyer un email simple
|
|
||||||
"""
|
|
||||||
if not user.email:
|
|
||||||
return
|
|
||||||
send_mail(
|
|
||||||
sujet,
|
|
||||||
message,
|
|
||||||
settings.DEFAULT_FROM_EMAIL,
|
|
||||||
[user.email],
|
|
||||||
fail_silently=False,
|
|
||||||
)
|
|
||||||
|
|
||||||
def email_reservation_creee(reservation):
|
|
||||||
user = reservation.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre réservation a été enregistrée avec succès.
|
|
||||||
|
|
||||||
Salle : {reservation.salle}
|
|
||||||
Date : {reservation.date_debut}
|
|
||||||
Heure : {reservation.heure_debut} - {reservation.heure_fin}
|
|
||||||
Motif : {reservation.motif_reservation}
|
|
||||||
|
|
||||||
Merci.
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Confirmation de votre réservation", message)
|
|
||||||
|
|
||||||
def email_reservation_directeur(reservation, directeur):
|
|
||||||
message = f"""
|
|
||||||
Bonjour {directeur.get_full_name()},
|
|
||||||
|
|
||||||
Une nouvelle réservation attend votre validation.
|
|
||||||
|
|
||||||
Employé : {reservation.employe.user.get_full_name()}
|
|
||||||
Salle : {reservation.salle}
|
|
||||||
Date : Du {reservation.date_debut} au {reservation.date_fin}
|
|
||||||
Heure : {reservation.heure_debut} - {reservation.heure_fin}
|
|
||||||
Motif : {reservation.motif_reservation}
|
|
||||||
|
|
||||||
Connectez-vous à la plateforme pour valider.
|
|
||||||
|
|
||||||
https://support.cerfig.org/login/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(directeur, "Nouvelle réservation à valider", message)
|
|
||||||
|
|
||||||
def email_reservation_zoom(reservation, admin):
|
|
||||||
message = f"""
|
|
||||||
Bonjour {admin.get_full_name()},
|
|
||||||
|
|
||||||
Une demande de lien Zoom a été faite.
|
|
||||||
|
|
||||||
Employé : {reservation.employe.user.get_full_name()}
|
|
||||||
Date : {reservation.date_debut} au {reservation.date_fin}
|
|
||||||
Heure : {reservation.heure_debut} - {reservation.heure_fin}
|
|
||||||
Motif : {reservation.motif_reservation}
|
|
||||||
|
|
||||||
Veuillez créer le lien Zoom.
|
|
||||||
|
|
||||||
https://support.cerfig.org/login/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(admin, "Création lien Zoom requise", message)
|
|
||||||
|
|
||||||
def email_statut_reservation(reservation):
|
|
||||||
user = reservation.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Le statut de votre réservation a été mis à jour.
|
|
||||||
|
|
||||||
Salle : {reservation.salle}
|
|
||||||
Date : {reservation.date_debut}
|
|
||||||
Statut : {reservation.statut}
|
|
||||||
|
|
||||||
Merci de vous connecter
|
|
||||||
|
|
||||||
https://support.cerfig.org
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Mise à jour de votre réservation", message)
|
|
||||||
|
|
||||||
def email_reservation_validee(reservation):
|
|
||||||
user = reservation.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre réservation a été VALIDÉE.
|
|
||||||
|
|
||||||
Salle : {reservation.salle}
|
|
||||||
Date : {reservation.date_debut}
|
|
||||||
|
|
||||||
https://support.cerfig.org/login/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Réservation validée", message)
|
|
||||||
|
|
||||||
def email_reservation_refusee(reservation):
|
|
||||||
user = reservation.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre réservation a été REFUSÉE.
|
|
||||||
|
|
||||||
Salle : {reservation.salle}
|
|
||||||
Date : {reservation.date_debut}
|
|
||||||
|
|
||||||
https://support.cerfig.org/login/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Réservation refusée", message)
|
|
||||||
|
|
||||||
def email_contrat_cree(contrat):
|
|
||||||
user = contrat.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Un nouveau contrat a été créé pour vous.
|
|
||||||
|
|
||||||
Date début : {contrat.date_debut}
|
|
||||||
Date fin : {contrat.date_fin}
|
|
||||||
|
|
||||||
Bienvenue !
|
|
||||||
Merci de vous connecter pour plus informations sur votre contrat
|
|
||||||
|
|
||||||
https://support.cerfig.org
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
|
|
||||||
send_notification_email(user, "Nouveau contrat", message)
|
|
||||||
|
|
||||||
def email_statut_contrat(contrat):
|
|
||||||
user = contrat.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre contrat a été modifier par les ressource humaine .
|
|
||||||
veuillez vous connecter pour voir les nouvelles informations sur votre contrat
|
|
||||||
|
|
||||||
https://support.cerfig.org/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Mise à jour du contrat", message)
|
|
||||||
|
|
||||||
def email_affectation_projet(affectation):
|
|
||||||
user = affectation.employe.user
|
|
||||||
projet = affectation.projet
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre affectation au projet a été mise à jour.
|
|
||||||
|
|
||||||
Projet : {projet.nom}
|
|
||||||
Description : {projet.description}
|
|
||||||
Date début : {projet.date_debut}
|
|
||||||
Date fin : {projet.date_fin}
|
|
||||||
Rôle : {affectation.role}
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Affectation projet", message)
|
|
||||||
|
|
||||||
def email_expiration_fichier(projet, fichier, chef_projet):
|
|
||||||
message = f"""
|
|
||||||
Bonjour {chef_projet.get_full_name()},
|
|
||||||
|
|
||||||
Un fichier est proche de son expiration.
|
|
||||||
|
|
||||||
Projet : {projet.nom}
|
|
||||||
Fichier : {fichier.nom}
|
|
||||||
Date début : {fichier.date_debut}
|
|
||||||
Date fin : {fichier.date_fin}
|
|
||||||
|
|
||||||
https://support.cerfig.org/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
|
|
||||||
"""
|
|
||||||
send_notification_email(chef_projet, "Fichier proche expiration", message)
|
|
||||||
|
|
||||||
def email_conge_cree(conge):
|
|
||||||
user = conge.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre demande de congé a été enregistrée avec succès.
|
|
||||||
|
|
||||||
Type de congé : {conge.type_conge}
|
|
||||||
Date début : {conge.date_debut}
|
|
||||||
Date fin : {conge.date_fin}
|
|
||||||
Motif : {conge.motif}
|
|
||||||
|
|
||||||
Votre demande est en attente de validation.
|
|
||||||
|
|
||||||
https://support.cerfig.org/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Demande de congé enregistrée", message)
|
|
||||||
|
|
||||||
def email_conge_responsable(conge, responsable):
|
|
||||||
message = f"""
|
|
||||||
Bonjour {responsable.get_full_name()},
|
|
||||||
|
|
||||||
Une demande de congé nécessite votre validation.
|
|
||||||
|
|
||||||
Employé : {conge.employe.user.get_full_name()}
|
|
||||||
Type : {conge.type_conge}
|
|
||||||
Date : {conge.date_debut} au {conge.date_fin}
|
|
||||||
Motif : {conge.motif}
|
|
||||||
|
|
||||||
Merci de valider ou refuser.
|
|
||||||
|
|
||||||
https://support.cerfig.org/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(responsable, "Validation congé (Niveau 1)", message)
|
|
||||||
|
|
||||||
def email_conge_directeur(conge, directeur):
|
|
||||||
message = f"""
|
|
||||||
Bonjour {directeur.get_full_name()},
|
|
||||||
|
|
||||||
Une demande de congé a été validée par le responsable et attend votre validation finale.
|
|
||||||
|
|
||||||
Employé : {conge.employe.user.get_full_name()}
|
|
||||||
Type : {conge.type_conge}
|
|
||||||
Date : {conge.date_debut} au {conge.date_fin}
|
|
||||||
|
|
||||||
Merci de valider définitivement.
|
|
||||||
|
|
||||||
https://support.cerfig.org/login/
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(directeur, "Validation congé (Niveau 2)", message)
|
|
||||||
|
|
||||||
def email_conge_valide(conge):
|
|
||||||
user = conge.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre demande de congé a été VALIDÉE.
|
|
||||||
|
|
||||||
Type : {conge.type_conge}
|
|
||||||
Date : {conge.date_debut} au {conge.date_fin}
|
|
||||||
|
|
||||||
Bon repos a vous
|
|
||||||
|
|
||||||
https://support.cerfig.org
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Congé validé", message)
|
|
||||||
|
|
||||||
def email_conge_refuse(conge):
|
|
||||||
user = conge.employe.user
|
|
||||||
message = f"""
|
|
||||||
Bonjour {user.get_full_name()},
|
|
||||||
|
|
||||||
Votre demande de congé a été REFUSÉE.
|
|
||||||
|
|
||||||
Type : {conge.type_conge}
|
|
||||||
Date : {conge.date_debut} au {conge.date_fin}
|
|
||||||
|
|
||||||
Motif : {conge.motif_refus or "Non précisé"}
|
|
||||||
|
|
||||||
https://support.cerfig.org
|
|
||||||
|
|
||||||
Cordialement,
|
|
||||||
SIRH
|
|
||||||
"""
|
|
||||||
send_notification_email(user, "Congé refusé", message)
|
|
||||||
Reference in New Issue
Block a user