diff --git a/gestion_conge/views.py b/gestion_conge/views.py index 0b92e84..c5d0402 100644 --- a/gestion_conge/views.py +++ b/gestion_conge/views.py @@ -129,66 +129,69 @@ def demander_conge(request): @login_required def liste_demande_conges(request): - """Vue de liste des demandes de congés en attente de validation selon le statut de l'utilisateur actuel""" + try: - employe = Employe.objects.get(user__username = request.user) + employe = Employe.objects.get(user=request.user) except Employe.DoesNotExist: return JsonResponse({ "success": False, - "message": "Votre profil Utilisateur n'est lié à aucun profil Employé. Veuillez contacter l'administrateur." + "message": "Profil employé introuvable" }) - try: - affectation = Affectation.objects.get( - employe=employe, - date_fin_daffectation__gte=timezone.now().date() - ) - except Affectation.DoesNotExist: - affectation = None + affectation = Affectation.objects.filter( + employe=employe, + date_fin_daffectation__gte=timezone.now().date() + ).first() + + is_direction = employe.user.groups.filter(name='direction').exists() if employe.chef: - print("chef") - conges_en_attente = Conge.objects.filter( - employe__departement = employe.departement, - validation_hierarchique = None + + conges = Conge.objects.filter( + Q(employe__departement=employe.departement) | + Q(employe=employe) ).order_by('-date_demande') elif affectation and affectation.role == "chef_projet": + employes_du_projet = Affectation.objects.filter( - projet = affectation.projet, - date_fin_daffectation__gte = timezone.now().date() - ).values('employe') + projet=affectation.projet, + date_fin_daffectation__gte=timezone.now().date() + ).values_list('employe', flat=True) - conges_en_attente = Conge.objects.filter( - employe__in = employes_du_projet, - validation_hierarchique = None + conges = Conge.objects.filter( + Q(employe__in=employes_du_projet) | + Q(employe=employe) ).order_by('-date_demande') - elif 'direction' in employe.user.groups.values_list('name', flat=True): - conges_en_attente = Conge.objects.filter( - validation_hierarchique = True, - validation_direction = None - ).order_by('-date_demande') + + elif is_direction: + + conges = Conge.objects.filter( + Q(validation_hierarchique=True) | + Q(employe__user__groups__name='direction') + ).distinct().order_by('-date_demande') else: - conges_en_attente = Conge.objects.filter( - employe__user__username = request.user + + conges = Conge.objects.filter( + employe=employe ).order_by('-date_demande') return JsonResponse({ "success": True, - "data":[ - { - **model_to_dict(conge), - "prenom_nom": f"{conge.employe.user.first_name} {conge.employe.user.last_name}", - "date_demande": conge.date_demande, - "nombre_jours": conge.nombre_jours, - "type": dict(conge.TYPE_CHOICES).get(conge.type), - "solde_conge": fonctions_utilitaire.solde_conge(conge.employe)["quota_annuel"] - } - for conge in conges_en_attente]}, - safe=False - ) + "data": [ + { + **model_to_dict(conge), + "prenom_nom": f"{conge.employe.user.first_name} {conge.employe.user.last_name}", + "date_demande": conge.date_demande, + "nombre_jours": conge.nombre_jours, + "type": dict(conge.TYPE_CHOICES).get(conge.type), + "solde_conge": fonctions_utilitaire.solde_conge(conge.employe)["quota_annuel"] + } + for conge in conges + ] + }) @login_required def validation_de_conge(request):