From beef76909ac41b58d34c89a0ec40242e09445195 Mon Sep 17 00:00:00 2001 From: Nilovna Bascunan-Vasquez Date: Thu, 7 Jul 2011 12:37:12 -0400 Subject: [PATCH] =?utf8?q?Finalisation=20du=20tableau=20de=20bords=20pour=20?= =?utf8?q?les=20=C3=A9valuateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/recrutement/admin.py | 158 +++++++++++++++++++++++++----------------- project/recrutement/views.py | 1 + 2 files changed, 94 insertions(+), 65 deletions(-) diff --git a/project/recrutement/admin.py b/project/recrutement/admin.py index 0c47c9a..0720ec2 100644 --- a/project/recrutement/admin.py +++ b/project/recrutement/admin.py @@ -24,13 +24,20 @@ class OffreEmploiAdmin(VersionAdmin): _candidatsList.short_description = "Afficher la liste des candidats" def queryset(self, request): - qs = self.model._default_manager.get_query_set() + query = self.model._default_manager.get_query_set() # Si user est superuser afficher toutes les offres d'emploi user_groupes = request.user.groups.all() if not grp_drh_recrutement in user_groupes: - # Si le user n'est ni un évaluateur ni un administrateur régional, - # retourner none - # Vérifier groupes + """ + Filtrer les offre d'emploi pour afficher seulement les offres + d'emploi actives + """ + qs = query.filter(date_limite__gte=datetime.date.today()) + """ + Si le user n'est ni un évaluateur ni un administrateur régional, + retourner none + Vérifier groupes + """ if grp_evaluateurs_recrutement in user_groupes: user = Evaluateur.objects.get(user=request.user) elif grp_administrateurs_recrutement in user_groupes: @@ -42,15 +49,13 @@ class OffreEmploiAdmin(VersionAdmin): region_ids = [g.id for g in user.regions.all()] return qs.select_related('offre_emploi').\ filter(region__in=region_ids) - if type(user) is Evaluateur: - + if type(user) is Evaluateur: candidats = [g for g in user.candidats.all()] - offre_emploi_ids = [offre.id for offre in candidats] + offre_emploi_ids = [c.offre_emploi.id for c in candidats] return qs.select_related('offre_emploi').\ - filter(id__in=offre_emploi_ids) - + filter(id__in=offre_emploi_ids) return qs.none() - return qs.select_related('offre_emploi') + return query.select_related('offre_emploi') def has_change_permission(self, request, obj=None): user_groupes = request.user.groups.all() @@ -60,7 +65,7 @@ class OffreEmploiAdmin(VersionAdmin): return False class ProxyOffreEmploiAdmin(OffreEmploiAdmin): - list_display = ('nom', 'resume', 'date_limite', 'region', '_candidatsList', ) + list_display = ('nom', 'resume', 'date_limite', 'region', ) readonly_fields = ('actif', 'description', 'poste', 'bureau', 'duree_affectation', 'renumeration', 'debut_affectation', 'lieu_affectation', 'nom', @@ -88,17 +93,11 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin): def has_change_permission(self, request, obj=None): user_groupes = request.user.groups.all() - if grp_evaluateurs_recrutement in user_groupes: + if grp_evaluateurs_recrutement in user_groupes or \ + grp_drh_recrutement in user_groupes: return True return False - def _candidatsList(self, obj): - return "Voir les candidats \ - " % (reverse('admin:recrutement_proxycandidat_changelist'), - obj.id) - _candidatsList.allow_tags = True - _candidatsList.short_description = "Afficher la liste des candidats" - class ProxyCandidatPiece(CandidatPiece): """ Ce proxy sert uniquement dans l'admin à disposer d'un libellé @@ -178,16 +177,18 @@ class CandidatAdmin(VersionAdmin): envoyer_courriel_candidats.short_description = u'Envoyer courriel' # Évaluer un candidat + # TODO: Revérifier, si c'est mieux de rediriger vers Évaluation candidat et ensuite + # permettre l'évaluation ou laisser le reverse(evaluer_candidat) def evaluer_candidat(self, obj): - return "Évaluer le candidat \ - " % (reverse('evaluer_candidat'), obj.id) + return "Évaluer le candidat " % \ + (reverse('admin:recrutement_candidatevaluation_changelist'), + obj.id) evaluer_candidat.allow_tags = True - evaluer_candidat.short_description = 'Note du candidat' + evaluer_candidat.short_description = 'Évaluation' # Afficher un candidat def afficher_candidat(self, obj): - return "Voir le candidat " \ - % (reverse('admin:recrutement_proxycandidat_change', args=(obj.id,))) + return "Voir le candidat" % (reverse('admin:recrutement_proxycandidat_change', args=(obj.id,))) afficher_candidat.allow_tags = True afficher_candidat.short_description = u'Afficher les détails du candidat' @@ -199,18 +200,6 @@ class CandidatAdmin(VersionAdmin): voir_offre_emploi.allow_tags = True voir_offre_emploi.short_description = "Afficher l'offre d'emploi" - """ # Afficher note poster par l'évaluateur - def note_evaluateur(self, obj): - import pdb;pdb.set_trace() - evaluateur = Evaluateur.objects.get(user=obj.user) - import pdb;pdb.set_trace() - note_eval = CandidatEvaluation.objects.filter(evaluateur=evaluateur, - candidat=obj.user) - return "blabla" - note_evaluateur.allow_tags = True - note_evaluateur.short_description = "Votre note" - """ - # Calculer la moyenne des notes def calculer_moyenne(self, obj): evaluations = CandidatEvaluation.objects.filter(candidat=obj) @@ -276,9 +265,6 @@ class CandidatAdmin(VersionAdmin): return qs.select_related('candidats') class ProxyCandidatAdmin(CandidatAdmin): - #TODO: init boucler sur les fields pour le readonly - 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', @@ -313,7 +299,9 @@ class ProxyCandidatAdmin(CandidatAdmin): def has_change_permission(self, request, obj=None): user_groupes = request.user.groups.all() - if grp_evaluateurs_recrutement in user_groupes: + if grp_drh_recrutement in user_groupes or \ + grp_administrateurs_recrutement in user_groupes or \ + grp_evaluateurs_recrutement in user_groupes: return True return False @@ -339,39 +327,79 @@ class EvaluateurAdmin(VersionAdmin): #(None, {'fields': ('candidats',)}), ) - # Peut-être qu'on peut enlever cette def, à cause des permissions - def queryset(self, request): - """ - Affiche la liste d'évaluateur que si le user connecté - possède un Evaluateur - """ - user_groupes = request.user.groups.all() - if grp_drh_recrutement in user_groupes: - return self.model._default_manager.get_query_set() - - return qs.none() - class AdministrateurRegionalAdmin(VersionAdmin): pass class CandidatEvaluationAdmin(VersionAdmin): - list_display = ('candidat', 'offre_emploi_candidat', 'evaluateur', 'note', - 'commentaire', 'date',) + list_display = ('_offre_emploi', '_candidat', '_note', '_commentaire', + 'evaluateur',) + readonly_fields = ('candidat', 'evaluateur') + fieldsets = ( + ('Évaluation du candidat', { + 'fields': ('candidat', 'evaluateur', 'note', 'commentaire', ) + }), + ) + + def _note(self, obj): + """ + Si l'évaluateur n'a pas encore donné de note au candidat, indiquer + un lien pour Évaluer le candidat. + Sinon afficher la note. + """ + if obj.note is None: + return "Évaluer le candidat " % \ + (reverse('admin:recrutement_candidatevaluation_change', + args=(obj.candidat.id,))) + return obj.note + _note.allow_tags = True + _note.short_description = "Votre note" + _note.admin_order_field = 'note' + + def _candidat(self, obj): + return "%s" \ + % (reverse('admin:recrutement_proxycandidat_change', + args=(obj.candidat.id,)), obj.candidat) + _candidat.allow_tags = True + _candidat.short_description = 'Candidat' + + def _commentaire(self, obj): + """ + Si l'évaluateur n'a pas encore donné de note au candidat, indiquer + dans le champ commentaire, Aucun au lieu de (None) + Sinon afficher la note. + """ + if obj.commentaire is None: + return "Aucun" + return obj.commentaire + _commentaire.allow_tags = True + _commentaire.short_description = "Commentaire" - def offre_emploi_candidat(self, obj): - return obj.candidat.offre_emploi + def _offre_emploi(self, obj): + return "%s" % \ + (reverse('admin:recrutement_proxyoffreemploi_change', + args=(obj.candidat.offre_emploi.id,)), obj.candidat.offre_emploi) + _offre_emploi.allow_tags = True + _offre_emploi.short_description = "Voir offre d'emploi" + _offre_emploi.admin_order_field = '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) + """ + Afficher uniquement les évaluations de l'évaluateur, sauf si + l'utilisateur est super admin. + """ qs = self.model._default_manager.get_query_set() + user_groupes = request.user.groups.all() + if grp_drh_recrutement in user_groupes: + return qs.select_related('offre_emploi') + + evaluateur = Evaluateur.objects.get(user=request.user) + candidats_evaluations = CandidatEvaluation.objects.\ + filter(evaluateur=evaluateur) candidats_evaluations_ids = [ce.id for ce in \ candidats_evaluations.all()] - return qs.select_related('offre_emploi')#.\ - #filter(id__in=candidats_evaluations_ids) + return qs.select_related('offre_emploi').\ + filter(id__in=candidats_evaluations_ids) class CourrielTemplateAdmin(VersionAdmin): pass @@ -379,8 +407,8 @@ class CourrielTemplateAdmin(VersionAdmin): admin.site.register(OffreEmploi, OffreEmploiAdmin) admin.site.register(Candidat, CandidatAdmin) admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin) -admin.site.register(CourrielTemplate, CourrielTemplateAdmin) +#admin.site.register(CourrielTemplate, CourrielTemplateAdmin) admin.site.register(Evaluateur, EvaluateurAdmin) -admin.site.register(AdministrateurRegional, AdministrateurRegionalAdmin) +#admin.site.register(AdministrateurRegional, AdministrateurRegionalAdmin) admin.site.register(ProxyOffreEmploi, ProxyOffreEmploiAdmin) admin.site.register(ProxyCandidat, ProxyCandidatAdmin) diff --git a/project/recrutement/views.py b/project/recrutement/views.py index 07d317e..3f96984 100755 --- a/project/recrutement/views.py +++ b/project/recrutement/views.py @@ -50,6 +50,7 @@ def evaluer_candidat(request): form = CandidatEvaluationForm(candidat=candidat, evaluateur=evaluateur) c = {'form' : form} + # Voir ou rediriger return render_to_response("recrutement/evaluer_candidat.html", Context(c), context_instance = RequestContext(request)) -- 1.7.10.4