Bug : Affichage des demandes de conges

This commit is contained in:
2026-04-30 13:28:53 +02:00
committed by Soriba SYLLA
parent 472774d78c
commit 0936d6ad02
241 changed files with 16 additions and 41786 deletions

View File

@@ -1,3 +0,0 @@
from django.contrib import admin
# Register your models here.

View File

@@ -1,6 +0,0 @@
from django.apps import AppConfig
class GestionCongeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'gestion_conge'

View File

@@ -1,17 +0,0 @@
from django import forms
from .models import Conge
class CongeForm(forms.ModelForm):
"""Formulaire de demande de congé."""
class Meta:
model = Conge
fields =['type', 'date_debut', 'date_fin']
widgets = {
'date_debut': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
'date_fin': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
'type': forms.Select(attrs={'class': 'form-select'}),
}
labels = {
'nombre_jours':'Nombre de jours',
}

View File

@@ -1,75 +0,0 @@
const bouton_enregistrer_detail = document.getElementById("bouton-enregistrer-detail-conge");
if(bouton_enregistrer_detail){
bouton_enregistrer_detail.addEventListener("click", () => {
const form = document.getElementById("form-detail-conge");
const csrftoken = new FormData(form).get("csrfmiddlewaretoken");
const actionUrl = form.action;
const id_conge = document.getElementById("id_conge").value;
const validation_hierarchique_input = document.querySelector('input[name="validation_hierarchique"]:checked');
const validation_hierarchique = validation_hierarchique_input ? validation_hierarchique_input.value : null;
const validation_direction_input = document.querySelector('input[name="validation_direction"]:checked');
const validation_direction = validation_direction_input ? validation_direction_input.value : null;
const motif_refus = document.getElementById("motif_refus").value;
fetch(actionUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRFToken": csrftoken
},
body: JSON.stringify({
id_conge,
validation_hierarchique,
validation_direction,
motif_refus
})
})
.then(response => response.json())
.then(data => {
alert(data.message);
navigation.reload();
});
})
}
if(document.getElementById("validation_hierarchique_refuse")){
document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){
if(this.checked){
alert("coucou");
document.getElementById("motif_refus_container").className="d-block form-group mt-3";
}else{
document.getElementById("motif_refus_container").className="d-none";
}
})
}
if(document.getElementById("validation_hierarchique_refuse")){
document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){
if(this.checked){
document.getElementById("motif_refus_container").className="d-block form-group mt-3";
}else{
document.getElementById("motif_refus_container").className="d-none";
}
})
}
if(document.getElementById("validation_hierarchique_valide")){
document.getElementById("validation_hierarchique_valide").addEventListener('click', function(){
if(this.checked){
document.getElementById("motif_refus_container").className="d-none";
}else{
document.getElementById("motif_refus_container").className="d-block form-group mt-3";
}
})
}
if(document.getElementById("validation_direction_valide")){
document.getElementById("validation_direction_valide").addEventListener('click', function(){
if(this.checked){
document.getElementById("motif_refus_container").className="d-block form-group mt-3";
}else{
document.getElementById("motif_refus_container").className="d-none";
}
})
}

View File

@@ -1,26 +0,0 @@
<div class="modal fade" id="modalDemandeConge" tabindex="-1" aria-labelledby="modalDemandeCongeLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header bg-orange-dark">
<h5 class="modal-title" id="modalDemandeCongeLabel">
<i class="bi bi-calendar-plus me-2"></i> Nouvelle demande de congé
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button>
</div>
<div class="modal-body">
<form method="post" action="{% url 'gestion_conges:demande-conge' %}" enctype="multipart/form-data">
{% csrf_token %}
{{ formulaire_demande_conge.as_p }}
<div class="modal-footer">
<button type="submit" class="btn btn-success">
<i class="bi bi-send"></i> Soumettre
</button>
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
<i class="bi bi-x-circle"></i> Annuler
</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -1,92 +0,0 @@
<div class="modal fade" id="detailsCongeModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-orange-dark">
<h5 class="modal-title">Détails de la demande de congés</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form method="post" id="form-detail-conge" action="{% url 'gestion_conges:validation-des-conges' %}">
{% csrf_token %}
<input type="hidden" id="id_conge" value="">
<div class="form-group mb-2">
<label for="motif_refus">Employé :</label>
<input type="text" class="form-control" id="employe" value="" readonly>
</div>
<div class="form-group mb-2">
<label for="type_conge">Type de congé :</label>
<select class="form-select" id="type_conge" readonly>
{% comment %} <option value="maladie">Maladie</option> {% endcomment %}
<option value="Conge Annuel">Conge Annuel</option>
{% comment %} <option value="conge_maternite">Conge Maternité</option> {% endcomment %}
{% comment %} <option value="conge_mariage">Conge Mariage</option>
<option value="conge_naissance">Conge Naissance</option>
<option value="conge_deces_proche">Conge de décès d'un proche</option>
<option value="conge_mariage_proche">Conge de mariage d'un proche</option>
<option value="autre">Autre</option> {% endcomment %}
</select>
</div>
<div class="form-group mb-2">
<label for="date_debut">Date début :</label>
<input type="date" class="form-control" id="date_debut" value="" readonly>
</div>
<div class="form-group mb-2">
<label for="date_fin">Date fin :</label>
<input type="date" class="form-control" id="date_fin" value="" readonly>
</div>
<div class="form-group mb-2">
<label for="nombre_jours">Nombre de jours :</label>
<input type="number" class="form-control" id="nombre_jours" value="" readonly>
</div>
<div class="form-group mb-2">
<label for="solde_restant">Solde restant :</label>
<input type="number" class="form-control" id="solde_restant" value="" readonly>
</div>
<div class="form-group mb-2">
<label for="date_demande">Date de la demande :</label>
<input type="text" class="form-control" id="date_demande" value="" readonly>
</div>
{% if employe_est_il_chef or est_chef_projet %}
<hr>
<h5 class="text-center">Validation par le supérieur hiérarchique</h5>
<div class="d-flex align-items-center justify-content-center mb-2">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="validation_hierarchique" id="validation_hierarchique_valide" value="valide">
<label class="form-check-label" for="validation_hierarchique_valide">Valide</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="validation_hierarchique" id="validation_hierarchique_refuse" value="refuse" {% if conge.validation_hierarchique == False %}checked{% endif %}>
<label class="form-check-label" for="validation_hierarchique_refuse">Refusé</label>
</div>
</div>
{% endif %}
{% if membre_de_la_direction %}
<hr>
<h5 class="text-center">Validation par le directeur</h5>
<div class="d-flex align-items-center justify-content-center mb-2">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="validation_direction" id="validation_direction_valide" value="valide" {% if conge.validation_direction == True %}checked{% endif %}>
<label class="form-check-label" for="validation_direction_valide">Valide</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="validation_direction" id="validation_direction_refuse" value="refuse" {% if conge.validation_direction == False %}checked{% endif %}>
<label class="form-check-label" for="validation_direction_refuse">Refusé</label>
</div>
</div>
{% endif %}
<hr>
<div class="d-none form-group mt-3" id="motif_refus_container">
<label for="motif_refus">Motif de refus (si applicable) :</label>
<textarea class="form-control" id="motif_refus" rows="3"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button>
{% if employe_est_il_chef or membre_de_la_direction or est_chef_projet %}
<button type="button" class="btn btn-success" id="bouton-enregistrer-detail-conge">Enregistrer</button>
{% endif %}
</div>
</div>
</div>
</div>

