4 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
904954c735 Fix: Modification de mot de passe
All checks were successful
Organisation/sirh/pipeline/head This commit looks good
2026-09-08 11:09:53 +00:00
99e764ab4d Merge branch 'main' of https://jenkins.cerfig.org/CERFIG/sirh 2026-09-07 12:10:34 +00:00
0eb745d5f3 Fix: Correction de l'affichage des dates dans les détails de la réservation 2026-09-07 12:07:58 +00:00
7 changed files with 65 additions and 33 deletions

2
Jenkinsfile vendored
View File

@@ -16,7 +16,7 @@ pipeline
{ {
steps steps
{ {
sh 'echo "Debut du pipeline"' sh 'echo "Debut du pipeline test"'
cleanWs() cleanWs()
checkout scm checkout scm
} }

View File

@@ -18,16 +18,21 @@
</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

@@ -6,7 +6,7 @@
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<form method="POST" action="{% url 'gestion_employe:modifier-mot-passe' %}"> <form method="POST" action="{% url 'gestion_employe:modifier-mot-passe' %}" id="formulaire_mot_de_passe">
{% csrf_token %} {% csrf_token %}
<div class="form-group mb-2"> <div class="form-group mb-2">
<label>Votre mot de passe actuel :</label> <label>Votre mot de passe actuel :</label>

View File

@@ -1,11 +1,14 @@
import json import json
from datetime import datetime, timedelta from datetime import datetime, timedelta
import requests
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from django.contrib import messages from django.contrib import messages
from django.contrib.auth import authenticate 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.core.exceptions import ValidationError
from django.db.models import Sum from django.db.models import Sum
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from django.http import JsonResponse from django.http import JsonResponse
@@ -176,25 +179,6 @@ def mon_profil(request):
"contrat_nb_jours_restant": max(0, contrats.nombre_jours_restant if contrats else 0) "contrat_nb_jours_restant": max(0, contrats.nombre_jours_restant if contrats else 0)
} }
) )
@login_required
def modifier_mot_passe(request):
"""Vue pour permettre à un utilisateur de modifier son mot de passe et ses informations de profil"""
user = User.objects.get(username=request.user)
if request.method == "POST":
ancien_mdp = request.POST["ancien-mdp"]
nouveau_mdp = request.POST["nouveau-mdp"]
confirmation_mdp = request.POST["confirmation-mdp"]
if authenticate(request, username=request.user, password=ancien_mdp) is None:
messages.error(request, "Ancien mot de passe incorrect.")
elif nouveau_mdp != confirmation_mdp:
messages.error(request, "Les deux nouveaux ne correspondent pas.")
else:
user.set_password(nouveau_mdp)
user.save()
messages.success(request, "Mot de passe modifié avec succès.")
return redirect("gestion_employe:mon-profil")
def modifier_employer(request): def modifier_employer(request):
"""Vue pour permettre à un utilisateur de modifier les informations d'un employé""" """Vue pour permettre à un utilisateur de modifier les informations d'un employé"""
@@ -302,7 +286,6 @@ def creation_contrat(request):
'contrat_form': form 'contrat_form': form
}) })
@login_required @login_required
def contrats_employe(request, employe_id): def contrats_employe(request, employe_id):
@@ -341,6 +324,7 @@ def contrats_employe(request, employe_id):
"employe": employe.user.get_full_name(), "employe": employe.user.get_full_name(),
"contrats": data "contrats": data
}) })
@login_required @login_required
def enregistrer_detail_employe(request): def enregistrer_detail_employe(request):
"""Vue pour permettre à un utilisateur de modifier les détails d'un employé via une requête AJAX""" """Vue pour permettre à un utilisateur de modifier les détails d'un employé via une requête AJAX"""
@@ -379,7 +363,6 @@ def enregistrer_detail_employe(request):
else: else:
return JsonResponse({"message": "Méthode non autorisée."}, status=405) return JsonResponse({"message": "Méthode non autorisée."}, status=405)
@login_required @login_required
def liste_employe(request): def liste_employe(request):
""" Vue pour retourner la liste de tous les employés """ """ Vue pour retourner la liste de tous les employés """
@@ -509,3 +492,47 @@ def supprimer_formation(request, id_formation):
formation.delete() formation.delete()
messages.success(request, "Formation supprimée ") messages.success(request, "Formation supprimée ")
return redirect("mes_formations") return redirect("mes_formations")
@login_required
def modifier_mot_passe(request):
"""Vue pour permettre à un employé de modifier son mot de passe"""
if request.method == "POST":
username = request.user.username
ancien_mdp = request.POST.get("ancien-mdp")
nouveau_mdp = request.POST.get("nouveau-mdp")
confirmation_mdp = request.POST.get("confirmation-mdp")
try:
validate_password(nouveau_mdp, user=request.user)
except ValidationError as e:
messages.error(request, f"Erreur : {' '.join(e.messages)}")
return redirect("gestion_employe:mon-profil")
donnees = {
"username": username,
"ancien_mdp": ancien_mdp,
"nouveau_mdp": nouveau_mdp,
"confirmation_mdp": confirmation_mdp
}
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
}
response = requests.post(
"http://localhost:8000/modifier-mot-de-passe/",
json=donnees,
headers=headers
)
data = response.json()
cle = next(iter(data.keys()))
valeur = next(iter(data.values()))
if cle == "success":
messages.success(request, valeur)
else:
messages.error(request, valeur)
return redirect("gestion_employe:mon-profil")