Ajout de la barre de navigation
This commit is contained in:
Binary file not shown.
@@ -12,8 +12,6 @@ class SIRHClient(Client):
|
|||||||
"""Crée le User et son Profile avec les infos reçues du serveur."""
|
"""Crée le User et son Profile avec les infos reçues du serveur."""
|
||||||
user_data_copy = user_data.copy()
|
user_data_copy = user_data.copy()
|
||||||
|
|
||||||
print("Un petit test", user_data_copy)
|
|
||||||
|
|
||||||
user_data.pop("departement", None)
|
user_data.pop("departement", None)
|
||||||
user_data.pop("chef_departement", None)
|
user_data.pop("chef_departement", None)
|
||||||
user_data.pop("groups", None)
|
user_data.pop("groups", None)
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row flex-nowrap">
|
|
||||||
{% include 'parts/menu_application.html' %}
|
{% include 'parts/menu_application.html' %}
|
||||||
|
<div class="row flex-nowrap">
|
||||||
{% include 'parts/menu_principal.html' %}
|
{% include 'parts/menu_principal.html' %}
|
||||||
<div class="col p-4">
|
<div class="col p-4">
|
||||||
{% block 'contenu' %} {% endblock %}
|
{% block 'contenu' %} {% endblock %}
|
||||||
|
|||||||
@@ -1,8 +1,21 @@
|
|||||||
<div class="col-1 bg-danger border d-flex flex-column vh-100 pt-5 sticky-top">
|
{% load static %}
|
||||||
<a href="{{ SIRH_LIEN }}" class="text-white text-center fw-bold text-decoration-none mb-4" style="font-size:1.4em">
|
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
||||||
<i class="bi bi-people-fill fs-1 d-block"></i>SIRH
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="#">
|
||||||
|
<img src="{% static 'img/cerfig.jpg' %}" alt="Logo" width="85" height="30" class="d-inline-block align-text-top">
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ SGL_LIEN }}" class="text-white text-center fw-bold text-decoration-none mb-4" style="font-size:1.4em">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<i class="bi bi-building-gear fs-1 d-block"></i> SGL
|
<span class="navbar-toggler-icon"></span>
|
||||||
</a>
|
</button>
|
||||||
</div>
|
<div class="collapse navbar-collapse" id="navbarNav">
|
||||||
|
<ul class="nav nav-tabs justify-content-end w-100">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" aria-current="page" href="{{ SIRH_LIEN }}">SIRH</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="{{ SGL_LIEN }}">SGL</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
Binary file not shown.
@@ -1,3 +1,5 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
from django.core.mail import send_mail
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from gestion_conge.models import Conge
|
from gestion_conge.models import Conge
|
||||||
@@ -46,3 +48,14 @@ def destinataire_mail_demande_conges(employe):
|
|||||||
if employe.departement:
|
if employe.departement:
|
||||||
chefs_departement = Employe.objects.filter(departement=employe.departement, chef=True)
|
chefs_departement = Employe.objects.filter(departement=employe.departement, chef=True)
|
||||||
return list(chefs_departement.values_list('user__email', flat=True))
|
return list(chefs_departement.values_list('user__email', flat=True))
|
||||||
|
|
||||||
|
def envoyer_mail(sujet, message, destinataires):
|
||||||
|
"""Fonction d'envoi de mail"""
|
||||||
|
|
||||||
|
send_mail(
|
||||||
|
sujet,
|
||||||
|
message,
|
||||||
|
settings.EMAIL_HOST_USER,
|
||||||
|
destinataires,
|
||||||
|
fail_silently=False,
|
||||||
|
)
|
||||||
|
|||||||
Binary file not shown.
@@ -129,7 +129,7 @@ def demander_conge(request):
|
|||||||
fonctions_utilitaire.envoyer_mail(
|
fonctions_utilitaire.envoyer_mail(
|
||||||
sujet = "Demande de congé",
|
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.""",
|
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]
|
destinataires = fonctions_utilitaire.destinataire_mail_demande_conges(employe)
|
||||||
)
|
)
|
||||||
|
|
||||||
return redirect("gestion_conges:conge")
|
return redirect("gestion_conges:conge")
|
||||||
|
|||||||
Binary file not shown.
@@ -13,6 +13,10 @@ const tableau_certificat = new Tabulator("#tableau-certificat", {
|
|||||||
inputFormat:"yyyy-MM-dd",
|
inputFormat:"yyyy-MM-dd",
|
||||||
outputFormat:"dd/MM/yy",
|
outputFormat:"dd/MM/yy",
|
||||||
}},
|
}},
|
||||||
|
{"title": "Fichier", "field": "certificat", formatter:"link", formatterParams:{
|
||||||
|
label:"Voir le fichier",
|
||||||
|
target:"_blank",
|
||||||
|
}},
|
||||||
],
|
],
|
||||||
ajaxURL: url_certificat,
|
ajaxURL: url_certificat,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</h5>
|
</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" id="modalDetailEmployeBody" data-url="{% url 'gestion_employe:enregistrer-detail-employe' %}" data-url-departements="{% url 'gestion_employe:liste-departements' %}">
|
<div class="modal-body" id="modalDetailEmployeBody">
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<input type="hidden" id="detail-id">
|
<input type="hidden" id="detail-id">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
@@ -98,9 +98,6 @@
|
|||||||
</h5>
|
</h5>
|
||||||
{% if user|has_group:"ressource_humaine" %}
|
{% if user|has_group:"ressource_humaine" %}
|
||||||
<div>
|
<div>
|
||||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modalContratsEmploye">
|
|
||||||
Liste contrat
|
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalContrat{{ item.employe.id }}">
|
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalContrat{{ item.employe.id }}">
|
||||||
<i class="bi bi-file-earmark-text"></i> Créer contrat
|
<i class="bi bi-file-earmark-text"></i> Créer contrat
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -147,15 +147,6 @@ def mon_profil(request):
|
|||||||
date_fin_daffectation__gte=timezone.now().date()
|
date_fin_daffectation__gte=timezone.now().date()
|
||||||
).select_related('projet')
|
).select_related('projet')
|
||||||
|
|
||||||
has_contrat = contrats is not None
|
|
||||||
expiration_contrat = False
|
|
||||||
contrat_nb_jours_restant = None
|
|
||||||
|
|
||||||
if contrats:
|
|
||||||
nb_jours = contrats.nombre_jours_restant
|
|
||||||
contrat_nb_jours_restant = nb_jours
|
|
||||||
expiration_contrat = nb_jours <= fonctions_utilitaire.DUREE_FIN_CONTRAT
|
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
'gestion_employe/monprofil.html',
|
'gestion_employe/monprofil.html',
|
||||||
@@ -180,9 +171,9 @@ def mon_profil(request):
|
|||||||
],
|
],
|
||||||
|
|
||||||
"formation_form": FormationForm(),
|
"formation_form": FormationForm(),
|
||||||
"has_contrat": has_contrat,
|
"has_contrat": contrats is not None,
|
||||||
"expiration_contrat": expiration_contrat,
|
"expiration_contrat": contrats.nombre_jours_restant <= fonctions_utilitaire.DUREE_FIN_CONTRAT if contrats else False,
|
||||||
"contrat_nb_jours_restant": contrat_nb_jours_restant
|
"contrat_nb_jours_restant": max(0, contrats.nombre_jours_restant if contrats else 0)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@login_required
|
@login_required
|
||||||
@@ -232,7 +223,6 @@ def modifier_employer(request):
|
|||||||
messages.success(request, "Profil mis à jour avec succès.")
|
messages.success(request, "Profil mis à jour avec succès.")
|
||||||
return redirect("gestion_employe:mon-profil")
|
return redirect("gestion_employe:mon-profil")
|
||||||
|
|
||||||
|
|
||||||
def enregistrement_document(request):
|
def enregistrement_document(request):
|
||||||
"""Vue pour permettre à un utilisateur de télécharger et enregistrer des documents liés à son profil"""
|
"""Vue pour permettre à un utilisateur de télécharger et enregistrer des documents liés à son profil"""
|
||||||
employe = Employe.objects.get(user=request.user)
|
employe = Employe.objects.get(user=request.user)
|
||||||
|
|||||||
Binary file not shown.
@@ -1,8 +1,6 @@
|
|||||||
const btnEnregistrerBailleur = document.getElementById('btnEnregistrerBailleur');
|
const btnEnregistrerBailleur = document.getElementById('btnEnregistrerBailleur');
|
||||||
let table;
|
let table;
|
||||||
|
|
||||||
let table;
|
|
||||||
|
|
||||||
btnEnregistrerBailleur.addEventListener('click', function() {
|
btnEnregistrerBailleur.addEventListener('click', function() {
|
||||||
const form = document.getElementById('formBailleur');
|
const form = document.getElementById('formBailleur');
|
||||||
const formData = new FormData(form);
|
const formData = new FormData(form);
|
||||||
|
|||||||
Binary file not shown.
@@ -188,6 +188,7 @@ tableau_reservation_attente.on("rowClick", (row, rowData) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const id_user = $("current-user-id").dataset.userid;
|
const id_user = $("current-user-id").dataset.userid;
|
||||||
|
|
||||||
$("id_reservation_detail").value = data.id;
|
$("id_reservation_detail").value = data.id;
|
||||||
$("id_reservation_refus").value = data.id;
|
$("id_reservation_refus").value = data.id;
|
||||||
$("id_reservation_zoom").value = data.id;
|
$("id_reservation_zoom").value = data.id;
|
||||||
@@ -204,6 +205,16 @@ tableau_reservation_attente.on("rowClick", (row, rowData) => {
|
|||||||
$("besoin_ordinateur").checked=data.besoin_ordi;
|
$("besoin_ordinateur").checked=data.besoin_ordi;
|
||||||
$("lien_zoom").value=data.lien_zoom;
|
$("lien_zoom").value=data.lien_zoom;
|
||||||
|
|
||||||
|
console.log("Verification de data :", data);
|
||||||
|
|
||||||
|
const refuserReservation = document.querySelector("#refuserReservation");
|
||||||
|
const bouton_valider = document.querySelector("#bouton-valider");
|
||||||
|
|
||||||
|
if((refuserReservation | bouton_valider) && data.statut === "En attente"){
|
||||||
|
refuserReservation.style.display = "inline-block";
|
||||||
|
bouton_valider.style.display = "inline-block";
|
||||||
|
}
|
||||||
|
|
||||||
if (id_user != data.employe_id){
|
if (id_user != data.employe_id){
|
||||||
$("bouton-annuler").className = "d-none";
|
$("bouton-annuler").className = "d-none";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form method="POST" data-urlannuler="{% url 'gestion_salle:annuler-reservation' %}" data-urlvalider="{% url 'gestion_salle:valider-reservation' %}" id="formulaire-details">
|
<form method="POST" data-urlannuler="{% url 'gestion_salle:annuler-reservation' %}" data-urlvalider="{% url 'gestion_salle:valider-reservation' %}" id="formulaire-details">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type='' class="form-control" id="id_reservation_detail" name='id_reservation'>
|
<input type='' class="form-control" id="id_reservation_detail" name='id_reservation' hidden>
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
<label>Employé :</label>
|
<label>Employé :</label>
|
||||||
<input class="form-control" id="employe" readonly>
|
<input class="form-control" id="employe" readonly>
|
||||||
@@ -50,14 +50,14 @@
|
|||||||
<input type="url" class="form-control" id="lien_zoom" readonly >
|
<input type="url" class="form-control" id="lien_zoom" readonly >
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check mb-2">
|
<div class="form-check mb-2">
|
||||||
<label class="form-check-label">Besoin d'un ordinateur</label>
|
<label class="form-check-label">Besoin d'un ordinateur {{ reservation.statut }}</label>
|
||||||
<input type="checkbox" class="form-check-input" id="besoin_ordinateur" readonly >
|
<input type="checkbox" class="form-check-input" id="besoin_ordinateur" readonly >
|
||||||
</div>
|
</div>
|
||||||
<div class='d-flex justify-content-around mt-2'>
|
<div class='d-flex justify-content-around mt-2'>
|
||||||
{% if appartient_au_departement_informatique %}
|
{% if appartient_au_departement_informatique %}
|
||||||
<button class="btn btn-primary" id="ajoutZoom">Ajout du lien zoom</button>
|
<button class="btn btn-primary" id="ajoutZoom">Ajout du lien zoom</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if appartient_direction and reservation.statut == "en_attente" %}
|
{% if appartient_direction %}
|
||||||
<button class="btn btn-danger" id="refuserReservation" data-lienrefus="{% url 'gestion_salle:refuser-reservation' %}">Refuser</button>
|
<button class="btn btn-danger" id="refuserReservation" data-lienrefus="{% url 'gestion_salle:refuser-reservation' %}">Refuser</button>
|
||||||
<button class="btn btn-success" id="bouton-valider">Valider</button>
|
<button class="btn btn-success" id="bouton-valider">Valider</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -87,8 +87,6 @@ Veuillez vous connecter à la plateforme pour plus de détails.""",
|
|||||||
formulaire_reservation = ReservationForm()
|
formulaire_reservation = ReservationForm()
|
||||||
departement = employe.departement
|
departement = employe.departement
|
||||||
|
|
||||||
appartient_direction = request.user.groups.filter(name='direction').exists()
|
|
||||||
|
|
||||||
liste_demande_reservation = Reservation.objects.filter(
|
liste_demande_reservation = Reservation.objects.filter(
|
||||||
employe=employe,
|
employe=employe,
|
||||||
statut='en_attente'
|
statut='en_attente'
|
||||||
@@ -98,7 +96,7 @@ Veuillez vous connecter à la plateforme pour plus de détails.""",
|
|||||||
'formulaire_reservation': formulaire_reservation,
|
'formulaire_reservation': formulaire_reservation,
|
||||||
'nb_reservation_attente': Reservation.objects.filter(statut='en_attente').count(),
|
'nb_reservation_attente': Reservation.objects.filter(statut='en_attente').count(),
|
||||||
'appartient_au_departement_informatique': departement and departement.nom == "Systeme informatique",
|
'appartient_au_departement_informatique': departement and departement.nom == "Systeme informatique",
|
||||||
'appartient_direction': appartient_direction,
|
'appartient_direction': request.user.groups.filter(name='direction').exists(),
|
||||||
'liste_demande_reservation': list(liste_demande_reservation),
|
'liste_demande_reservation': list(liste_demande_reservation),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,12 +145,10 @@ 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,
|
||||||
@@ -227,7 +223,7 @@ def valider_reservation(request: HttpRequest):
|
|||||||
|
|
||||||
fonctions_utilitaire.envoyer_mail(
|
fonctions_utilitaire.envoyer_mail(
|
||||||
sujet = "Reservation de salle",
|
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.""",
|
message = f"""Bonjour {reservation.employe.user.first_name} {reservation.employe.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]
|
destinataires = [reservation.employe.user.email]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user