affichage_liste_contrat_employer #41
@@ -260,4 +260,77 @@ const listeContratExpirant = new Tabulator("#listeContratExpirant", {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
ajaxURL: $("boutonContratExpirants").dataset.urlexpirants,
|
ajaxURL: $("boutonContratExpirants").dataset.urlexpirants,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let tabContrats = null;
|
||||||
|
|
||||||
|
document.getElementById("modalContratsEmploye")
|
||||||
|
.addEventListener("show.bs.modal", function () {
|
||||||
|
|
||||||
|
const employeId = document.getElementById("detail-id").value;
|
||||||
|
|
||||||
|
console.log("Employe ID :", employeId);
|
||||||
|
|
||||||
|
if (!employeId) {
|
||||||
|
alert("Aucun employé sélectionné");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(`/employé/employe/${employeId}/contrats/`)
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error("Erreur HTTP " + response.status);
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
|
||||||
|
document.getElementById("nom-employe-contrat").innerText =
|
||||||
|
data.employe;
|
||||||
|
|
||||||
|
if (tabContrats) {
|
||||||
|
tabContrats.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
tabContrats = new Tabulator(
|
||||||
|
"#table-contrats-tabulator",
|
||||||
|
{
|
||||||
|
data: data.contrats,
|
||||||
|
layout: "fitColumns",
|
||||||
|
placeholder: "Aucun contrat",
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{ title: "Numéro", field: "numero_contrat" },
|
||||||
|
{ title: "Type", field: "type_contrat" },
|
||||||
|
{ title: "Date début", field: "date_debut" },
|
||||||
|
{ title: "Date fin", field: "date_fin" },
|
||||||
|
{ title: "Salaire", field: "salaire_mensuel" },
|
||||||
|
{ title: "Statut", field: "statut" },
|
||||||
|
|
||||||
|
{
|
||||||
|
title: "Contrat",
|
||||||
|
field: "fichier",
|
||||||
|
formatter: function(cell) {
|
||||||
|
const url = cell.getValue();
|
||||||
|
|
||||||
|
if (!url) {
|
||||||
|
return "<span class='text-danger'>Aucun fichier</span>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return `<a href="${url}" target="_blank" class="btn btn-sm btn-primary">
|
||||||
|
<i class="bi bi-file-earmark-pdf"></i> Ouvrir
|
||||||
|
</a>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error("Erreur :", error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ enregistrerProfil.addEventListener("click", (e) => {
|
|||||||
const csrftoken = document.querySelector("[name='csrfmiddlewaretoken']").value;
|
const csrftoken = document.querySelector("[name='csrfmiddlewaretoken']").value;
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
|
||||||
formData.append("nom", $("nom").value);
|
formData.append("nom", $("nom").value);
|
||||||
formData.append("prenom", $("prenom").value);
|
formData.append("prenom", $("prenom").value);
|
||||||
formData.append("email", $("email").value);
|
formData.append("email", $("email").value);
|
||||||
@@ -32,6 +31,10 @@ enregistrerProfil.addEventListener("click", (e) => {
|
|||||||
formData.append("adresse", $("adresse").value);
|
formData.append("adresse", $("adresse").value);
|
||||||
formData.append("sexe", $("sexe").value);
|
formData.append("sexe", $("sexe").value);
|
||||||
formData.append("date_naissance", $("date_naissance").value);
|
formData.append("date_naissance", $("date_naissance").value);
|
||||||
|
const photoInput = $("photo");
|
||||||
|
if (photoInput.files.length > 0) {
|
||||||
|
formData.append("photo", photoInput.files[0]);
|
||||||
|
}
|
||||||
|
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|||||||
@@ -58,6 +58,7 @@
|
|||||||
{% block 'modal' %}
|
{% block 'modal' %}
|
||||||
{% include "gestion_employe/parts/modalDetailEmploye.html" %}
|
{% include "gestion_employe/parts/modalDetailEmploye.html" %}
|
||||||
{% include "gestion_employe/parts/modalCreationContrat.html" %}
|
{% include "gestion_employe/parts/modalCreationContrat.html" %}
|
||||||
|
{% include "gestion_employe/parts/modalContratsEmploye.html" %}
|
||||||
{% include "gestion_employe/parts/modalAffectationProjet.html" %}
|
{% include "gestion_employe/parts/modalAffectationProjet.html" %}
|
||||||
{% include "gestion_employe/parts/modalDocument.html" %}
|
{% include "gestion_employe/parts/modalDocument.html" %}
|
||||||
{% include "gestion_employe/parts/modalListeContratExpirants.html" %}
|
{% include "gestion_employe/parts/modalListeContratExpirants.html" %}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<div class="modal fade" id="modalContratsEmploye" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-xl">
|
||||||
|
<div class="modal-content">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
Contrats de <span id="nom-employe-contrat"></span>
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div id="table-contrats-tabulator"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -93,8 +93,8 @@
|
|||||||
</h5>
|
</h5>
|
||||||
{% if user|has_group:"ressource_humaine" %}
|
{% if user|has_group:"ressource_humaine" %}
|
||||||
<div>
|
<div>
|
||||||
<button class="btn btn-secondary" disabled>
|
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#modalContratsEmploye">
|
||||||
<i class="bi bi-file-earmark-lock"></i> Contrat actif
|
Liste contrat
|
||||||
</button>
|
</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
|
||||||
|
|||||||
@@ -29,11 +29,17 @@ urlpatterns = [
|
|||||||
views.creation_contrat,
|
views.creation_contrat,
|
||||||
name='creation-contrat'
|
name='creation-contrat'
|
||||||
),
|
),
|
||||||
|
path(
|
||||||
|
'employe/<int:employe_id>/contrats/'
|
||||||
|
, views.contrats_employe,
|
||||||
|
name="contrats-employe"
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
'contrat/supprimer/',
|
'contrat/supprimer/',
|
||||||
views.suppression_contrat,
|
views.suppression_contrat,
|
||||||
name='supprimer-contrat'
|
name='supprimer-contrat'
|
||||||
),
|
),
|
||||||
|
|
||||||
path(
|
path(
|
||||||
'Affectation/affectation/',
|
'Affectation/affectation/',
|
||||||
views.affecter_employe_projet,
|
views.affecter_employe_projet,
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ def modifier_employer(request):
|
|||||||
except Employe.DoesNotExist:
|
except Employe.DoesNotExist:
|
||||||
return JsonResponse({"message": "Employé non trouvé."})
|
return JsonResponse({"message": "Employé non trouvé."})
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
data = json.loads(request.body)
|
data = request.POST
|
||||||
user = User.objects.get(username=request.user)
|
user = User.objects.get(username=request.user)
|
||||||
user.last_name = data['nom']
|
user.last_name = data['nom']
|
||||||
user.first_name = data['prenom']
|
user.first_name = data['prenom']
|
||||||
@@ -289,6 +289,45 @@ def creation_contrat(request):
|
|||||||
'contrat_form': form
|
'contrat_form': form
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def contrats_employe(request, employe_id):
|
||||||
|
|
||||||
|
try:
|
||||||
|
employe = Employe.objects.get(id=employe_id)
|
||||||
|
except Employe.DoesNotExist:
|
||||||
|
return JsonResponse(
|
||||||
|
{"error": "Employé non trouvé"},
|
||||||
|
status=404
|
||||||
|
)
|
||||||
|
|
||||||
|
contrats = Contrat.objects.filter(
|
||||||
|
employe=employe
|
||||||
|
).order_by("-date_debut")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
{
|
||||||
|
"id": contrat.id,
|
||||||
|
"numero_contrat": contrat.numero_contrat,
|
||||||
|
"type_contrat": dict(Contrat.TYPE_CONTRAT).get(
|
||||||
|
contrat.type_contrat
|
||||||
|
),
|
||||||
|
"date_debut": contrat.date_debut.strftime("%Y-%m-%d"),
|
||||||
|
"date_fin": contrat.date_fin.strftime("%Y-%m-%d") if contrat.date_fin else "",
|
||||||
|
"salaire_mensuel": contrat.salaire_mensuel,
|
||||||
|
"statut": dict(Contrat.STATUT_CONTRAT).get(
|
||||||
|
contrat.statut
|
||||||
|
),
|
||||||
|
"fichier": contrat.fichier_contrat.url if contrat.fichier_contrat else "",
|
||||||
|
|
||||||
|
}
|
||||||
|
for contrat in contrats
|
||||||
|
]
|
||||||
|
|
||||||
|
return JsonResponse({
|
||||||
|
"employe": employe.user.get_full_name(),
|
||||||
|
"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"""
|
||||||
@@ -307,6 +346,7 @@ 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 """
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ const calendrier = Schedule(document.getElementById('planning-reservation'), {
|
|||||||
$("employe").value=data.employe;
|
$("employe").value=data.employe;
|
||||||
$("salle").value=data.salle;
|
$("salle").value=data.salle;
|
||||||
$("statut-reservation").innerHTML=data.statut;
|
$("statut-reservation").innerHTML=data.statut;
|
||||||
$("date_evenement").value=data.date_evenement;
|
$("date_debut").value=data.date_debut;
|
||||||
|
$("date_fin").value=data.date_fin;
|
||||||
$("heure_debut").value=data.heure_debut;
|
$("heure_debut").value=data.heure_debut;
|
||||||
$("heure_fin").value=data.heure_fin;
|
$("heure_fin").value=data.heure_fin;
|
||||||
$("motif_reservation").value=data.motif_reservation;
|
$("motif_reservation").value=data.motif_reservation;
|
||||||
|
|||||||
@@ -153,7 +153,8 @@ def detail_reservation(request:HttpRequest, reservation_id:int):
|
|||||||
'employe': f"{employe.first_name} {employe.last_name}",
|
'employe': f"{employe.first_name} {employe.last_name}",
|
||||||
'salle': reservation.salle,
|
'salle': reservation.salle,
|
||||||
'statut': dict(Reservation.STATUT).get(reservation.statut),
|
'statut': dict(Reservation.STATUT).get(reservation.statut),
|
||||||
'date_evenement': reservation.date_debut.strftime('%Y-%m-%d'),
|
'date_debut': reservation.date_debut.strftime('%Y-%m-%d'),
|
||||||
|
'date_fin': reservation.date_fin.strftime('%Y-%m-%d'),
|
||||||
'heure_debut': reservation.heure_debut.strftime('%H:%M'),
|
'heure_debut': reservation.heure_debut.strftime('%H:%M'),
|
||||||
'heure_fin': reservation.heure_fin.strftime('%H:%M'),
|
'heure_fin': reservation.heure_fin.strftime('%H:%M'),
|
||||||
'motif_reservation': reservation.motif_reservation,
|
'motif_reservation': reservation.motif_reservation,
|
||||||
|
|||||||
Reference in New Issue
Block a user