Création à la volée des évaluations à chaque fois qu'on affiche la liste
[auf_rh_dae.git] / project / recrutement / admin.py
index 81f954b..c2b14aa 100644 (file)
@@ -19,6 +19,7 @@ from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
 
 from project import groups
+from project.permissions import get_user_groupnames
 
 from project.rh import models as rh
 from project.recrutement.forms import OffreEmploiForm
@@ -113,7 +114,7 @@ class OffreEmploiAdminMixin(BaseAdmin):
     def get_form(self, request, obj=None, **kwargs):
         form = super(OffreEmploiAdminMixin, self).get_form(request, obj, **kwargs)
         employe = groups.get_employe_from_user(request.user)
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
 
         # Region
         region_field = None
@@ -168,7 +169,7 @@ class OffreEmploiAdminMixin(BaseAdmin):
     def queryset(self, request):
         qs = self.model._default_manager.get_query_set() \
                 .select_related('offre_emploi')
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if groups.DRH_NIVEAU_1 in user_groupes or \
             groups.DRH_NIVEAU_2 in user_groupes or \
             groups.HAUTE_DIRECTION in user_groupes:
@@ -194,7 +195,7 @@ class OffreEmploiAdminMixin(BaseAdmin):
 
     ### Permission add, delete, change
     def has_add_permission(self, request):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.DRH_NIVEAU_1 in user_groupes or \
             groups.DRH_NIVEAU_2 in user_groupes or \
@@ -205,7 +206,7 @@ class OffreEmploiAdminMixin(BaseAdmin):
         return False
 
     def has_delete_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.DRH_NIVEAU_1 in user_groupes or \
             groups.DRH_NIVEAU_2 in user_groupes or \
@@ -222,7 +223,7 @@ class OffreEmploiAdminMixin(BaseAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.DRH_NIVEAU_1 in user_groupes or \
             groups.DRH_NIVEAU_2 in user_groupes or \
@@ -499,7 +500,7 @@ class CandidatAdminMixin(BaseAdmin, ExportAdmin):
 
     ### Permissions add, delete, change
     def has_add_permission(self, request):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.CORRESPONDANT_RH in user_groupes or \
             groups.DRH_NIVEAU_1 in user_groupes or \
@@ -511,7 +512,7 @@ class CandidatAdminMixin(BaseAdmin, ExportAdmin):
         return False
 
     def has_delete_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.CORRESPONDANT_RH in user_groupes or \
             groups.DRH_NIVEAU_1 in user_groupes or \
@@ -523,7 +524,7 @@ class CandidatAdminMixin(BaseAdmin, ExportAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
             groups.CORRESPONDANT_RH in user_groupes or \
             groups.DRH_NIVEAU_1 in user_groupes or \
@@ -564,7 +565,7 @@ class CandidatAdminMixin(BaseAdmin, ExportAdmin):
                 .select_related('offre_emploi') \
                 .annotate(moyenne=Avg('evaluations__note'))
 
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if groups.DRH_NIVEAU_1 in user_groupes or \
             groups.DRH_NIVEAU_2 in user_groupes or \
             groups.HAUTE_DIRECTION in user_groupes:
@@ -679,7 +680,7 @@ class EvaluateurAdmin(BaseAdmin, VersionAdmin):
 
     ### Permissions add, delete, change
     def has_add_permission(self, request):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
                 groups.DRH_NIVEAU_1 in user_groupes or \
                 groups.DRH_NIVEAU_2 in user_groupes or \
@@ -688,7 +689,7 @@ class EvaluateurAdmin(BaseAdmin, VersionAdmin):
         return False
 
     def has_delete_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
                 groups.DRH_NIVEAU_1 in user_groupes or \
                 groups.DRH_NIVEAU_2 in user_groupes or \
@@ -697,7 +698,7 @@ class EvaluateurAdmin(BaseAdmin, VersionAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
         if request.user.is_superuser is True or \
                 groups.DRH_NIVEAU_1 in user_groupes or \
                 groups.DRH_NIVEAU_2 in user_groupes or \
@@ -802,7 +803,7 @@ class CandidatEvaluationAdmin(BaseAdmin):
         mais interdire l'accès à modifier l'objet si l'évaluateur n'est pas
         le request.user
         """
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
 
         if request.user.is_superuser or \
             groups.CORRESPONDANT_RH in user_groupes or \
@@ -824,8 +825,7 @@ class CandidatEvaluationAdmin(BaseAdmin):
         """
         qs = self.model._default_manager.get_query_set() \
                 .select_related('offre_emploi')
-        user_groupes = request.user.groups.all()
-        user_groupes = [g.name for g in request.user.groups.all()]
+        user_groupes = get_user_groupnames(request.user)
 
         if request.user.is_superuser or \
             groups.CORRESPONDANT_RH in user_groupes or \
@@ -864,13 +864,23 @@ class MesCandidatEvaluationAdmin(CandidatEvaluationAdmin):
 
     def queryset(self, request):
         qs = self.model._default_manager.get_query_set() \
-                .select_related('offre_emploi')
+            .select_related('offre_emploi')
         evaluateur = Evaluateur.objects.get(user=request.user)
-        candidats_evaluations = \
-            CandidatEvaluation.objects.filter(evaluateur=evaluateur,
-                    candidat__statut__in=('REC', ))
-        candidats_evaluations_ids = [ce.id for ce in candidats_evaluations]
-        return qs.filter(id__in=candidats_evaluations_ids)
+
+        # XXX: Pas l'idéal, mais on doit créer les objets CandidatEvaluation
+        # ici pour garder la liste à jour. Idéalement, il vaudrait peut-être
+        # mieux utiliser directement les objets Candidat.
+        for candidat in Candidat.objects .filter(
+            offre_emploi__offreemploievaluateur__evaluateur=evaluateur,
+        ).exclude(evaluations__evaluateur=evaluateur):
+            print candidat, candidat.offre_emploi
+            CandidatEvaluation.objects.get_or_create(
+                candidat=candidat, evaluateur=evaluateur
+            )
+
+        return qs.filter(
+            evaluateur=evaluateur, candidat__statut__in=('NOUV', 'REC')
+        )
 
 
 class OffreEmploiEvaluateurAdmin(BaseAdmin):