From 540dfae4f01834a0161d62a18bdffe56b4150197 Mon Sep 17 00:00:00 2001 From: Nilovna Bascunan-Vasquez Date: Fri, 29 Jul 2011 14:53:32 -0400 Subject: [PATCH] =?utf8?q?1750:=20Un=20=C3=A9valuateur=20doit=20=C3=AAtre=20?= =?utf8?q?assign=C3=A9s=20=C3=A0=20des=20offres=20d'emploi=20et=20non=20=C3=A0?= =?utf8?q?=20des=20candidats.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/recrutement/admin.py | 38 +++++++++------------ project/recrutement/forms.py | 20 +++++++++-- project/recrutement/models.py | 10 ++---- project/recrutement/views.py | 25 ++------------ project/urls.py | 3 -- src/auf.django.emploi/auf/django/emploi/models.py | 1 - src/auf.django.emploi/auf/django/emploi/views.py | 5 ++- 7 files changed, 42 insertions(+), 60 deletions(-) diff --git a/project/recrutement/admin.py b/project/recrutement/admin.py index 9401b85..e318036 100644 --- a/project/recrutement/admin.py +++ b/project/recrutement/admin.py @@ -30,6 +30,7 @@ class OffreEmploiAdmin(VersionAdmin): def get_actions(self, request): actions = super(OffreEmploiAdmin, self).get_actions(request) del actions['delete_selected'] + return actions # Affecter un évaluateurs à des offres d'emploi def affecter_evaluateurs_offre_emploi(modeladmin, obj, candidats): @@ -136,27 +137,21 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin): return True return False -class ProxyEvaluateur(Evaluateur.candidats.through): - """ + """class ProxyEvaluateur(Evaluateur.candidats.through): + Ce proxy sert uniquement dans l'admin à disposer d'un libellé plus ergonomique. - """ + class Meta: proxy = True verbose_name = "évaluateur" - + """ class CandidatPieceInline(admin.TabularInline): model = CandidatPiece fields = ('candidat', 'nom', 'path',) extra = 1 max_num = 3 -class EvaluateurInline(admin.TabularInline): - model = ProxyEvaluateur - fields = ('evaluateur',) - extra = 1 - - class CandidatEvaluationInlineFormSet(BaseInlineFormSet): """ Empêche la suppression d'une évaluation pour le CandidatEvaluationInline @@ -209,23 +204,15 @@ class CandidatAdmin(VersionAdmin): ) inlines = [ CandidatPieceInline, - EvaluateurInline, CandidatEvaluationInline, ] - actions = ['affecter_candidats_evaluateur', 'envoyer_courriel_candidats'] + actions = ['envoyer_courriel_candidats'] def get_actions(self, request): actions = super(CandidatAdmin, self).get_actions(request) del actions['delete_selected'] - - # Affecter un évaluateurs à des candidats - def affecter_candidats_evaluateur(modeladmin, obj, candidats): - selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME) - - return HttpResponseRedirect(reverse('affecter_evaluateurs_candidats')+ - "?ids=%s" % (",".join(selected))) - affecter_candidats_evaluateur.short_description = u'Affecter évaluateur(s)' + return actions # Envoyer un courriel à des candidats def envoyer_courriel_candidats(modeladmin, obj, candidats): @@ -399,13 +386,18 @@ class CandidatPieceAdmin(admin.ModelAdmin): class EvaluateurAdmin(VersionAdmin): fieldsets = ( - (None, {'fields': ('user', )}), - #(None, {'fields': ('candidats',)}), + ("Utilisateur", { + 'fields': ('user',) + }), + ("Offres d'emploi à évaluer", { + 'fields': ('offres_emploi',) + }), ) def get_actions(self, request): actions = super(EvaluateurAdmin, self).get_actions(request) del actions['delete_selected'] + return actions class AdministrateurRegionalAdmin(VersionAdmin): pass @@ -423,6 +415,7 @@ class CandidatEvaluationAdmin(VersionAdmin): def get_actions(self, request): actions = super(CandidatEvaluationAdmin, self).get_actions(request) del actions['delete_selected'] + return actions def _note(self, obj): """ @@ -508,6 +501,7 @@ class CourrielTemplateAdmin(VersionAdmin): def get_actions(self, request): actions = super(CourrielTemplateAdmin, self).get_actions(request) del actions['delete_selected'] + return actions admin.site.register(OffreEmploi, OffreEmploiAdmin) admin.site.register(ProxyOffreEmploi, ProxyOffreEmploiAdmin) diff --git a/project/recrutement/forms.py b/project/recrutement/forms.py index a051054..b873d2b 100644 --- a/project/recrutement/forms.py +++ b/project/recrutement/forms.py @@ -41,16 +41,20 @@ class EvaluateurForm(forms.Form): recr.Evaluateur.objects.all()) def __init__(self, *args, **kwargs): - self.candidats = kwargs.pop('candidats') + self.offres_emploi = kwargs.pop('offres_emploi') super(EvaluateurForm, self).__init__(*args, **kwargs) def save(self): - for candidat in self.candidats: + candidats = recr.Candidat.objects.\ + filter(offre_emploi__in=self.offres_emploi) + import pdb;pdb.set_trace() + for candidat in candidats: for evaluateur in self.cleaned_data.get('evaluateurs', []): candidat_evaluation = recr.CandidatEvaluation() candidat_evaluation.candidat = candidat candidat_evaluation.evaluateur = evaluateur candidat_evaluation.save() + ################################################################################ # OFFRE EMPLOI @@ -61,6 +65,18 @@ class CandidatPieceForm(emploi.CandidatPieceForm): class PostulerOffreEmploiForm(emploi.PostulerOffreEmploiForm): pass +"""class OffreEmploiForm(emploi.OffreEmploi): + def clean(self): + cleaned_data = self.cleaned_data + date_limite = cleaned_data.get("date_limite") + debut_affectation = cleaned_data.get("debut_affectation") + + if date_limite and debut_affectation: + if date_limite > debut_affectation: + raise forms.ValidationError("La date limite doit être \ + ultérieure à la date de début d'affectation.") + return cleaned_data +""" ################################################################################ # TEMPLATE COURRIEL ################################################################################ diff --git a/project/recrutement/models.py b/project/recrutement/models.py index ee718a4..734f4a8 100755 --- a/project/recrutement/models.py +++ b/project/recrutement/models.py @@ -70,7 +70,7 @@ class ProxyPoste(Poste): def __unicode__(self): return '%s [%s]' % (self.nom, self.id) -class ProxyOffreEmploi(OffreEmploi): +class ProxyOffreEmploi(emploi.OffreEmploi): class Meta: proxy = True verbose_name = "Offre d'emploi (visualisation)" @@ -91,8 +91,8 @@ class ProxyCandidat(Candidat): class Evaluateur(models.Model): user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur") - candidats = models.ManyToManyField(Candidat, through='CandidatEvaluation', - related_name="evaluateurs") + offres_emploi = models.ManyToManyField(emploi.OffreEmploi, + related_name="evaluateurs", blank=True) def save(self, *args, **kwargs): """ @@ -121,10 +121,6 @@ class AdministrateurRegional(models.Model): def __unicode__(self): return '%s %s' % (self.user.first_name, self.user.last_name) -#class ProxyCandidatEvaluation(CandidatEvaluation): -# class Meta: -# proxy = True - class CandidatEvaluation(models.Model): candidat = models.ForeignKey(Candidat, db_column='candidat', related_name='+',) diff --git a/project/recrutement/views.py b/project/recrutement/views.py index 2032ec7..e51d6f8 100755 --- a/project/recrutement/views.py +++ b/project/recrutement/views.py @@ -11,30 +11,12 @@ from django.core.mail import EmailMultiAlternatives from forms import * from models import * -from project.recrutement import models as recr from recrutement.workflow import grp_evaluateurs_recrutement def index(request): return render_to_response('recrutement/index.html', {}, RequestContext(request)) -def affecter_evaluateurs_candidats(request): - candidat_ids = request.GET.get('ids').split(',') - candidats = Candidat.objects.filter(id__in=candidat_ids) - if request.method == "POST": - form = EvaluateurForm(request.POST, candidats=candidats) - if form.is_valid(): - form.save() - messages.add_message(request, messages.SUCCESS, - "Les évaluateurs ont été affectés aux candidats.") - return redirect("admin:recrutement_candidat_changelist") - else: - form = EvaluateurForm(candidats=candidats) - - c = {'form' : form} - return render_to_response("recrutement/affecter_evaluateurs.html", - Context(c), context_instance = RequestContext(request)) - def selectionner_template(request): candidat_ids = request.GET.get('ids') if request.method == "POST": @@ -124,16 +106,15 @@ def postuler_appel_offre(request): def affecter_evaluateurs_offre_emploi(request): offre_emploi_ids = request.GET.get('ids').split(',') offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids) - candidats = Candidat.objects.filter(offre_emploi__in=offres_emploi) if request.method == "POST": - form = EvaluateurForm(request.POST, candidats=candidats) + form = EvaluateurForm(request.POST, offres_emploi=offres_emploi) if form.is_valid(): form.save() messages.add_message(request, messages.SUCCESS, - "Les évaluateurs ont été affectés aux candidats.") + "Les évaluateurs ont été affectés aux offres d'emploi.") return redirect("admin:recrutement_offreemploi_changelist") else: - form = EvaluateurForm(candidats=candidats) + form = EvaluateurForm(offres_emploi=offres_emploi) c = {'form' : form} return render_to_response("recrutement/affecter_evaluateurs.html", diff --git a/project/urls.py b/project/urls.py index 072b6a5..baf021e 100644 --- a/project/urls.py +++ b/project/urls.py @@ -19,9 +19,6 @@ urlpatterns = patterns( (r'^deconnexion/$', 'django.contrib.auth.views.logout'), (r'^dae/', include('project.dae.urls')), (r'^recrutement/', include('project.recrutement.urls')), - url(r'^recrutement/affecter_evaluateurs_candidats/$', - 'recrutement.views.affecter_evaluateurs_candidats', - name='affecter_evaluateurs_candidats'), url(r'^recrutement/affecter_evaluateurs_offre_emploi/$', 'recrutement.views.affecter_evaluateurs_offre_emploi', name='affecter_evaluateurs_offre_emploi'), diff --git a/src/auf.django.emploi/auf/django/emploi/models.py b/src/auf.django.emploi/auf/django/emploi/models.py index f8b05ce..ebf2237 100755 --- a/src/auf.django.emploi/auf/django/emploi/models.py +++ b/src/auf.django.emploi/auf/django/emploi/models.py @@ -5,7 +5,6 @@ from django.core.files.storage import FileSystemStorage from tinymce import models as tinymce_models from django.db import models import settings -#from private_files import PrivateFileField import datamaster_modeles.models as ref diff --git a/src/auf.django.emploi/auf/django/emploi/views.py b/src/auf.django.emploi/auf/django/emploi/views.py index ccca850..db6a1b2 100755 --- a/src/auf.django.emploi/auf/django/emploi/views.py +++ b/src/auf.django.emploi/auf/django/emploi/views.py @@ -5,9 +5,8 @@ from django.shortcuts import render_to_response, redirect, get_object_or_404 from django.template import Context, RequestContext, Template from django.core.mail import EmailMultiAlternatives -from forms import * -from models import * -from project.recrutement import models as recr +from auf.django.emploi import models +from auf.django.emploi import forms def postuler_appel_offre(request): vars = dict() -- 1.7.10.4