[#2245] Liste des DAE finalisées
[auf_rh_dae.git] / project / dae / managers.py
index 91c03a6..6abb6f7 100644 (file)
@@ -2,30 +2,51 @@
 
 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
+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, \
-                     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)
+
+        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):
         """
         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.
         """
-
         # On s'assure que le manager travaille sur un modèle avec WF, autrement
         # on ne teste pas sur l'état
         try:
@@ -39,33 +60,40 @@ class SecurityManager(models.Manager):
         ############################################
         # TRAITEMENT NORMAL
         ############################################        
+        # REGION
+        q = Q(**{ self.prefixe_implantation : employe.implantation.region })
 
         # 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)
 
+
+        ############################################
+        # 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():
-            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():
-            liste = self.get_query_set()
-        
+            liste = self.get_query_set().all()
+
         return liste
 
 
@@ -73,13 +101,18 @@ 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)
 
     def get_query_set(self):
         fkeys = (
             'id_rh',
             'responsable',
             'implantation',
+            'implantation.bureau_rattachement',
             'type_poste',
             'service',
             'classement_min',
@@ -92,5 +125,17 @@ 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)
+