[#2245] Liste des DAE finalisées
[auf_rh_dae.git] / project / dae / managers.py
index 8edcf87..6abb6f7 100644 (file)
@@ -2,36 +2,43 @@
 
 from django.db import models
 from django.db.models import Q
-from utils import is_user_dans_service, get_employe_from_user
+from utils import get_employe_from_user
 from workflow import POSTE_ETAT_HAUTE_DIRECTION, \
-                     POSTE_ETAT_POLE_FINANCIER, \
-                     POSTE_ETAT_REFUSE, \
-                     DOSSIER_ETAT_REFUSE, \
+                     POSTE_ETAT_ACCIOR, \
+                     POSTE_ETAT_ABF, \
+                     DOSSIER_ETAT_ACCIOR, \
+                     DOSSIER_ETAT_ABF, \
                      MAP_GROUPE_ETATS_A_FAIRE
 from workflow import dae_groupes, \
                      grp_administrateurs, \
-                     grp_gestionnaires, \
                      grp_directeurs_bureau, \
                      grp_drh, \
-                     grp_pole_financier, \
+                     grp_accior, \
+                     grp_abf, \
                      grp_haute_direction, \
                      grp_service_utilisateurs, \
-                     grp_directeurs_service, \
                      grp_correspondants_rh
 
 
 class SecurityManager(models.Manager):
 
+    prefixe_service = None
     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:
+                rien_a_faire = False
                 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):
@@ -53,38 +60,39 @@ class SecurityManager(models.Manager):
         ############################################
         # TRAITEMENT NORMAL
         ############################################        
-
-        # 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 })
+        q = Q(**{ self.prefixe_implantation : employe.implantation.region })
 
-        if workflowed_model:
-            q_non_refuse = ~Q(etat__in=(POSTE_ETAT_REFUSE, DOSSIER_ETAT_REFUSE,))
-            q = q & q_non_refuse
+        # SERVICE
+        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)
 
-        # Il peut être bon que ces personnes connaissent l'état d'avancement du poste ou dossier
-        #############################################
-        ## TRAITEMENT POLE FINANCIER
-        #############################################        
-        #if workflowed_model and grp_pole_financier in user.groups.all():
-        #    liste = self.get_query_set().filter(etat=POSTE_ETAT_POLE_FINANCIER)
 
-        #############################################
-        ## 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)
+        ############################################
+        # 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 ABF
+        ############################################        
+        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():
+            liste = self.get_query_set().all()
 
         ############################################
         # TRAITEMENT DRH
         ############################################        
         if grp_drh in user.groups.all():
-            liste = self.get_query_set()
+            liste = self.get_query_set().all()
 
         return liste
 
@@ -93,7 +101,8 @@ class PosteManager(SecurityManager):
     """
     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)
@@ -103,6 +112,7 @@ class PosteManager(SecurityManager):
             'id_rh',
             'responsable',
             'implantation',
+            'implantation.bureau_rattachement',
             'type_poste',
             'service',
             'classement_min',
@@ -115,7 +125,15 @@ class PosteManager(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)