Débug de pièces jointes
[auf_rh_dae.git] / project / recrutement / admin.py
index 109b9cd..162520a 100644 (file)
@@ -5,17 +5,20 @@ from django.http import HttpResponseRedirect
 from django.contrib import admin
 from django.shortcuts import get_object_or_404
 from django.core.files.storage import default_storage
+from django.forms.models import BaseInlineFormSet
 
 from reversion.admin import VersionAdmin
 from datamaster_modeles.models import Employe, Implantation, Region
-from django.forms.models import BaseInlineFormSet
 
 from project.rh import models as rh
 from recrutement.models import *
-from recrutement.workflow import grp_administrateurs_recrutement,\
-                            grp_evaluateurs_recrutement, grp_drh_recrutement
+from recrutement.workflow import grp_evaluateurs_recrutement, \
+                    grp_drh_recrutement, grp_directeurs_bureau_recrutement, \
+                    grp_administrateurs_recrutement
 from recrutement.forms import *
 
+from project.lib import get_employe_from_user as get_emp
+
 class ProxyEvaluateur(Evaluateur.offres_emploi.through):
     """
     Ce proxy sert uniquement dans l'admin à disposer d'un libellé
@@ -60,11 +63,30 @@ class OffreEmploiAdmin(VersionAdmin):
     _candidatsList.allow_tags = True 
     _candidatsList.short_description = "Afficher la liste des candidats"
 
+    def get_form(self, request, obj=None, **kwargs):
+        form = super(OffreEmploiAdmin, self).get_form(request, obj, **kwargs)
+        employe = get_emp(request.user)
+        import pdb;pdb.set_trace()
+        user_groupes = request.user.groups.all()
+        if not grp_drh_recrutement in user_groupes and \
+            not request.user.is_superuser:
+            if form.declared_fields.has_key('region'):
+                region_field = form.declared_fields['region']
+            else:
+                region_field = form.base_fields['region']
+                import pdb;pdb.set_trace()
+                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):
         qs = self.model._default_manager.get_query_set()
         # Si user est superuser afficher toutes les offres d'emploi  
         user_groupes = request.user.groups.all()
         if not grp_drh_recrutement in user_groupes and \
+            not grp_directeurs_bureau_recrutement in user_groupes and \
+            not grp_administrateurs_recrutement in user_groupes and \
             not request.user.is_superuser:
             """
             Si le user n'est ni un évaluateur ni un administrateur régional,
@@ -75,19 +97,10 @@ class OffreEmploiAdmin(VersionAdmin):
                 try:
                     user = Evaluateur.objects.get(user=request.user)               
                 except Evaluateur.DoesNotExist:       
-                    return qs.none()     
-            elif grp_administrateurs_recrutement in user_groupes: 
-                try:
-                    user = AdministrateurRegional.objects.get(user=request.user)
-                except AdministrateurRegional.DoesNotExist:       
-                    return qs.none()     
+                    return qs.none()       
             else:
                 return qs.none()   
                       
-            if type(user) is AdministrateurRegional:
-                region_ids = [g.id for g in user.regions.all()]
-                return qs.select_related('offre_emploi').\
-                        filter(region__in=region_ids)
             if type(user) is Evaluateur:        
                 candidats = [g for g in user.candidats.all()]
                 offre_emploi_ids = [c.offre_emploi.id for c in candidats]
@@ -96,9 +109,19 @@ class OffreEmploiAdmin(VersionAdmin):
             return qs.none()
         return qs.select_related('offre_emploi')
 
+    def has_add_permission(self, request):
+        user_groupes = request.user.groups.all()
+        if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
+            return True
+        return False  
+
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return True
@@ -136,6 +159,8 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
                                                                             obj)
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return HttpResponseRedirect(reverse\
                                 ('admin:recrutement_offreemploi_changelist'))
@@ -152,6 +177,8 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
         user_groupes = request.user.groups.all()
         if grp_evaluateurs_recrutement in user_groupes or \
             grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return True
         return False   
@@ -272,23 +299,28 @@ class CandidatAdmin(VersionAdmin):
     calculer_moyenne.allow_tags = True
     calculer_moyenne.short_description = "Moyenne des notes"
 
-    def add_delete_permission(self, request, obj=None) :
+    def has_add_permission(self, request):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return True
-        return False    
-
-    def has_add_permission(self, request):
-        return self.add_delete_permission(request, request)
+        return False   
 
     def has_delete_permission(self, request, obj=None):
-        return self.add_delete_permission(request, request)
+        user_groupes = request.user.groups.all()
+        if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
+            return True
+        return False   
 
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return True
@@ -307,6 +339,8 @@ class CandidatAdmin(VersionAdmin):
         # Si user est superuser afficher tous les candidats       
         user_groupes = request.user.groups.all()
         if not grp_drh_recrutement in user_groupes and \
+            not grp_directeurs_bureau_recrutement in user_groupes and \
+            not grp_administrateurs_recrutement in user_groupes and \
             not request.user.is_superuser:
             # Si le user n'est ni un évaluateur ni un administrateur régional,
             # retourner none
@@ -317,13 +351,6 @@ class CandidatAdmin(VersionAdmin):
                     user = Evaluateur.objects.get(user=request.user)
                 except Evaluateur.DoesNotExist:       
                     return qs.none()       
-                """
-                elif grp_administrateurs_recrutement in user_groupes: 
-                    try:
-                        user = AdministrateurRegional.objects.get(user=obj.user)
-                    except AdministrateurRegional.DoesNotExist:       
-                        return qs.none()    
-                """
             else:
                 return qs.none()   
             ids = [c.id for c in user.candidats.all()]
@@ -360,6 +387,8 @@ class ProxyCandidatAdmin(CandidatAdmin):
         response = super(ProxyCandidatAdmin, self).response_change(request, obj)
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return HttpResponseRedirect(reverse\
                                     ('admin:recrutement_candidat_changelist'))
@@ -375,8 +404,9 @@ class ProxyCandidatAdmin(CandidatAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes or \
             grp_evaluateurs_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return True
         return False   
@@ -436,10 +466,6 @@ class CandidatEvaluationAdmin(VersionAdmin):
         un lien pour Évaluer le candidat.
         Sinon afficher la note.
         """
-        #evaluateur = obj.evaluateur
-        #candidat = obj.candidat
-        #candidat_evaluation = CandidatEvaluation.objects.get(candidat=candidat, evaluateur=evaluateur)
-        #import pdb;pdb.set_trace()
         if obj.note is None:
             return "<a href='%s'>Candidat non évalué</a>" % \
                 (reverse('admin:recrutement_candidatevaluation_change', 
@@ -493,7 +519,9 @@ class CandidatEvaluationAdmin(VersionAdmin):
         """
         qs = self.model._default_manager.get_query_set()
         user_groupes = request.user.groups.all()
-        if grp_drh_recrutement in user_groupes  or \
+        if grp_drh_recrutement in user_groupes or \
+            grp_directeurs_bureau_recrutement in user_groupes or \
+            grp_administrateurs_recrutement in user_groupes or \
             request.user.is_superuser:
             return qs.select_related('offre_emploi')