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