Début du tableau de bord des évaluations pour les Évaluateurs
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Wed, 6 Jul 2011 20:26:23 +0000 (16:26 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Wed, 6 Jul 2011 20:26:23 +0000 (16:26 -0400)
project/recrutement/admin.py
project/recrutement/models.py

index ff3d55b..0c47c9a 100644 (file)
@@ -66,16 +66,16 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
                         'debut_affectation', 'lieu_affectation', 'nom',
                         'resume', 'date_limite', 'region')
     fieldsets = (
-        (None, {
+        ('Nom', {
             'fields': ('nom', )        
         }),
-        (None, {
+        ('Description générale', {
             'fields': ('poste', 'resume','description', 'date_limite', )        
         }),
-        (None, {
+        ('Coordonnées', {
             'fields': ('lieu_affectation', 'bureau', 'region', )
         }),
-        (None, {
+        ('Autre', {
             'fields': ('debut_affectation', 'duree_affectation',
                         'renumeration', )
         }),
@@ -125,12 +125,13 @@ class ProxyEvaluateur(Evaluateur.candidats.through):
 
 class EvaluateurInline(admin.TabularInline):
     model = ProxyEvaluateur
+    fields = ('evaluateur',)
     extra = 1
 
 class CandidatAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'prenom', 'offre_emploi','statut',
-                    'voir_offre_emploi', 'evaluer_candidat', #'note_evaluateur',
+                    'voir_offre_emploi', #'note_evaluateur',
                     'calculer_moyenne', 'afficher_candidat',)
     list_filter = ('offre_emploi', )
     fieldsets = (
@@ -181,20 +182,20 @@ class CandidatAdmin(VersionAdmin):
         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'
+    evaluer_candidat.short_description = 'Note du candidat'
 
     # Afficher un candidat
     def afficher_candidat(self, obj):
-        return "<a href='%s?id=%s'>Voir le candidat \
-                </a>" % (reverse('recrutement_proxycandidat_change'), obj.id)
+        return "<a href='%s'>Voir le candidat </a>" \
+            % (reverse('admin:recrutement_proxycandidat_change', args=(obj.id,)))
     afficher_candidat.allow_tags = True    
     afficher_candidat.short_description = u'Afficher les détails du candidat'
 
     # Voir l'offre d'emploi
     def voir_offre_emploi(self, obj):
-        return "<a href='%s?id=%s'>Voir l'offre d'emploi</a> \
-                " % (reverse('admin:recrutement_offreemploi_changelist'), 
-                obj.offre_emploi.id)
+        return "<a href='%s'>Voir l'offre d'emploi</a>" % \
+        (reverse('admin:recrutement_proxyoffreemploi_change', 
+                    args=(obj.offre_emploi.id,)))
     voir_offre_emploi.allow_tags = True
     voir_offre_emploi.short_description = "Afficher l'offre d'emploi"
 
@@ -276,9 +277,8 @@ class CandidatAdmin(VersionAdmin):
 
 class ProxyCandidatAdmin(CandidatAdmin):
     #TODO: init boucler sur les fields pour le readonly
-    list_display = ('nom', 'prenom', 'offre_emploi','statut',
-                    'voir_offre_emploi', 'evaluer_candidat', #'note_evaluateur',
-                    'calculer_moyenne',)
+    list_display = ('nom', 'prenom','statut', 'offre_emploi',
+                    'voir_offre_emploi', 'evaluer_candidat', 'afficher_candidat')#'note_evaluateur',)
     readonly_fields = ('statut', 'offre_emploi', 'prenom', 'nom',
                         'genre', 'nationalite', 'date_naissance',
                         'situation_famille', 'nombre_dependant', 'telephone',
@@ -317,13 +317,6 @@ class ProxyCandidatAdmin(CandidatAdmin):
             return True
         return False   
 
-    def voir_offre_emploi(self, obj):
-        return "<a href='%s?id=%s'>Voir l'offre d'emploi</a> \
-                " % (reverse('admin:recrutement_proxyoffreemploi_changelist'), 
-                obj.offre_emploi.id)
-    voir_offre_emploi.allow_tags = True
-    voir_offre_emploi.short_description = "Afficher l'offre d'emploi"
-
 class CandidatPieceAdmin(admin.ModelAdmin):
     list_display = ('nom', 'candidat', )
 
@@ -343,7 +336,7 @@ class CandidatPieceAdmin(admin.ModelAdmin):
 class EvaluateurAdmin(VersionAdmin):
     fieldsets = (
         (None, {'fields': ('user', )}),
-        (None, {'fields': ('candidats',)}),
+        #(None, {'fields': ('candidats',)}),
     )
 
     # Peut-être qu'on peut enlever cette def, à cause des permissions
@@ -352,7 +345,7 @@ class EvaluateurAdmin(VersionAdmin):
         Affiche la liste d'évaluateur que si le user connecté 
         possède un Evaluateur
         """
-        user_groupes = obj.user.groups.all()
+        user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes:
            return self.model._default_manager.get_query_set() 
 
@@ -362,13 +355,30 @@ class AdministrateurRegionalAdmin(VersionAdmin):
     pass
 
 class CandidatEvaluationAdmin(VersionAdmin):
-    list_display = ('candidat', 'evaluateur', 'note', 'commentaire', 'date', )
+    list_display = ('candidat', 'offre_emploi_candidat', 'evaluateur', 'note', 
+                    'commentaire',  'date',)
+
+    def offre_emploi_candidat(self, obj):
+        return obj.candidat.offre_emploi
+
+    def queryset(self, request):
+        evaluateur = Evaluateur.objects.get(user=request.user)
+        candidats = Candidat.objects.filter(evaluateurs=evaluateur) 
+        candidats_evaluations = CandidatEvaluation.objects.\
+                                filter(evaluateur=evaluateur, 
+                                candidat__in=candidats)
+        qs = self.model._default_manager.get_query_set()
+        candidats_evaluations_ids = [ce.id for ce in \
+                                        candidats_evaluations.all()]
+        return qs.select_related('offre_emploi')#.\
+        #filter(id__in=candidats_evaluations_ids)
 
 class CourrielTemplateAdmin(VersionAdmin):
     pass
 
 admin.site.register(OffreEmploi, OffreEmploiAdmin)
 admin.site.register(Candidat, CandidatAdmin)
+admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)
 admin.site.register(CourrielTemplate, CourrielTemplateAdmin)
 admin.site.register(Evaluateur, EvaluateurAdmin)
 admin.site.register(AdministrateurRegional, AdministrateurRegionalAdmin)
index 1e7b651..3463aa4 100755 (executable)
@@ -34,7 +34,8 @@ class Metadata(models.Model):
 class OffreEmploiManager(models.Manager):
     def get_query_set(self):
         fkeys = ('region',)
-        return super(OffreEmploiManager, self).get_query_set().select_related(*fkeys).all()
+        return super(OffreEmploiManager, self).get_query_set().\
+                    select_related(*fkeys).all()
 
 class ProxyPoste(Poste):
     class Meta:
@@ -177,10 +178,10 @@ class CandidatPiece(models.Model):
         return '%s' % (self.nom)
 
 class Evaluateur(models.Model):
-    user = models.ForeignKey(User, unique=True,
-            verbose_name="permission")
-    candidats = models.ManyToManyField(Candidat, verbose_name='candidats', 
-                blank=True, null=True,related_name="evaluateurs")
+    user = models.ForeignKey(User, unique=True, verbose_name="permission")
+    candidats = models.ManyToManyField(Candidat, through='CandidatEvaluation', 
+                #verbose_name='candidats', blank=True, null=True,
+                related_name="evaluateurs")
 
     class Meta:
         verbose_name = "évaluateur"
@@ -201,7 +202,6 @@ class AdministrateurRegional(models.Model):
     def __unicode__(self):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
-
 class CandidatEvaluation(models.Model):
     candidat = models.ForeignKey(Candidat, db_column='candidat', 
                 related_name='+',)