1546: Associer des évaluateurs à des candidatures.
[auf_rh_dae.git] / project / recrutement / admin.py
1 # -*- encoding: utf-8 -*-
2
3 from django.core.urlresolvers import reverse
4 from django.http import HttpResponseRedirect
5 from django.contrib import admin
6 from reversion.admin import VersionAdmin
7
8 from recrutement.models import *
9
10 class OffreEmploiAdmin(admin.ModelAdmin):
11 date_hierarchy = 'date_creation'
12 list_display = ('nom', 'resume', 'date_limite', )#'_actions',
13 #'_tousCandidats')
14 list_filter = ('region',)
15
16 # def _tousCandidats(self, request):
17 # return OffreEmploi.candidats.through
18
19 # def _actions(self, request):
20 # return "<a href='%s?id=%s'>Voir le candidat</a>" % (reverse('admin:recrutement_candidat_changelist'), request.id)
21 # _actions.allow_tags = True
22
23 class CandidatPieceInline(admin.TabularInline):
24 model = CandidatPiece
25 extra = 1
26
27 class EvaluateurInline(admin.TabularInline):
28 model = Evaluateur.candidats.through
29 extra = 1
30
31 class CandidatAdmin(admin.ModelAdmin):
32 date_hierarchy = 'date_creation'
33 list_display = ('nom', 'prenom', 'offre_emploi','statut', '_actions')
34 fieldsets = (
35 ('Informations personnelles', {
36 'fields': ('prenom','nom','genre', 'nationalite', 'date_naissance',
37 'situation_famille', 'nombre_dependant',)
38 }),
39 ('Adresse', {
40 'fields': ('adresse', 'ville', 'etat_province', 'pays', )
41 }),
42 ('Informations professionnelles', {
43 'fields': ('offre_emploi','niveau_diplome','employeur_actuel','poste_actuel',
44 'domaine_professionnel',)
45 }),
46 ('Options avancées', {
47 'classes': ('collapse',),
48 'fields': ('actif', 'statut', )
49 }),
50 )
51 inlines = [
52 CandidatPieceInline,
53 EvaluateurInline,
54 ]
55
56 # Affecter un évaluateurs à des candidats
57 actions = ['affecter_candidats_evaluateur']
58 def affecter_candidats_evaluateur(modeladmin, request, queryset):
59 selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
60 return HttpResponseRedirect(reverse('affecter_evaluateurs_candidats')+"?ids=%s" % (",".join(selected)))
61 affecter_candidats_evaluateur.short_description = "Affecter evaluateur"
62
63 def queryset(self, request):
64 """
65 Spécifie un queryset limité, autrement Django exécute un select_related()
66 sans paramètre, ce qui a pour effet de charger tous les objets FK, sans limite
67 de profondeur. Dès qu'on arrive, dans les modèles de Region, il existe plusieurs
68 boucles, ce qui conduit à la génération d'une requête infinie.
69 """
70 qs = self.model._default_manager.get_query_set()
71 return qs.select_related('offre_emploi')
72
73 def _actions(self, request):
74 return "<a href='%s?id=%s'>Voir l'offre d'emploi</a>" % (reverse('admin:recrutement_offreemploi_changelist'), request.offre_emploi.id)
75 _actions.allow_tags = True
76
77 class CandidatPieceAdmin(admin.ModelAdmin):
78 list_display = ('nom', 'candidat', )
79
80 def queryset(self, request):
81 """
82 Spécifie un queryset limité, autrement Django exécute un
83 select_related() sans paramètre, ce qui a pour effet de charger tous
84 les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les
85 modèles de Region, il existe plusieurs boucles, ce qui conduit à la
86 génération d'une requête infinie.
87 """
88 qs = self.model._default_manager.get_query_set()
89 return qs.select_related('candidat')
90
91 class EvaluateurAdmin(admin.ModelAdmin):
92 fieldsets = (
93 (None, {'fields': ('nom', 'prenom')}),
94 (None, {'fields': ('candidats',)}),
95 )
96
97 class CandidatEvaluationAdmin(admin.ModelAdmin):
98 pass
99
100 admin.site.register(OffreEmploi, OffreEmploiAdmin)
101 admin.site.register(Candidat, CandidatAdmin)
102 admin.site.register(CandidatPiece, CandidatPieceAdmin)
103 admin.site.register(Evaluateur, EvaluateurAdmin)
104 admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)