1 Commits

Author SHA1 Message Date
Fatimac2804
7b3d8cdc8e Affichage du message d'alerte sur l'etat du contrat de l'employé
All checks were successful
Organisation/sirh/pipeline/head This commit looks good
Organisation/sirh/pipeline/pr-main This commit looks good
2026-09-08 17:02:58 +02:00
7 changed files with 24 additions and 43 deletions

View File

@@ -15,8 +15,6 @@ try:
except: except:
pass pass
EMAIL_EQUIPE_INFORMATIQUE = ["support@cerfig.org"]
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é"""
contrat = Contrat.objects.filter(employe=employe, statut='actif').order_by('-date_debut').first() contrat = Contrat.objects.filter(employe=employe, statut='actif').order_by('-date_debut').first()

View File

@@ -12,22 +12,27 @@
</div> </div>
{% if messages %} {% if messages %}
{% for message in messages %} {% for message in messages %}
<div class="alert alert-{% if message.tags == 'error' %}danger{% else %}success{% endif %} alert-dismissible fade show mt-2" role="alert"> <div class="alert alert-{% if message.tags == 'error' %}danger{% else %}success{% endif %} alert-dismissible fade show" role="alert">
{{ message }} {{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if not expiration_contrat %} <div class="alert alert-danger fade show alert-dismissible mt-2"> <strong>Important :</strong>
Les informations sur votre contrat n'ont pas été renseignées,
veuillez contacter les ressources humaines. </div>
{% if not has_contrat %} {% elif contrat_nb_jours_restant > 0 %} <div class="alert alert-danger fade show alert-dismissible mt-2"> <strong>Important :</strong>
<div class="alert alert-danger mt-2"> Votre contrat de travail expire dans <strong>{{ contrat_nb_jours_restant }} jour{{ contrat_nb_jours_restant|pluralize }}</strong>,
<strong>Important :</strong> Les informations sur votre contrat n'ont pas été renseignées, veuillez contacter les ressources humaines. veuillez contacter les ressources humaines. </div>
</div>
{% elif expiration_contrat %} {% elif contrat_nb_jours_restant == 0 %} <div class="alert alert-danger fade show alert-dismissible mt-2"> <strong>Important :</strong>
<div class="alert alert-warning mt-2"> Votre contrat de travail <strong>expire aujourd'hui</strong>.
<strong>Important :</strong> Votre contrat de travail expire dans {{ contrat_nb_jours_restant }} jours, veuillez contacter les ressources humaines. Veuillez contacter les ressources humaines. </div>
</div>
{% elif contrat_nb_jours_restant < 0 %} <div class="alert alert-danger fade show alert-dismissible mt-2"> <strong>Important :</strong>
Votre contrat de travail est <strong>déjà expiré</strong>.
Veuillez contacter les ressources humaines. </div>
{% endif %} {% endif %}
<div class="accordion mt-2" id="accordionInformationEmploye"> <div class="accordion mt-2" id="accordionInformationEmploye">
@@ -127,7 +132,7 @@
</div> </div>
<div class="form-group mb-2"> <div class="form-group mb-2">
<label>Statut :</label> <label>Statut :</label>
<input type="text" class="form-control" value="{{ contrat.statut }}" id="satut" readonly> <input type="text" class="form-control" value="{{ contrat.statut }}" id="statut" readonly>
</div> </div>
<div class="form-group mb-2"> <div class="form-group mb-2">
<label>fichier :</label> <label>fichier :</label>

View File

@@ -3,8 +3,8 @@ from datetime import datetime, timedelta
import requests import requests
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from decouple import config
from django.contrib import messages from django.contrib import messages
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth.password_validation import validate_password from django.contrib.auth.password_validation import validate_password
@@ -27,18 +27,6 @@ def index(request):
if not request.user.groups.filter(name="ressource_humaine").exists(): if not request.user.groups.filter(name="ressource_humaine").exists():
return redirect('gestion_employe:mon-profil') return redirect('gestion_employe:mon-profil')
response = requests.get(f"{config('SERVEUR_AUTHENTIFICATION')}recuperer-list-departement/")
if response.status_code == 200:
try:
departements_data = response.json()
for dept in departements_data:
Departement.objects.update_or_create(
nom = dept['nom']
)
except json.JSONDecodeError as e:
print(f"[ERROR] Erreur lors du décodage JSON : {e}")
employes = Employe.objects.all().order_by('-user__date_joined') employes = Employe.objects.all().order_by('-user__date_joined')
nombre_employes = Employe.objects.count() nombre_employes = Employe.objects.count()
nombre_cps = Contrat.objects.filter(type_contrat='contrat_prestation').count() nombre_cps = Contrat.objects.filter(type_contrat='contrat_prestation').count()
@@ -533,7 +521,7 @@ def modifier_mot_passe(request):
} }
response = requests.post( response = requests.post(
f"{config('SERVEUR_AUTHENTIFICATION')}modifier-mot-de-passe/", "http://localhost:8000/modifier-mot-de-passe/",
json=donnees, json=donnees,
headers=headers headers=headers
) )

View File

@@ -16,7 +16,7 @@ from .models import Reservation
@login_required @login_required
def index(request: HttpRequest): def index(request: HttpRequest):
"""Vue d'affichage de la page d'accueil de la gestion des salles"""
try: try:
employe = Employe.objects.get(user=request.user) employe = Employe.objects.get(user=request.user)
except Employe.DoesNotExist: except Employe.DoesNotExist:
@@ -37,11 +37,11 @@ def index(request: HttpRequest):
besoin_ordi = form.cleaned_data['besoin_ordi'] besoin_ordi = form.cleaned_data['besoin_ordi']
if date_fin < date_debut: if date_fin < date_debut:
messages.error(request, "La date de fin est antérieure à la date de début.") messages.error(request, "Date fin invalide.")
return redirect('gestion_salle:reservation-salle') return redirect('gestion_salle:reservation-salle')
if heure_fin <= heure_debut: if heure_fin <= heure_debut:
messages.error(request, "L'heure de fin est antérieure à l'heure de début.") messages.error(request, "Heure invalide.")
return redirect('gestion_salle:reservation-salle') return redirect('gestion_salle:reservation-salle')
if not request.user.first_name.strip() or not request.user.last_name.strip(): if not request.user.first_name.strip() or not request.user.last_name.strip():
@@ -55,6 +55,7 @@ def index(request: HttpRequest):
current_date = date_debut current_date = date_debut
while current_date <= date_fin: while current_date <= date_fin:
reservation = Reservation.objects.create( reservation = Reservation.objects.create(
employe=employe, employe=employe,
date_debut=current_date, date_debut=current_date,
@@ -73,27 +74,16 @@ def index(request: HttpRequest):
messages.success(request, "Réservation(s) créée(s) avec succès.") messages.success(request, "Réservation(s) créée(s) avec succès.")
if fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION and salle != "lien_zoom": 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, 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}". 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}".
Veuillez vous connecter à la plateforme pour plus de détails.""", Veuillez vous connecter à la plateforme pour plus de détails.""",
destinataires = fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION destinataires = fonctions_utilitaire.EMAIL_ASSISTANTE_DE_DIRECTION
) )
if (salle == "lien_zoom" or besoin_zoom or besoin_ordi) and fonctions_utilitaire.EMAIL_EQUIPE_INFORMATIQUE:
fonctions_utilitaire.envoyer_mail(
sujet="Demande de lien Zoom",
message=f"""Bonjour,
Une nouvelle demande de réservation de salle nécessitant un lien Zoom a été effectuée par {employe.user.first_name} {employe.user.last_name} du {date_debut.strftime('%d/%m/%Y')} au {date_fin.strftime('%d/%m/%Y')} de {heure_debut.strftime('%H:%M')} a {heure_fin.strftime('%H:%M')} pour le motif {motif}
Veuillez vous connecter à la plateforme pour plus de détails.""",
destinataires=fonctions_utilitaire.EMAIL_EQUIPE_INFORMATIQUE
)
return redirect('gestion_salle:reservation-salle') return redirect('gestion_salle:reservation-salle')
formulaire_reservation = ReservationForm() formulaire_reservation = ReservationForm()
departement = employe.departement departement = employe.departement
@@ -111,7 +101,7 @@ Veuillez vous connecter à la plateforme pour plus de détails.""",
} }
return render(request, "gestion_salle/index.html", context) return render(request, "gestion_salle/index.html", context)
def liste_reservation(request:HttpRequest): def liste_reservation(request:HttpRequest):
"""Vue d'affichage des creneaux disponibles""" """Vue d'affichage des creneaux disponibles"""
reservations = Reservation.objects.filter(statut = "validee") reservations = Reservation.objects.filter(statut = "validee")