Modifications pour l'affichage des objects, selon si le user connecté possède un...
authornilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Wed, 15 Jun 2011 14:29:25 +0000 (10:29 -0400)
committernilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Wed, 15 Jun 2011 14:29:25 +0000 (10:29 -0400)
project/recrutement/admin.py
project/recrutement/models.py

index 8df507f..c69e2c0 100644 (file)
@@ -21,24 +21,30 @@ class OffreEmploiAdmin(VersionAdmin):
     _candidatsList.short_description = "Liste des candidats"   
 
     def get_form(self, request, obj=None, **kwargs):
+        """
+        Affiche la liste des régions, seulement si le user
+        connecté possède un UserProfile
+        """
         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 = UserProfile.objects.get(user=request.user)
+        try:
+            user = UserProfile.objects.get(user=request.user)
+        except UserProfile.DoesNotExist:
+            region_field.queryset = Region.objects.none()
+            return form
+
         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 
-        select_related() sans paramètre, ce qui a pour effet de charger tous 
-        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
-        modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
-        génération d'une requête infinie.
+        """ 
+        N'affiche la liste de candidats que si le user connecté 
+        possède un UserProfile
         """
         qs = self.model._default_manager.get_query_set()
         try:
@@ -115,16 +121,20 @@ class CandidatAdmin(VersionAdmin):
 
         return HttpResponseRedirect(reverse('affecter_evaluateurs_candidats')+
                 "?ids=%s" % (",".join(selected)))
-    affecter_candidats_evaluateur.short_description = "Affecter evaluateur"
+    affecter_candidats_evaluateur.short_description = u'Affecter évaluateur'
 
     # Évaluer un candidat
     def evaluer_candidat(self, obj):
         return "<a href='%s?id=%s'>Évaluer le candidat \
                 </a>" % (reverse('evaluer_candidat'), obj.id)
     evaluer_candidat.allow_tags = True    
-    evaluer_candidat.short_description = "Évaluer"
+    evaluer_candidat.short_description = 'Évaluer'
 
     def get_form(self, request, obj=None, **kwargs):
+        """
+        Affiche la liste des offres d'emploi, seulement si le user
+        connecté possède un UserProfile
+        """
         form = super(CandidatAdmin, self).get_form(request, obj, **kwargs)
         if form.declared_fields.has_key('offre_emploi'):
             region_field = form.declared_fields['offre_emploi']
@@ -148,6 +158,7 @@ class CandidatAdmin(VersionAdmin):
         les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
         modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
         génération d'une requête infinie.
+        
         """
 
         qs = self.model._default_manager.get_query_set()
@@ -176,6 +187,8 @@ class CandidatPieceAdmin(admin.ModelAdmin):
         les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
         modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
         génération d'une requête infinie.
+        Affiche la liste de candidats que si le user connecté 
+        possède un UserProfile
         """
         qs = self.model._default_manager.get_query_set()
         return qs.select_related('candidat')
@@ -186,22 +199,95 @@ class EvaluateurAdmin(VersionAdmin):
         (None, {'fields': ('candidats',)}),
     )
 
+    def get_form(self, request, obj=None, **kwargs):
+        """
+        Affiche la liste des users, regions et candidats, seulement si le user
+        connecté possède un UserProfile
+        """
+        form = super(EvaluateurAdmin, self).get_form(request, obj, **kwargs)
+        if form.declared_fields.has_key('user'):
+            permission_field = form.declared_fields['user']
+        else:
+            permission_field = form.base_fields['user']
+
+        if form.declared_fields.has_key('regions'):
+            region_field = form.declared_fields['regions']
+        else:
+            region_field = form.base_fields['regions']
+
+        if form.declared_fields.has_key('candidats'):
+            candidats_field = form.declared_fields['candidats']
+        else:
+            candidats_field = form.base_fields['candidats']
+
+        try:
+            user = UserProfile.objects.get(user=request.user)
+        except UserProfile.DoesNotExist:
+            region_field.queryset = Region.objects.none()
+            permission_field.queryset = UserProfile.objects.none()
+            candidats_field.queryset = Candidat.objects.none()
+            return form
+
+        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):
+        """ 
+        Affiche la liste d'évaluateur que si le user connecté 
+        possède un UserProfile
+        """
+        qs = self.model._default_manager.get_query_set()
+        try:
+            user = UserProfile.objects.get(user=request.user)
+        except UserProfile.DoesNotExist:
+            return qs.none()
+        
+        return qs
+
 class CandidatEvaluationAdmin(VersionAdmin):
     list_display = ('candidat', 'evaluateur', 'note', 'commentaire', 'date', )
 
-    def queryset(self, obj):
+    def get_form(self, request, obj=None, **kwargs):
         """
-        Spécifie un queryset limité, autrement Django exécute un 
-        select_related() sans paramètre, ce qui a pour effet de charger tous 
-        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
-        modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
-        génération d'une requête infinie.
+        Affiche la liste des candidats et évaluateur, seulement si le user
+        connecté possède un UserProfile
+        """
+        form = super(CandidatEvaluationAdmin, self).get_form(request, obj,
+                **kwargs)
+        if form.declared_fields.has_key('evaluateur'):
+            evaluateur_field = form.declared_fields['evaluateur']
+        else:
+            evaluateur_field = form.base_fields['evaluateur']
+
+        if form.declared_fields.has_key('candidat'):
+            candidats_field = form.declared_fields['candidat']
+        else:
+            candidats_field = form.base_fields['candidat']
+
+        try:
+            user = UserProfile.objects.get(user=request.user)
+        except UserProfile.DoesNotExist:
+            evaluateur_field.queryset = UserProfile.objects.none()
+            candidats_field.queryset = Candidat.objects.none()
+            return form
+
+        return form
+
+    def queryset(self, request):
+        """ 
+        Affiche la liste d'évaluation que si le user connecté 
+        possède un UserProfile
         """
         qs = self.model._default_manager.get_query_set()
-        return qs.select_related('offre_emploi')
+        try:
+            user = UserProfile.objects.get(user=request.user)
+        except UserProfile.DoesNotExist:
+            return qs.none()
+
+        return qs
 
 admin.site.register(OffreEmploi, OffreEmploiAdmin)
 admin.site.register(Candidat, CandidatAdmin)
-admin.site.register(CandidatPiece, CandidatPieceAdmin)
 admin.site.register(UserProfile, EvaluateurAdmin)
 admin.site.register(CandidatEvaluation, CandidatEvaluationAdmin)
index 1dbf337..671ed86 100755 (executable)
@@ -140,7 +140,7 @@ class CandidatPiece(models.Model):
 
 class UserProfile(models.Model):
     user = models.ForeignKey("auth.User", unique=True,
-            verbose_name="évaluateur")
+            verbose_name="permission")
     candidats = models.ManyToManyField(Candidat, verbose_name='candidats', 
                 blank=True, null=True,related_name="evaluateurs")
     regions = models.ManyToManyField(ref.Region,