1621: Région dans le listing d'offre d'emploi
authornilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Fri, 10 Jun 2011 14:17:34 +0000 (10:17 -0400)
committernilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Fri, 10 Jun 2011 14:17:34 +0000 (10:17 -0400)
Retrait du filtre par région
Permettre uniquement de voir les régions du user dans le choice

project/recrutement/admin.py
project/recrutement/forms.py
project/recrutement/models.py
project/recrutement/templates/recrutement/pieces.html
project/recrutement/templates/recrutement/postuler_appel_offre.html
project/recrutement/views.py

index a0b42bd..7f490c1 100644 (file)
@@ -12,8 +12,7 @@ from recrutement.models import *
 
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
-    list_display = ('nom', 'resume', 'date_limite', '_candidatsList', )
-    list_filter = ('region',)
+    list_display = ('nom', 'resume', 'date_limite', '_candidatsList', 'region')
         
     def _candidatsList(self, obj):     
         return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats \
@@ -21,6 +20,19 @@ class OffreEmploiAdmin(VersionAdmin):
     _candidatsList.allow_tags = True 
     _candidatsList.short_description = "Liste des candidats"   
 
+    def get_form(self, request, obj=None, **kwargs):
+
+        form = super(OffreEmploiAdmin, self).get_form(request, obj, **kwargs)
+        if form.declared_fields.has_key('region'):
+            region_field = form.declared_fields['region']
+        else:
+            region_field = form.base_fields['region']
+
+        user = get_object_or_404(UserProfile, user=request.user)
+        region_ids = [g.id for g in user.regions.all()]
+        region_field.queryset = Region.objects.filter(id__in=region_ids)
+        return form
+
     def queryset(self, request):
         """
         Spécifie un queryset limité, autrement Django exécute un 
@@ -29,22 +41,17 @@ class OffreEmploiAdmin(VersionAdmin):
         modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
         génération d'une requête infinie.
         """
-  #      user_email = request.user.email
-  #      user = get_object_or_404(Employe, courriel=user_email)
-  #      user_implantation = user.implantation
-  #      implantation_region = get_object_or_404(Implantation, 
-  #                              id=user_implantation.id)
-  #      user_region = get_object_or_404(Region, 
-  #                      id=implantation_region.region.id)
+        user = get_object_or_404(UserProfile, user=request.user)
+        region_ids = [g.id for g in user.regions.all()]
         qs = self.model._default_manager.get_query_set()
-        return qs.select_related('offre_emploi')#.filter(region=user_region.id)
+        return qs.select_related('offre_emploi').filter(region__in=region_ids)
 
 class CandidatPieceInline(admin.TabularInline):
     model = CandidatPiece
     extra = 1
 
 class EvaluateurInline(admin.TabularInline):
-    model = User.candidats.through
+    model = UserProfile.candidats.through
     extra = 1
 
 class CandidatAdmin(VersionAdmin):
