1503: Permettre aux évaluateurs d'entrer des notes/commentaires sur les candidatures
[auf_rh_dae.git] / project / recrutement / admin.py
index a74162e..be50271 100644 (file)
@@ -12,8 +12,8 @@ class OffreEmploiAdmin(admin.ModelAdmin):
     list_display = ('nom', 'resume', 'date_limite', '_candidatsList', )
     list_filter = ('region',)
 
-    def _candidatsList(self, request):     
-        return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats</a>" % (reverse('admin:recrutement_candidat_changelist'), request.id)
+    def _candidatsList(self, obj):     
+        return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats</a>" % (reverse('admin:recrutement_candidat_changelist'), obj.id)
     _candidatsList.allow_tags = True 
     _candidatsList.short_description = "Liste des candidats"   
 
@@ -37,7 +37,7 @@ class EvaluateurInline(admin.TabularInline):
 
 class CandidatAdmin(admin.ModelAdmin):
     date_hierarchy = 'date_creation'
-    list_display = ('nom', 'prenom', 'offre_emploi','statut', '_actions')
+    list_display = ('nom', 'prenom', 'offre_emploi','statut', '_actions', 'evaluer_candidat')
     list_filter = ('offre_emploi',)
     fieldsets = (
         ('Informations personnelles', {
@@ -63,12 +63,18 @@ class CandidatAdmin(admin.ModelAdmin):
 
     # Affecter un évaluateurs à des candidats
     actions = ['affecter_candidats_evaluateur']
-    def affecter_candidats_evaluateur(modeladmin, request, queryset):
-        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+    def affecter_candidats_evaluateur(modeladmin, obj):
+        selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
         return HttpResponseRedirect(reverse('affecter_evaluateurs_candidats')+"?ids=%s" % (",".join(selected)))
     affecter_candidats_evaluateur.short_description = "Affecter evaluateur"
 
-    def queryset(self, request):
+    
+    def evaluer_candidat(self, obj):
+        return "<a href='%s?id=%s'>Évaluer le candidat</a>" % (reverse('evaluer_candidat'), obj.id)
+    evaluer_candidat.allow_tags = True    
+    evaluer_candidat.short_description = "Évaluer"
+
+    def queryset(self, obj):
         """
         Spécifie un queryset limité, autrement Django exécute un select_related()
         sans paramètre, ce qui a pour effet de charger tous les objets FK, sans limite
@@ -78,8 +84,8 @@ class CandidatAdmin(admin.ModelAdmin):
         qs = self.model._default_manager.get_query_set()
         return qs.select_related('offre_emploi')
 
-    def _actions(self, request):
-        return "<a href='%s?id=%s'>Voir l'offre d'emploi</a>" % (reverse('admin:recrutement_offreemploi_changelist'), request.offre_emploi.id)
+    def _actions(self, obj):
+        return "<a href='%s?id=%s'>Voir l'offre d'emploi</a>" % (reverse('admin:recrutement_offreemploi_changelist'), obj.offre_emploi.id)
     _actions.allow_tags = True
     _actions.short_description = "Offre d'emploi"
 
@@ -104,7 +110,17 @@ class EvaluateurAdmin(admin.ModelAdmin):
     )
 
 class CandidatEvaluationAdmin(admin.ModelAdmin):
-    pass
+    list_display = ('candidat', 'evaluateur', 'note', 'commentaire', 'date', )
+
+    def queryset(self, obj):
+        """
+        Spécifie un queryset limité, autrement Django exécute un select_related()
+        sans paramètre, ce qui a pour effet de charger tous les objets FK, sans limite
+        de profondeur. Dès qu'on arrive, dans les modèles de Region, il existe plusieurs
+        boucles, ce qui conduit à la génération d'une requête infinie.
+        """
+        qs = self.model._default_manager.get_query_set()
+        return qs.select_related('offre_emploi')
 
 admin.site.register(OffreEmploi, OffreEmploiAdmin)
 admin.site.register(Candidat, CandidatAdmin)