[#2245] Liste des DAE finalisées
[auf_rh_dae.git] / project / dae / managers.py
index 86b85e2..6abb6f7 100644 (file)
@@ -2,32 +2,43 @@
 
 from django.db import models
 from django.db.models import Q
 
 from django.db import models
 from django.db.models import Q
-from utils import is_user_dans_service, get_employe_from_user
-from workflow import POSTE_ETAT_HAUTE_DIRECTION, POSTE_ETAT_POLE_FINANCIER, MAP_GROUPE_ETATS_A_FAIRE
+from utils import get_employe_from_user
+from workflow import POSTE_ETAT_HAUTE_DIRECTION, \
+                     POSTE_ETAT_ACCIOR, \
+                     POSTE_ETAT_ABF, \
+                     DOSSIER_ETAT_ACCIOR, \
+                     DOSSIER_ETAT_ABF, \
+                     MAP_GROUPE_ETATS_A_FAIRE
 from workflow import dae_groupes, \
                      grp_administrateurs, \
 from workflow import dae_groupes, \
                      grp_administrateurs, \
-                     grp_gestionnaires, \
                      grp_directeurs_bureau, \
                      grp_drh, \
                      grp_directeurs_bureau, \
                      grp_drh, \
-                     grp_pole_financier, \
+                     grp_accior, \
+                     grp_abf, \
                      grp_haute_direction, \
                      grp_service_utilisateurs, \
                      grp_haute_direction, \
                      grp_service_utilisateurs, \
-                     grp_directeurs_service, \
                      grp_correspondants_rh
 
 
 class SecurityManager(models.Manager):
 
                      grp_correspondants_rh
 
 
 class SecurityManager(models.Manager):
 
+    prefixe_service = None
     prefixe_implantation = None
 
     def mes_choses_a_faire(self, user):
         q = Q()
     prefixe_implantation = None
 
     def mes_choses_a_faire(self, user):
         q = Q()
+        rien_a_faire = True
         for g in user.groups.all():
             etats = MAP_GROUPE_ETATS_A_FAIRE.get(g, ())
             for etat in etats:
         for g in user.groups.all():
             etats = MAP_GROUPE_ETATS_A_FAIRE.get(g, ())
             for etat in etats:
+                rien_a_faire = False
                 q = q | Q(etat=etat)
 
                 q = q | Q(etat=etat)
 
-        qs = self.ma_region_ou_service(user).filter(q)
+        if rien_a_faire:
+            qs = self.ma_region_ou_service(user).none()
+        else:
+            qs = self.ma_region_ou_service(user).filter(q)
+
         return qs
 
     def ma_region_ou_service(self, user):
         return qs
 
     def ma_region_ou_service(self, user):
@@ -36,7 +47,6 @@ class SecurityManager(models.Manager):
         On s'intéresse aussi au groupe auquel appartient le user car certains groupes
         peuvent tout voir.
         """
         On s'intéresse aussi au groupe auquel appartient le user car certains groupes
         peuvent tout voir.
         """
-
         # On s'assure que le manager travaille sur un modèle avec WF, autrement
         # on ne teste pas sur l'état
         try:
         # On s'assure que le manager travaille sur un modèle avec WF, autrement
         # on ne teste pas sur l'état
         try:
@@ -50,33 +60,40 @@ class SecurityManager(models.Manager):
         ############################################
         # TRAITEMENT NORMAL
         ############################################        
         ############################################
         # TRAITEMENT NORMAL
         ############################################        
+        # REGION
+        q = Q(**{ self.prefixe_implantation : employe.implantation.region })
 
         # SERVICE
 
         # SERVICE
-        if is_user_dans_service(user):
-            q = Q(**{ '%s' % self.prefixe_implantation : employe.implantation })
-        # REGION
-        else:
-            q = Q(**{ '%s__region' % self.prefixe_implantation : employe.implantation.region })
+        if workflowed_model and grp_service_utilisateurs in user.groups.all():
+            q = q | Q(**{ self.prefixe_service : employe.service})
+
         liste = self.get_query_set().filter(q)
 
         liste = self.get_query_set().filter(q)
 
+
+        ############################################
+        # TRAITEMENT ACCIOR
+        ############################################        
+        if workflowed_model and grp_accior in user.groups.all():
+            liste = liste | self.get_query_set().filter(Q(etat__in=(POSTE_ETAT_ACCIOR, DOSSIER_ETAT_ACCIOR,)))
+
         ############################################
         ############################################
-        # TRAITEMENT POLE FINANCIER
+        # TRAITEMENT ABF
         ############################################        
         ############################################        
-        if workflowed_model and grp_pole_financier in user.groups.all():
-            liste = self.get_query_set().filter(etat=POSTE_ETAT_POLE_FINANCIER)
+        if workflowed_model and grp_abf in user.groups.all():
+            liste = self.get_query_set().all()
 
         ############################################
         # TRAITEMENT HAUTE DIRECTION
         ############################################        
         if workflowed_model and grp_haute_direction in user.groups.all():
 
         ############################################
         # TRAITEMENT HAUTE DIRECTION
         ############################################        
         if workflowed_model and grp_haute_direction in user.groups.all():
-            liste = self.get_query_set().filter(etat=POSTE_ETAT_HAUTE_DIRECTION)
+            liste = self.get_query_set().all()
 
         ############################################
         # TRAITEMENT DRH
         ############################################        
         if grp_drh in user.groups.all():
 
         ############################################
         # TRAITEMENT DRH
         ############################################        
         if grp_drh in user.groups.all():
-            liste = self.get_query_set()
-        
+            liste = self.get_query_set().all()
+
         return liste
 
 
         return liste
 
 
@@ -84,13 +101,18 @@ class PosteManager(SecurityManager):
     """
     Chargement de tous les objets FK existants sur chaque QuerySet.
     """
     """
     Chargement de tous les objets FK existants sur chaque QuerySet.
     """
-    prefixe_implantation = "implantation"
+    prefixe_service = "service"
+    prefixe_implantation = "implantation__region"
+
+    def ma_region_ou_service(self, user):
+        return super(PosteManager, self).ma_region_ou_service(user).filter(actif=True)
 
     def get_query_set(self):
         fkeys = (
             'id_rh',
             'responsable',
             'implantation',
 
     def get_query_set(self):
         fkeys = (
             'id_rh',
             'responsable',
             'implantation',
+            'implantation.bureau_rattachement',
             'type_poste',
             'service',
             'classement_min',
             'type_poste',
             'service',
             'classement_min',
@@ -103,5 +125,17 @@ class PosteManager(SecurityManager):
 
 
 class DossierManager(SecurityManager):
 
 
 class DossierManager(SecurityManager):
-    prefixe_implantation = "poste__implantation"
+    prefixe_service = "poste__service"
+    prefixe_implantation = "poste__implantation__region"
+
+    def get_query_set(self):
+        fkeys = (
+            'poste',
+        )
+        return super(DossierManager, self).get_query_set() \
+                                        .select_related(*fkeys).all()
+
+    def ma_region_ou_service(self, user):
+        return super(DossierManager, self).ma_region_ou_service(user).filter(poste__actif=True)
+