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'
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
|
|
||||||
|
# Configuration de l'email
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_HOST = 'ssl0.ovh.net'
|
EMAIL_HOST = 'ssl0.ovh.net'
|
||||||
EMAIL_PORT = 465
|
EMAIL_PORT = 465
|
||||||
|
|||||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from gestion_employe.models import Contrat
|
from gestion_employe.models import Contrat, Employe
|
||||||
from gestion_conge.models import Conge
|
from gestion_conge.models import Conge
|
||||||
|
|
||||||
|
|
||||||
@@ -7,6 +7,7 @@ QUOTA_CONGE_ANNUEL = 30
|
|||||||
NOMBRE_PAGINATION = 8
|
NOMBRE_PAGINATION = 8
|
||||||
DEBUT_RAPPEL = 60
|
DEBUT_RAPPEL = 60
|
||||||
DUREE_FIN_CONTRAT = 90
|
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):
|
def solde_conge(employe):
|
||||||
"""Fonction de calcul du solde de congé restant l'employé"""
|
"""Fonction de calcul du solde de congé restant l'employé"""
|
||||||
@@ -31,4 +32,26 @@ def solde_conge(employe):
|
|||||||
"success": True,
|
"success": True,
|
||||||
"quota_annuel": QUOTA_CONGE_ANNUEL - jours_conges_valider,
|
"quota_annuel": QUOTA_CONGE_ANNUEL - jours_conges_valider,
|
||||||
"nombre_jours_valide": 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)
|
Q(validation_hierarchique = True) | Q(validation_hierarchique = False)
|
||||||
).order_by('-date_demande')
|
).order_by('-date_demande')
|
||||||
|
|
||||||
|
|
||||||
return render(request, 'gestion_conge/index.html', {
|
return render(request, 'gestion_conge/index.html', {
|
||||||
"nombre_conges_valide": nombre_conges_valide,
|
"nombre_conges_valide": nombre_conges_valide,
|
||||||
"nombre_conges_refuse": nombre_conges_refuse,
|
"nombre_conges_refuse": nombre_conges_refuse,
|
||||||
@@ -123,6 +122,13 @@ def demander_conge(request):
|
|||||||
|
|
||||||
conge_obj.save()
|
conge_obj.save()
|
||||||
messages.success(request, "Votre demande de congé a été enregistrée.")
|
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")
|
||||||
|
|
||||||
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}.")
|
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')
|
return redirect('gestion_employe:index')
|
||||||
else:
|
else:
|
||||||
messages.error(request, "Erreur : Formulaire non valide.")
|
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.shortcuts import redirect, render
|
||||||
from django.http import JsonResponse, HttpRequest
|
from django.http import JsonResponse, HttpRequest
|
||||||
from django.forms import model_to_dict
|
from django.forms import model_to_dict
|
||||||
|
from fonction_utilitaire import fonctions_utilitaire
|
||||||
from gestion_employe.models import Employe
|
from gestion_employe.models import Employe
|
||||||
from gestion_salle.forms import ReservationForm
|
from gestion_salle.forms import ReservationForm
|
||||||
from .models import Reservation
|
from .models import Reservation
|
||||||
@@ -29,6 +30,8 @@ def index(request:HttpRequest):
|
|||||||
motif_reservation = form.cleaned_data.get('motif_reservation')
|
motif_reservation = form.cleaned_data.get('motif_reservation')
|
||||||
besoin_zoom = form.cleaned_data.get('besoin_zoom')
|
besoin_zoom = form.cleaned_data.get('besoin_zoom')
|
||||||
besoin_ordi = form.cleaned_data.get('besoin_ordi')
|
besoin_ordi = form.cleaned_data.get('besoin_ordi')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while date_debut <= date_fin :
|
while date_debut <= date_fin :
|
||||||
reservation = Reservation(
|
reservation = Reservation(
|
||||||
@@ -46,6 +49,15 @@ def index(request:HttpRequest):
|
|||||||
date_debut = date_debut + timedelta(days=1)
|
date_debut = date_debut + timedelta(days=1)
|
||||||
|
|
||||||
messages.success(request, "Réservation(s) créées avec succès.")
|
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')
|
return redirect('gestion_salle:reservation-salle')
|
||||||
|
|
||||||
formulaire_reservation = ReservationForm()
|
formulaire_reservation = ReservationForm()
|
||||||
@@ -177,6 +189,13 @@ 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(
|
||||||
|
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.")
|
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')
|
||||||
|
|
||||||
@@ -192,4 +211,12 @@ def refuser_reservation(request:HttpRequest):
|
|||||||
else:
|
else:
|
||||||
reservation.statut = "refusee"
|
reservation.statut = "refusee"
|
||||||
reservation.save()
|
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."})
|
return JsonResponse({"message": "Réservation refusée avec succès."})
|
||||||
Reference in New Issue
Block a user