View File

@@ -1,48 +0,0 @@
{% for conge in conges %}
<div class="modal fade" id="modifierCongeModal{{ conge.id }}" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form method="post">
{% csrf_token %}
<input type="hidden" name="conge_id" value="{{ conge.id }}">
<div class="modal-header bg-orange-dark">
<h5 class="modal-title">Modifier la demande de congé</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="mb-2">
<label>Type de congé</label>
<select name="type" class="form-select">
<option value="Conge Annuel" {% if conge.type == "Conge Annuel" %}selected{% endif %}>Conge Annuel</option>
<option value="Maladie" {% if conge.type == "Maladie" %}selected{% endif %}>Maladie</option>
<option value="Conge maternité" {% if conge.type == "Conge maternité" %}selected{% endif %}>Conge Maternité</option>
<option value="Conge de Mariage" {% if conge.type == "Conge de Mariage" %}selected{% endif %}>Conge Mariage</option>
<option value="conge de naissance" {% if conge.type == "conge de naissance" %}selected{% endif %}>Conge de Naissance</option>
<option value="conge de deces dun proche" {% if conge.type == "conge de deces dun proche" %}selected{% endif %}>Conge de décès d'un proche</option>
<option value="conge de mariage dun proche" {% if conge.type == "conge de mariage dun proche" %}selected{% endif %}>Conge de mariage d'un proche</option>
<option value="conge pour evenements familiaux" {% if conge.type == "conge pour evenements familiaux" %}selected{% endif %}>Conge pour événements familiaux</option>
<option value="Autre" {% if conge.type == "Autre" %}selected{% endif %}>Autre</option>
</select>
</div>
<div class="mb-2">
<label>Nombre de jours</label>
<input type="number" name="nombre_jours" class="form-control" value="{{ conge.nombre_jours }}">
</div>
<div class="mb-2">
<label>Date début</label>
<input type="date" name="date_debut" class="form-control" value="{{ conge.date_debut|date:'Y-m-d' }}">
</div>
<div class="mb-2">
<label>Date fin</label>
<input type="date" name="date_fin" class="form-control" value="{{ conge.date_fin|date:'Y-m-d' }}">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn bg-orange-dark">Enregistrer</button>
</div>
</form>
</div>
</div>
</div>
{% endfor %}

View File

@@ -1,24 +0,0 @@
<div class="modal fade" id="modalRefuserGlobal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST" id="formRefuser">
{% csrf_token %}
<div class="modal-header bg-orange-dark">
<h5 class="modal-title">Refuser la demande</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p id="texteConge"></p>
<div class="mb-3">
<label class="form-label">Motif du refus</label>
{{ form.motif_refus }}
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">Refuser</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
</div>
</form>
</div>
</div>
</div>

View File

@@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@@ -1,27 +0,0 @@
from django.urls import path
from . import views
app_name = "gestion_conges"
urlpatterns = [
path(
'',
views.index,
name='conge'
),
path(
'demande_conge/',
views.demander_conge,
name='demande-conge'
),
path(
'liste-des-conges/',
views.liste_demande_conges,
name='liste-des-conges'
),
path(
'validation-des-conges/',
views.validation_de_conge,
name='validation-des-conges'
),
]