@@ -100,8 +107,9 @@ class CandidatAdmin(VersionAdmin):
         """
 
         qs = self.model._default_manager.get_query_set()
-        user = get_object_or_404(User,user=obj.user)
+        user = get_object_or_404(UserProfile,user=obj.user)
         ids = [c.id for c in user.candidats.all()]
+        #conditions try except, car sinon erreur
         return qs.select_related('candidats').filter(id__in=ids)
 
     def _actions(self, obj):
@@ -148,5 +156,5 @@ class CandidatEvaluationAdmin(VersionAdmin):
 admin.site.register(OffreEmploi, OffreEmploiAdmin)
 admin.site.register(Candidat, CandidatAdmin)
 admin.site.register(CandidatPiece, CandidatPieceAdmin)
-admin.site.register(User, EvaluateurAdmin)
+admin.site.register(UserProfile, EvaluateurAdmin)
 admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)
index a978d21..c1a178c 100644 (file)
@@ -26,7 +26,7 @@ class CandidatEvaluationForm(ModelForm):
 
 class EvaluateurForm(forms.Form):
     evaluateurs = forms.ModelMultipleChoiceField(queryset=
-                    recr.User.objects.all())
+                    recr.UserProfile.objects.all())
 
     def __init__(self, *args, **kwargs):
         self.candidats = kwargs.pop('candidats')
@@ -40,7 +40,8 @@ class EvaluateurForm(forms.Form):
 ################################################################################
 # OFFRE EMPLOI
 ################################################################################
-class CandidatPieceForm(inlineformset_factory(recr.Candidat, recr.CandidatPiece)):
+class CandidatPieceForm(inlineformset_factory(recr.Candidat,
+                        recr.CandidatPiece)):
     pass
 
 class PostulerOffreEmploiForm(ModelForm):
@@ -48,8 +49,13 @@ class PostulerOffreEmploiForm(ModelForm):
         self.offre_emploi = kwargs.pop('offre_emploi')      
         super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
 
-    def save(self):
-        super(PostulerOffreEmploiForm, self).save()
+    def save(self, *args, **kwargs): 
+        kwargs2 = kwargs.copy()
+        kwargs2['commit'] = False
+        postulation = super(PostulerOffreEmploiForm, self).save(*args, **kwargs2)
+        if 'commit' not in kwargs or kwargs['commit']:
+            postulation.save()
+        return postulation
 
     class Meta:
         model = recr.Candidat   
index ede4f1e..290a5de 100755 (executable)
@@ -112,13 +112,14 @@ class CandidatPiece(models.Model):
                 related_name='candidat_piece') 
     nom = models.CharField(max_length=255)
     #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
-    path = models.FileField(upload_to=candidat_piece_dispatch, 
+    path = models.FileField(verbose_name="Fichier", 
+            upload_to=candidat_piece_dispatch, 
             storage=storage_prive, )
 
     def __unicode__(self):
         return '%s' % (self.nom)
 
-class User(models.Model):
+class UserProfile(models.Model):
     user = models.ForeignKey("auth.User", unique=True)
     candidats = models.ManyToManyField(Candidat, verbose_name='Candidats', 
                 blank=True, null=True,related_name="evaluateurs")
@@ -128,12 +129,12 @@ class User(models.Model):
     def __unicode__(self):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
-User.profile = property(lambda u: User.objects.get_or_create(user=u)[0])
+UserProfile.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
 
 class CandidatEvaluation(models.Model):
     candidat = models.ForeignKey(Candidat, db_column='candidat', 
                 related_name='+') 
-    evaluateur = models.ForeignKey(User, db_column='evaluateur', 
+    evaluateur = models.ForeignKey(UserProfile, db_column='evaluateur', 
                     related_name='+') 
     note = models.IntegerField(choices=NOTES, blank=True, null=True)
     commentaire = models.TextField(null=True, blank=True)
index f853581..d8587d7 100644 (file)
@@ -14,8 +14,8 @@
     <tr>
         <td>
             {{ f.errors }}
-            {% if f.initial.path %}
-                <a href="{{ f.initial.path.url }}" target="_blank">Télécharger</a>
+            {% if f.initial.fichier %}
+                <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
             {% endif %}
         </td>
         {% for field in f %} 
index 5008cf5..912cd78 100644 (file)
@@ -15,7 +15,7 @@
     <h2>Poster pour un appel d'offre d'emploi</h2>
     </div>
        
-    <form action="" method="post">
+    <form action="" method="post" enctype="multipart/form-data">
         <fieldset>
             <h2>Informations personnelles</h2>
             <table id="informations_personnelles">
index 7f14a9c..a7b96ab 100755 (executable)
@@ -16,7 +16,6 @@ def index(request):
                                 RequestContext(request))
 
 def evaluer_candidat(request):
-    
     candidat = get_object_or_404(Candidat, id__in=request.GET.get('id'))
     if request.method == "POST":
         candidat_evaluation = CandidatEvaluation()
@@ -54,22 +53,29 @@ def affecter_evaluateurs_candidats(request):
             Context(c), context_instance = RequestContext(request))
 
 def postuler_appel_offre(request):
+
     vars = dict()
     offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
     candidat = Candidat()
     candidat.offre_emploi = offre_emploi
 
     if request.method == "POST":
-        form = PostulerOffreEmploiForm(request.POST, request.FILES,
+        form = PostulerOffreEmploiForm(request.POST,
                  instance=candidat, offre_emploi=offre_emploi)
         piecesForm = CandidatPieceForm(request.POST, request.FILES,
                     instance=candidat)
+        print form.errors
         if form.is_valid() and piecesForm.is_valid():
-            form.save()
+            offre = form.save()
+            piecesForm.instance = offre
+            piecesForm.save()
             messages.add_message(request, messages.SUCCESS, 
                             "Votre application à l'appel d'offre d'emploi a \
                             été effectuée.")
             return redirect("admin:recrutement_offreemploi_changelist")
+        else:
+            messages.add_message(request, messages.ERROR,
+                        'Il y a des erreurs dans le formulaire.')
     else:
         form = PostulerOffreEmploiForm(instance=candidat,
                 offre_emploi=offre_emploi)