_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:
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()
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',
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 "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats \
- </a>" % (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é
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 "<a href='%s?id=%s'>Évaluer le candidat \
- </a>" % (reverse('evaluer_candidat'), obj.id)
+ return "<a href='%s?candidat__id__exact=%s'>Évaluer le candidat </a>" % \
+ (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 "<a href='%s'>Voir le candidat </a>" \
- % (reverse('admin:recrutement_proxycandidat_change', args=(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_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)
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',
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
#(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 "<a href='%s'>Évaluer le candidat </a>" % \
+ (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 "<a href='%s'>%s</a>" \
+ % (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 "<a href='%s'>%s</a>" % \
+ (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
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)