from django.contrib import admin
from django.core.urlresolvers import reverse
from django.db.models import Avg
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+
+from auf.django.emploi.models import STATUT_CHOICES
from django.forms.models import BaseInlineFormSet
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
from reversion.admin import VersionAdmin
+from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
+from auf.django.references.models import Region, Bureau, Implantation
+from auf.django.export.admin import ExportAdmin
+
from project.groups import get_employe_from_user as get_emp
from project.rh import models as rh
from project.recrutement.forms import OffreEmploiForm
list_filter = ('statut',)
actions = ['affecter_evaluateurs_offre_emploi', ]
form = OffreEmploiForm
+ fieldsets = (
+ (None, {
+ 'fields': (
+ 'est_affiche',
+ 'statut',
+ 'date_limite',
+ 'nom',
+ 'description',
+ 'poste',
+ 'region',
+ 'lieu_affectation',
+ 'bureau',
+ 'debut_affectation',
+ 'duree_affectation',
+ 'renumeration',
+ )
+ }),
+ )
### Actions à afficher
def get_actions(self, request):
- actions = super(OffreEmploiAdmin, self).get_actions(request)
+ actions = super(OffreEmploiAdminMixin, self).get_actions(request)
del actions['delete_selected']
return actions
### Afficher la liste des candidats pour l'offre d'emploi
def _candidatsList(self, obj):
return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats \
- </a>" % (reverse('admin:recrutement_candidat_changelist'), obj.id)
+ </a>" % (reverse('admin:emploi_candidat_changelist'), obj.id)
_candidatsList.allow_tags = True
_candidatsList.short_description = "Afficher la liste des candidats"
### Formulaire
def get_form(self, request, obj=None, **kwargs):
- form = super(OffreEmploiAdmin, self).get_form(request, obj, **kwargs)
+ form = super(OffreEmploiAdminMixin, self).get_form(request, obj, **kwargs)
employe = get_emp(request.user)
user_groupes = request.user.groups.all()
return True
return False
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
+ if db_field.name == 'lieu_affectation':
+ employe = get_emp(request.user)
+ kwargs["queryset"] = Implantation.objects.filter(region=employe.implantation.region)
+ return db_field.formfield(**kwargs)
+ return super(OffreEmploiAdminMixin, self).formfield_for_foreignkey(db_field, request, **kwargs)
+
class OffreEmploiAdmin(VersionAdmin, OffreEmploiAdminMixin):
pass
return False
def has_change_permission(self, request, obj=None):
- user_groupes = request.user.groups.all()
- if request.user.is_superuser is True or \
- grp_correspondants_rh in user_groupes or \
- grp_drh in user_groupes or \
- grp_drh2 in user_groupes or \
- grp_directeurs_bureau in user_groupes or \
- grp_administrateurs in user_groupes or \
- grp_haute_direction in user_groupes:
- return True
-
if obj is not None:
return True
- return False
+ return not super(ProxyOffreEmploiAdmin, self).has_change_permission(request, obj)
class CandidatPieceInline(admin.TabularInline):
return self.readonly_fields
-class CandidatAdminMixin(BaseAdmin):
+class CandidatAdminMixin(BaseAdmin, ExportAdmin):
+ change_list_template = 'admin/recrutement/candidat/change_list.html'
search_fields = ('nom', 'prenom')
exclude = ('actif', )
list_editable = ('statut', )
list_display = ('_candidat', 'offre_emploi',
'voir_offre_emploi', 'calculer_moyenne',
'afficher_candidat', '_date_creation', 'statut', )
- list_filter = ('offre_emploi', 'offre_emploi__region', 'statut', )
+ list_filter = ('offre_emploi__nom', 'offre_emploi__region', 'statut', )
fieldsets = (
("Offre d'emploi", {
}),
('Informations personnelles', {
'fields': (
- 'prenom', 'nom', 'genre', 'nationalite',
+ 'nom', 'prenom', 'genre', 'nationalite',
'situation_famille', 'nombre_dependant'
)
}),
CandidatPieceInline,
CandidatEvaluationInline,
]
- actions = ['envoyer_courriel_candidats']
+ actions = ['envoyer_courriel_candidats', 'changer_statut']
+
+ export_fields = ['statut', 'offre_emploi', 'prenom', 'nom', 'genre',
+ 'nationalite', 'situation_famille', 'nombre_dependant',
+ 'niveau_diplome', 'employeur_actuel', 'poste_actuel',
+ 'domaine_professionnel', 'telephone', 'email', 'adresse',
+ 'ville', 'etat_province', 'code_postal', 'pays']
def _candidat(self, obj):
txt = u"%s %s (%s)" % (obj.nom.upper(), obj.prenom, obj.genre)
### Actions à afficher
def get_actions(self, request):
- actions = super(CandidatAdmin, self).get_actions(request)
+ actions = super(CandidatAdminMixin, self).get_actions(request)
del actions['delete_selected']
return actions
)
envoyer_courriel_candidats.short_description = u'Envoyer courriel'
+ ### Changer le statut à des candidats
+ def changer_statut(modeladmin, request, queryset):
+ if request.POST.get('post'):
+ queryset.update(statut=request.POST.get('statut'))
+ return None
+
+ context = {
+ 'action_checkbox_name': admin.helpers.ACTION_CHECKBOX_NAME,
+ 'queryset': queryset,
+ 'status': STATUT_CHOICES,
+ }
+
+ return render_to_response("recrutement/selectionner_statut.html",
+ context, context_instance = RequestContext(request))
+
+ changer_statut.short_description = u'Changer statut'
+
### Évaluer un candidat
def evaluer_candidat(self, obj):
return "<a href='%s?candidat__id__exact=%s'>" \
items = [u"<li><a href='%s%s'>%s</li>" % \
(settings.OE_PRIVE_MEDIA_URL, pj.path, pj.get_nom_display()) \
for pj in obj.pieces_jointes()]
- html = "<a href='%s'>Voir le candidat</a>" % (
+ html = "<a href='%s'>Candidature</a>" % (
reverse('admin:recrutement_proxycandidat_change', args=(obj.id,))
)
return "%s<ul>%s</ul>" % (html, "\n".join(items))
return True
return False
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
+ if db_field.name == 'offre_emploi':
+ employe = get_emp(request.user)
+ kwargs["queryset"] = OffreEmploi.objects.filter(region=employe.implantation.region)
+ return db_field.formfield(**kwargs)
+ return super(CandidatAdminMixin, self).formfield_for_foreignkey(db_field, request, **kwargs)
+
def get_changelist(self, request, **kwargs):
return OrderedChangeList
return False
def has_change_permission(self, request, obj=None):
- user_groupes = request.user.groups.all()
- if request.user.is_superuser is True or \
- grp_correspondants_rh in user_groupes or \
- grp_drh in user_groupes or \
- grp_drh2 in user_groupes or \
- grp_directeurs_bureau in user_groupes or \
- grp_administrateurs in user_groupes or \
- grp_haute_direction in user_groupes:
- return True
-
if obj is not None:
evaluateur = Evaluateur.objects.get(user=request.user)
for e in obj.evaluations.all():
if e.evaluateur == evaluateur:
return True
- return False
+ return not super(ProxyCandidatAdmin, self).has_change_permission(request, obj)
def get_actions(self, request):
return None
grp_directeurs_bureau in user_groupes or \
grp_administrateurs in user_groupes or \
grp_haute_direction in user_groupes:
- return qs
+ return qs.filter(candidat__statut__in=('REC', 'SEL'))
evaluateur = Evaluateur.objects.get(user=request.user)
candidats_evaluations = \
class MesCandidatEvaluationAdmin(CandidatEvaluationAdmin):
+ list_filter = []
def has_change_permission(self, request, obj=None):
try: