mes eval
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 20 Mar 2012 13:59:33 +0000 (09:59 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 20 Mar 2012 13:59:33 +0000 (09:59 -0400)
project/recrutement/admin.py
project/recrutement/models.py

index bae1be2..905f18f 100644 (file)
@@ -14,6 +14,7 @@ from recrutement.models import *
 from recrutement.workflow import grp_drh_recrutement, grp_directeurs_bureau_recrutement, \
                     grp_administrateurs_recrutement, \
                     grp_correspondants_rh_recrutement
+
 from recrutement.forms import *
 
 ### CONSTANTES
@@ -568,13 +569,14 @@ class CandidatEvaluationAdmin(admin.ModelAdmin):
         """
         user_groupes = request.user.groups.all()
 
-        if grp_drh_recrutement in user_groupes or \
+        if request.user.is_superuser or \
+            grp_drh_recrutement in user_groupes or \
             grp_correspondants_rh_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
-            is_recrutement = True
+                return True
         else:
-            is_recrutement = False
+            return False
 
         try:
             Evaluateur.objects.get(user=request.user)
@@ -615,6 +617,34 @@ class CandidatEvaluationAdmin(admin.ModelAdmin):
         candidats_evaluations_ids = [ce.id for ce in candidats_evaluations]
         return qs.filter(id__in=candidats_evaluations_ids)
 
+
+class MesCandidatEvaluationAdmin(CandidatEvaluationAdmin):
+
+    def has_change_permission(self, request, obj=None):
+        try:
+            Evaluateur.objects.get(user=request.user)
+            is_evaluateur = True
+        except:
+            is_evaluateur = False
+
+        if obj is None or is_evaluateur:
+            return True
+
+        try:
+            return request.user == obj.evaluateur.user
+        except:
+            return False
+
+    def queryset(self, request):
+        qs = self.model._default_manager.get_query_set().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)
+
+
 class CourrielTemplateAdmin(VersionAdmin):
     ### Actions à afficher
     def get_actions(self, request):
@@ -627,5 +657,6 @@ admin.site.register(ProxyOffreEmploi, ProxyOffreEmploiAdmin)
 admin.site.register(Candidat, CandidatAdmin)
 admin.site.register(ProxyCandidat, ProxyCandidatAdmin)
 admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)
+admin.site.register(MesCandidatEvaluation, MesCandidatEvaluationAdmin)
 admin.site.register(Evaluateur, EvaluateurAdmin)
 admin.site.register(CourrielTemplate, CourrielTemplateAdmin)
index 7035fe1..52b4bc3 100644 (file)
@@ -3,12 +3,15 @@
 from django.contrib.auth.models import User
 from tinymce import models as tinymce_models
 from django.db import models
+from django.db.models.signals import post_init, pre_delete
+from django.dispatch import receiver
+
 
 from south.modelsinspector import add_introspection_rules
 add_introspection_rules([], ["^tinymce.models.HTMLField"])
 
 from auf.django.emploi import models as emploi
-
+from recrutement.workflow import  grp_evaluateurs_recrutement
 
 ### CONSTANTES
 #NOTES
@@ -95,6 +98,22 @@ class Evaluateur(models.Model):
     def __unicode__(self):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
+# Synchro des objets évaluateurs pour mettre les users Django dans le groupe
+# évaluateurs, afin d'y mettre des permissions
+@receiver(post_init, sender=Evaluateur)
+def sync_add_groupe_evaluateur(sender, **kwargs):
+    instance = kwargs['instance']
+    if grp_evaluateurs_recrutement not in instance.user.groups.all():
+        instance.user.groups.add(grp_evaluateurs_recrutement)
+        instance.user.save()
+
+@receiver(pre_delete, sender=Evaluateur)
+def sync_delete_groupe_evaluateur(sender, **kwargs):
+    instance = kwargs['instance']
+    instance.user.groups.remove(grp_evaluateurs_recrutement)
+    instance.user.save()
+
+
 class CandidatEvaluation(models.Model):
     candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', 
                 related_name='+',) 
@@ -111,6 +130,15 @@ class CandidatEvaluation(models.Model):
     def __unicode__(self):
         return u"Évaluation de %s" % self.candidat
 
+
+class MesCandidatEvaluation(CandidatEvaluation):
+
+    class Meta:
+        proxy = True
+        verbose_name = u"Mon candidat à évaluer"
+        verbose_name_plural = u"Mes candidats à évaluer"
+
+
 #### TEMPLATE COURRIEL
 TEMPLATE_CHOICES = (
     ('SEL', 'Sélectionné'),