protection etat WF
[auf_rh_dae.git] / project / dae / decorators.py
index 55c940a..70174e1 100644 (file)
@@ -4,7 +4,7 @@ from django.contrib import messages
 from django.contrib.auth.decorators import user_passes_test
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
-from workflow import dae_groupes
+from workflow import dae_groupes, ETATS_EDITABLE
 from project.dae import models as dae
 from project.rh_v1 import models as rh
 
@@ -72,7 +72,6 @@ def poste_dans_ma_region_ou_service(fn):
             Poste = dae.Poste
 
         postes = Poste.objects.ma_region_ou_service(user).filter(id=id)
-        print postes
         if len(postes) > 0:
             return fn(request, *args, **kwargs)
         else :
@@ -81,3 +80,57 @@ def poste_dans_ma_region_ou_service(fn):
     return inner
 
 
+def dossier_dans_ma_region_ou_service(fn):
+    """
+    Test si le user connecté appartient bien à la même région ou service que le poste.
+    """
+    def inner(request, *args, **kwargs):
+        user = request.user
+        poste_key = kwargs.get('key', None)
+        dossier_id = kwargs.get('dossier_id', None)
+
+        # Si on s'intéresse à un dossier, on teste la validation avec le poste associé
+        if dossier_id is not None:
+            dossiers = dae.Dossier.objects.ma_region_ou_service(user).filter(id=dossier_id)
+            if len(dossiers) > 0:
+                return fn(request, *args, **kwargs)
+            else :
+                msg = u"Vous n'avez pas le droit de consulter ce dossier d'embauche."
+                return redirect_interdiction(request, msg)
+
+        # Autoriser la création d'une nouvelle demande
+        if poste_key is None:
+            return fn(request, *args, **kwargs)
+        # On est en train de répondre à un poste
+        else:
+            return poste_dans_ma_region_ou_service(fn)(request, *args, **kwargs)
+    return inner
+
+def employe_dans_ma_region_ou_service(fn):
+    """
+    Test d'accès à un employé
+    """
+    def inner(request, *args, **kwargs):
+        from project.dae.forms import _employe_choices
+        liste_employes = _employe_choices(None, request)
+        autorises = [k for k, nom in liste_employes]
+        employe_key = kwargs.get('employe_key')
+        if employe_key in autorises:
+            return fn(request, *args, **kwargs)
+        else :
+            msg = u"Vous n'avez pas le droit de consulter cet employé."
+            return redirect_interdiction(request, msg)
+        
+    return inner
+
+def dossier_est_modifiable(fn):
+    def inner(request, *args, **kwargs):
+        dossier_id = kwargs.get('dossier_id', None)
+        if dossier_id is not None:
+            dossier = dae.Dossier.objects.get(id=dossier_id)
+            if dossier.etat not in ETATS_EDITABLE:
+                msg = u"Ce dossier d'embauche ne peut plus être modifié."
+                return redirect_interdiction(request, msg)
+
+        return fn(request, *args, **kwargs)
+    return inner