1750: Un évaluateur doit être assignés à des offres d'emploi et non à des candidats.
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 29 Jul 2011 18:53:32 +0000 (14:53 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Fri, 29 Jul 2011 18:53:32 +0000 (14:53 -0400)
project/recrutement/admin.py
project/recrutement/forms.py
project/recrutement/models.py
project/recrutement/views.py
project/urls.py
src/auf.django.emploi/auf/django/emploi/models.py
src/auf.django.emploi/auf/django/emploi/views.py

index 9401b85..e318036 100644 (file)
@@ -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)
index a051054..b873d2b 100644 (file)
@@ -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
 ################################################################################
index ee718a4..734f4a8 100755 (executable)
@@ -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='+',) 
index 2032ec7..e51d6f8 100755 (executable)
@@ -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", 
index 072b6a5..baf021e 100644 (file)
@@ -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'),
index f8b05ce..ebf2237 100755 (executable)
@@ -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
 
index ccca850..db6a1b2 100755 (executable)
@@ -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()