workflow poste
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 2 May 2011 15:33:26 +0000 (11:33 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Mon, 2 May 2011 15:33:26 +0000 (11:33 -0400)
project/dae/forms.py
project/dae/models.py
project/dae/views.py
project/dae/workflow.py

index 80b2774..7c1e94b 100644 (file)
@@ -68,7 +68,7 @@ class JustificationAutreEmployeForm(inlineformset_factory(dae.Dossier,
                 j.save()
         super(self.__class__, self).__init__(*args, **kwargs)
 
-class PosteForm(WorkflowFormMixin):
+class PosteForm(forms.ModelForm):
     """ Formulaire des postes. """
     
     
index ab9aefe..23a34f7 100644 (file)
@@ -5,28 +5,23 @@ from django.conf import settings
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.db.models import Q
-from django.contrib.auth.models import Group
 import reversion
 from workflow import PosteWorkflow, DossierWorkflow
+from workflow import dae_groupes, \
+                     grp_administrateurs, \
+                     grp_gestionnaires, \
+                     grp_directeurs_bureau, \
+                     grp_drh, \
+                     grp_pole_financier, \
+                     grp_haute_direction, \
+                     grp_service_utilisateurs, \
+                     grp_directeurs_service, \
+                     grp_correspondants_rh
+
 import datamaster_modeles.models as ref
 from rh_v1 import models as rh
 from utils import is_user_dans_service, get_employe_from_user
 
-# Groupes impliqués dans le Worflow
-grp_administrateurs, created = Group.objects.get_or_create(name='Administrateurs')
-grp_gestionnaires, created = Group.objects.get_or_create(name='Gestionnaires')
-grp_directeurs_bureau, created = Group.objects.get_or_create(name='Directeurs de bureau')
-grp_drh, created  = Group.objects.get_or_create(name='DRH')
-grp_pole_financier, created  =  Group.objects.get_or_create(name='Pôle financier')
-grp_haute_direction, created  = Group.objects.get_or_create(name='Haute direction')
-grp_service_utilisateurs, created = Group.objects.get_or_create(name='Service utilisateurs')
-grp_directeurs_service, created  = Group.objects.get_or_create(name='Directeurs de service / pôle')
-grp_correspondants_rh, created = Group.objects.get_or_create(name='Correspondants RH')
-
-dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
-               grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
-               grp_directeurs_service, grp_correspondants_rh, )
-
 STATUT_RESIDENCE_CHOICES = (
     ('local', 'Local'),
     ('expat', 'Expatrié'),
@@ -81,15 +76,43 @@ class PosteManager(models.Manager):
     def ma_region_ou_service(self, user):
         """
         Filtrage des postes en fonction du user connecté (region / service)
+        On s'intéresse aussi au groupe auquel appartient le user car certains groupes
+        peuvent tout voir.
         """
-        # SERVICE
+
         employe = get_employe_from_user(user)
+
+        ############################################
+        # TRAITEMENT NORMAL
+        ############################################        
+
+        # SERVICE
         if is_user_dans_service(user):
             q = Q(implantation=employe.implantation)
         # REGION
         else:
             q = Q(implantation__region=employe.implantation.region)
-        return self.get_query_set().filter(q)
+        liste = self.get_query_set().filter(q)
+
+        ############################################
+        # TRAITEMENT POLE FINANCIER
+        ############################################        
+        if grp_pole_financier in user.groups.all():
+            liste = self.get_query_set().filter(etat=POSTE_ETAT_FINANCE)
+
+        ############################################
+        # TRAITEMENT HAUTE DIRECTION
+        ############################################        
+        if grp_pole_financier in user.groups.all():
+            liste = self.get_query_set().filter(etat=POSTE_ETAT_HAUTE_DIRECTION)
+
+        ############################################
+        # TRAITEMENT DRH
+        ############################################        
+        if grp_drh in user.groups.all():
+            liste = self.get_query_set()
+        
+        return liste
 
 class Poste(PosteWorkflow, models.Model):
     # Modèle existant
index 32fa704..4ddc9a5 100644 (file)
@@ -43,6 +43,7 @@ def poste_consulter(request, key):
     return render_to_response('dae/poste_consulter.html', vars, RequestContext(request))
 
 @dae_groupe_requis
+@poste_dans_ma_region_ou_service
 def poste(request, key=None):
     """ Formulaire pour un poste.
 
index 4960cb2..b575914 100644 (file)
@@ -1,32 +1,88 @@
 # -*- encoding: utf-8 -*-
 
+from django.contrib.auth.models import Group
 from auf.django.workflow.models import WorkflowMixin
 
-#codes actions
-POSTE_ACTION_CREER = 'CREER'
-POSTE_ACTION_TERMINER = 'TERMINER'
+# Groupes impliqués dans le Worflow
+grp_administrateurs, created = Group.objects.get_or_create(name='Administrateurs')
+grp_gestionnaires, created = Group.objects.get_or_create(name='Gestionnaires')
+grp_directeurs_bureau, created = Group.objects.get_or_create(name='Directeurs de bureau')
+grp_drh, created  = Group.objects.get_or_create(name='DRH')
+grp_pole_financier, created  =  Group.objects.get_or_create(name='Pôle financier')
+grp_haute_direction, created  = Group.objects.get_or_create(name='Haute direction')
+grp_service_utilisateurs, created = Group.objects.get_or_create(name='Service utilisateurs')
+grp_directeurs_service, created  = Group.objects.get_or_create(name='Directeurs de service / pôle')
+grp_correspondants_rh, created = Group.objects.get_or_create(name='Correspondants RH')
+
+dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
+               grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
+               grp_directeurs_service, grp_correspondants_rh, )
 
 # codes états
 POSTE_ETAT_BROUILLON = 'BROUILLON'
-POSTE_ETAT_TERMINE = 'TERMINE'
+POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE = 'DIRECTEUR_BUR_SRV'
+POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
+POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
+POSTE_ETAT_POLE_FINANCIER = 'FINANCE'
+POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
+POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
+
+#codes actions
+POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
+POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE = POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
+POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
+POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
+POSTE_ACTION_ENVOYER_POLE_FINANCIER = POSTE_ETAT_POLE_FINANCIER
+POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
+POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
 
 #libellés états
 POSTE_ETATS = {
     POSTE_ETAT_BROUILLON : u'Brouillon',
-    POSTE_ETAT_TERMINE : u'Terminé',
+    POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE : u'Directeur de bureau, pôle ou service',
+    POSTE_ETAT_ADMINISTRATEUR : u'Adminstrateur',
+    POSTE_ETAT_DRH_CONTROLE : u'Contrôle DRH',
+    POSTE_ETAT_POLE_FINANCIER : u'Pôle financier',
+    POSTE_ETAT_HAUTE_DIRECTION : u'Haute direction',
+    POSTE_ETAT_DRH_FINALISATION : u'Finalisation DRH',
     }
 
 # définition du worflow séquentiel
 POSTE_ACTIONS = {
-    POSTE_ACTION_CREER : {
+    POSTE_ACTION_ENVOYER_BROUILLON : {
         'nom' : u'Créer',
         'etat_initial' : None,
         'etat_final' : POSTE_ETAT_BROUILLON,
     },
-    POSTE_ACTION_TERMINER : {
-        'nom' : u'Créer',
+    POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE : {
+        'nom' : u'Envoyer',
         'etat_initial' : POSTE_ETAT_BROUILLON,
-        'etat_final' : POSTE_ETAT_TERMINE,
+        'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
+    },
+    POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
+        'nom' : u'Envoyer',
+        'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
+        'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
+    },
+    POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
+        'nom' : u'Envoyer',
+        'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE, POSTE_ETAT_ADMINISTRATEUR, ),
+        'etat_final' : POSTE_ETAT_DRH_CONTROLE,
+    },
+    POSTE_ACTION_ENVOYER_POLE_FINANCIER : {
+        'nom' : u'Envoyer',
+        'etat_initial' : POSTE_ETAT_DRH_CONTROLE,
+        'etat_final' : POSTE_ETAT_POLE_FINANCIER,
+    },
+    POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
+        'nom' : u'Envoyer',
+        'etat_initial' : POSTE_ETAT_POLE_FINANCIER,
+        'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
+    },
+    POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
+        'nom' : u'Envoyer',
+        'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION,
+        'etat_final' : POSTE_ETAT_DRH_FINALISATION,
     },
 }
 
@@ -38,11 +94,44 @@ class PosteWorkflow(WorkflowMixin):
     class Meta:
         abstract = True
 
-    def acces_creer(self, action, request):
-        return True
 
-    def acces_terminer(self, action, request):
-        return True
+    def acces_directeur_bur_srv(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_administrateurs, grp_gestionnaires, grp_service_utilisateurs, grp_correspondants_rh, grp_drh,):
+                return True
+        return False
+
+    def acces_administrateur(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_directeurs_service, grp_drh,):
+                return True
+        return False
+
+    def acces_drh_controle(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_directeurs_bureau, grp_administrateurs, grp_drh,):
+                return True
+        return False
+
+    def acces_finance(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_drh, ):
+                return True
+        return False
+
+    def acces_haute_direction(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_pole_financier, grp_drh, ):
+                return True
+        return False
+
+    def acces_drh_finalisation(self, action, request):
+        for g in request.user.groups.all():
+            if g in (grp_haute_direction, grp_drh, ):
+                return True
+        return False
+
+
 
 class DossierWorkflow(PosteWorkflow):