Gestion de l'envoie des mails
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:
Binary file not shown.
@@ -150,6 +150,7 @@ MEDIA_ROOT = BASE_DIR / "media"
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
# Configuration de l'email
|
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||
EMAIL_HOST = 'ssl0.ovh.net'
|
||||
EMAIL_PORT = 465
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
||||
from django.utils import timezone
|
||||
from gestion_employe.models import Contrat
|
||||
from gestion_employe.models import Contrat, Employe
|
||||
from gestion_conge.models import Conge
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ QUOTA_CONGE_ANNUEL = 30
|
||||
NOMBRE_PAGINATION = 8
|
||||
DEBUT_RAPPEL = 60
|
||||
DUREE_FIN_CONTRAT = 90
|
||||
EMAIL_ASSISTANTE_DE_DIRECTION = list(Employe.objects.filter(fonction="assistant_direction").values_list('user__email', flat=True))
|
||||
|
||||
def solde_conge(employe):
|
||||
"""Fonction de calcul du solde de congé restant l'employé"""
|
||||
@@ -31,4 +32,26 @@ def solde_conge(employe):
|
||||
"success": True,
|
||||
"quota_annuel": QUOTA_CONGE_ANNUEL - jours_conges_valider,
|
||||
"nombre_jours_valide": jours_conges_valider
|
||||
}
|
||||
}
|
||||
|
||||
def envoyer_mail(sujet, message, destinataires):
|
||||
"""Fonction d'envoi de mail"""
|
||||
from django.core.mail import send_mail
|
||||
from django.conf import settings
|
||||
|
||||
send_mail(
|
||||
sujet,
|
||||
message,
|
||||
settings.EMAIL_HOST_USER,
|
||||
destinataires,
|
||||
fail_silently=False,
|
||||
)
|
||||
|
||||
def destinataire_mail_demande_conges(employe):
|
||||
"""Fonction de récupération des destinataires pour les mails de demande de congés"""
|
||||
if employe.chef:
|
||||
return EMAIL_ASSISTANTE_DE_DIRECTION
|
||||
else:
|
||||
if employe.departement:
|
||||
chefs_departement = Employe.objects.filter(departement=employe.departement, chef=True)
|
||||
return list(chefs_departement.values_list('user__email', flat=True))
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -83,7 +83,6 @@ def index(request):
|
||||
Q(validation_hierarchique = True) | Q(validation_hierarchique = False)
|
||||
).order_by('-date_demande')
|
||||
|
||||
|
||||
return render(request, 'gestion_conge/index.html', {
|
||||
"nombre_conges_valide": nombre_conges_valide,
|
||||
"nombre_conges_refuse": nombre_conges_refuse,
|
||||
@@ -123,6 +122,13 @@ def demander_conge(request):
|
||||
|
||||
conge_obj.save()
|
||||
messages.success(request, "Votre demande de congé a été enregistrée.")
|
||||
|
||||
fonctions_utilitaire.envoyer_mail(
|
||||
sujet = "Demande de congé",
|
||||
message = f"""Bonjour {employe.user.first_name} {employe.user.last_name}, votre demande de congé a été enregistrée. Veuillez consulter votre profil pour plus de détails.""",
|
||||
destinataires = fonctions_utilitaire.destinataire_mail_demande_conges() + [employe.user.email]
|
||||
)
|
||||
|
||||
return redirect("gestion_conges:conge")
|
||||
|
||||
return redirect("gestion_conges:conge")
|
||||
|
||||
Binary file not shown.
@@ -109,6 +109,13 @@ def affecter_employe_projet(request):
|
||||
}
|
||||
)
|
||||
messages.success(request, f"L'employé {employe.user.first_name} {employe.user.last_name} a été affecté au projet {projet.nom_projet}.")
|
||||
|
||||
fonctions_utilitaire.envoyer_mail(
|
||||
sujet = "Affectation à un projet",
|
||||
message = f"""Bonjour {employe.user.first_name} {employe.user.last_name}, vous avez été affecté au projet {projet.nom_projet.upper()} pour la période du {form.cleaned_data['date_affectation'].strftime('%d/%m/%Y')} au {date_fin_affectation.strftime('%d/%m/%Y')} en tant que {dict(Affectation.ROLE_CHOICES).get(form.cleaned_data['role'])}.
|
||||
Veuillez consulter votre profil pour plus de détails.""",
|
||||
destinataires = [employe.user.email]
|
||||
)
|
||||
return redirect('gestion_employe:index')
|
||||
else:
|
||||
messages.error(request, "Erreur : Formulaire non valide.")
|
||||
|
||||
Binary file not shown.
@@ -5,6 +5,7 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import redirect, render
|
||||
from django.http import JsonResponse, HttpRequest
|
||||
from django.forms import model_to_dict
|
||||
from fonction_utilitaire import fonctions_utilitaire
|
||||
from gestion_employe.models import Employe
|
||||
from gestion_salle.forms import ReservationForm
|
||||
from .models import Reservation
|
||||
@@ -29,6 +30,8 @@ def index(request:HttpRequest):
|
||||
motif_reservation = form.cleaned_data.get('motif_reservation')
|
||||
besoin_zoom = form.cleaned_data.get('besoin_zoom')
|
||||
besoin_ordi = form.cleaned_data.get('besoin_ordi')
|
||||
|
||||
|
||||
|
||||
while date_debut <= date_fin :
|
||||
reservation = Reservation(
|
||||
@@ -46,6 +49,15 @@ def index(request:HttpRequest):
|
||||
date_debut = date_debut + timedelta(days=1)
|
||||
|
||||
messages.success(request, "Réservation(s) créées avec succès.")
|
||||
|
||||
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION:
|
||||
fonctions_utilitaire.envoyer_mail(
|
||||
sujet = "Reservation de salle",
|
||||
message = f"""
|
||||
Une nouvelle demande de réservation de la {dict(Reservation.TYPE_CHOICES).get(salle)} a été effectuée par {employe.user.first_name} {employe.user.last_name} du {form.cleaned_data.get('date_debut').strftime('%d/%m/%Y')} au {form.cleaned_data.get('date_fin').strftime('%d/%m/%Y')} pour motif "{motif_reservation}".
|
||||
Veuillez vous connecter à la plateforme pour plus de détails.""",
|
||||
destinataires = list(fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION)
|
||||
)
|
||||
return redirect('gestion_salle:reservation-salle')
|
||||
|
||||
formulaire_reservation = ReservationForm()
|
||||
@@ -177,6 +189,13 @@ def valider_reservation(request:HttpRequest):
|
||||
|
||||
reservation.statut = 'validee'
|
||||
reservation.save()
|
||||
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION:
|
||||
fonctions_utilitaire.envoyer_mail(
|
||||
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.""",
|
||||
destinataires = [reservation.employe.user.email]
|
||||
)
|
||||
|
||||
messages.success(request, f"Réservation de {reservation.employe.get_full_name()} validée avec succès.")
|
||||
return redirect('gestion_salle:reservation-salle')
|
||||
|
||||
@@ -192,4 +211,12 @@ def refuser_reservation(request:HttpRequest):
|
||||
else:
|
||||
reservation.statut = "refusee"
|
||||
reservation.save()
|
||||
|
||||
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION:
|
||||
fonctions_utilitaire.envoyer_mail(
|
||||
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.""",
|
||||
destinataires = [reservation.employe.user.email]
|
||||
)
|
||||
|
||||
return JsonResponse({"message": "Réservation refusée avec succès."})
|
||||
Reference in New Issue
Block a user