From: Olivier Larchevêque Date: Tue, 20 Mar 2012 13:59:33 +0000 (-0400) Subject: mes eval X-Git-Tag: 1.6.5~189 X-Git-Url: http://git.auf.org/?p=auf_rh_dae.git;a=commitdiff_plain;h=3bc5ea4255042302b79d84ae09a24c1f45803ca7 mes eval --- diff --git a/project/recrutement/admin.py b/project/recrutement/admin.py index bae1be2..905f18f 100644 --- a/project/recrutement/admin.py +++ b/project/recrutement/admin.py @@ -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) diff --git a/project/recrutement/models.py b/project/recrutement/models.py index 7035fe1..52b4bc3 100644 --- a/project/recrutement/models.py +++ b/project/recrutement/models.py @@ -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é'),