WF embauche
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 2 May 2011 20:19:28 +0000 (16:19 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 2 May 2011 20:19:28 +0000 (16:19 -0400)
project/dae/decorators.py
project/dae/urls.py
project/dae/views.py

index 55c940a..84cfbff 100644 (file)
@@ -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,28 @@ 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)
+    return inner
index c56a866..52688d6 100644 (file)
@@ -15,7 +15,7 @@ urlpatterns = patterns(
     url(r'^embauches$', 'embauches_liste', name='dae_embauches_liste'),
     url(r'^embauche$', 'embauche', name='embauche'),
     url(r'^embauche/consulter/(?P<dossier_id>.*)$', 'embauche_consulter', name='embauche_consulter'),
-    url(r'^embauche/(?P<key>.*)/(?P<dossier>.*)$', 'embauche', name='embauche'),
+    url(r'^embauche/(?P<key>.*)/(?P<dossier_id>.*)$', 'embauche', name='embauche'),
     url(r'^embauche/(?P<key>.*)$', 'embauche', name='embauche'),
 
     # ajax    
index bf02d0f..b85bebf 100644 (file)
@@ -17,7 +17,7 @@ from reversion.models import Version
 from project.dae import models as dae
 from project.rh_v1 import models as rh
 
-from decorators import dae_groupe_requis, poste_dans_ma_region_ou_service
+from decorators import dae_groupe_requis, poste_dans_ma_region_ou_service, dossier_dans_ma_region_ou_service
 from forms import *
 
 @dae_groupe_requis
@@ -128,7 +128,7 @@ def get_dossiers_connexes(poste):
 
 
 @dae_groupe_requis
-@poste_dans_ma_region_ou_service
+@dossier_dans_ma_region_ou_service
 def embauche_consulter(request, dossier_id):
     dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
 
@@ -149,7 +149,8 @@ def embauche_consulter(request, dossier_id):
     return render_to_response('dae/embauche_consulter.html', vars, RequestContext(request))
 
 @dae_groupe_requis
-def embauche(request, key=None, dossier=None):
+@dossier_dans_ma_region_ou_service
+def embauche(request, key=None, dossier_id=None):
     """ Formulaire d'autorisation d'embauche. """
     if not key:
         vars = dict(step='poste', form=ChoosePosteForm())
@@ -160,7 +161,7 @@ def embauche(request, key=None, dossier=None):
         if source != 'dae':
             return Http404
         poste = get_object_or_404(dae.Poste, pk=id)
-        if not dossier:
+        if not dossier_id:
             vars['new'] = True
 
         if request.POST:
@@ -191,10 +192,10 @@ def embauche(request, key=None, dossier=None):
                     data['employe'] = 'dae-%s' % employe.id
                     employe_form = EmployeForm(data, instance=employe)
 
-                if not dossier:
+                if not dossier_id:
                     dossier = dae.Dossier(poste=poste, employe=employe)
                 else:
-                    dossier = get_object_or_404(dae.Dossier, pk=dossier)
+                    dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
                 dossier_form = DossierForm(request.POST, instance=dossier)
                 piecesForm = DossierPieceForm(request.POST, request.FILES, instance=dossier)
                 justificationsNouveauForm = JustificationNouvelEmployeForm(request.POST, instance=dossier)
@@ -247,8 +248,8 @@ def embauche(request, key=None, dossier=None):
             # Initialisation d'un formulaire vide
             dossier_rh = rh.Dossier()
             poste_rh = poste.id_rh
-            if dossier:
-                dossier = get_object_or_404(dae.Dossier, pk=dossier)
+            if dossier_id:
+                dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
                 employe = dossier.employe
                 data = dict(employe='dae-%s' % employe.id)
                 employe_form = EmployeForm(initial=data, instance=employe)
@@ -276,6 +277,7 @@ def embauche(request, key=None, dossier=None):
     return render_to_response('dae/embauche.html', vars,
                               RequestContext(request))
 @dae_groupe_requis
+@dossier_dans_ma_region_ou_service
 def embauches_liste(request):
     """ Liste des embauches. """
     vars = dict()