[#2658] Ne pas afficher les objets archivés nulle part sauf dans l'admin
[auf_rh_dae.git] / project / rh / managers.py
index 3e8626c..f07d024 100644 (file)
@@ -1,20 +1,16 @@
-
 # -*- encoding: utf-8 -*-
 
+import datetime
+from datetime import date
+
+from auf.django.metadata.managers import NoDeleteManager, NoDeleteQuerySet
 from django.db import models
 from django.db.models import Q
-from auf.django.metadata.managers import NoDeleteManager
-from utils import get_employe_from_user
-from workflow import dae_groupes, \
-                     grp_administrateurs, \
-                     grp_directeurs_bureau, \
-                     grp_drh, \
-                     grp_drh2, \
-                     grp_accior, \
-                     grp_abf, \
-                     grp_haute_direction, \
-                     grp_service_utilisateurs, \
-                     grp_correspondants_rh
+
+from project.groups import get_employe_from_user
+from project.groups import \
+        grp_drh, grp_drh2, grp_accior, grp_abf, grp_haute_direction, \
+        grp_service_utilisateurs
 
 
 class SecurityManager(models.Manager):
@@ -25,8 +21,8 @@ class SecurityManager(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.
+        On s'intéresse aussi au groupe auquel appartient le user car
+        certains groupes peuvent tout voir.
         """
         employe = get_employe_from_user(user)
 
@@ -34,11 +30,12 @@ class SecurityManager(models.Manager):
         # TRAITEMENT NORMAL
         ############################################
         # REGION
-        q = Q(**{ self.prefixe_implantation : employe.implantation.region })
+        q = Q(**{self.prefixe_implantation: employe.implantation.region})
 
         # SERVICE
-        if self.prefixe_service and grp_service_utilisateurs in user.groups.all():
-            q = q | Q(**{ self.prefixe_service : employe.service})
+        if self.prefixe_service \
+           and grp_service_utilisateurs in user.groups.all():
+            q = q | Q(**{self.prefixe_service: employe.service})
 
         liste = self.get_query_set().filter(q)
 
@@ -72,7 +69,7 @@ class SecurityManager(models.Manager):
         return liste
 
 
-class PosteManager(SecurityManager, NoDeleteManager):
+class PosteManager(SecurityManager):
     """
     Chargement de tous les objets FK existants sur chaque QuerySet.
     """
@@ -80,7 +77,10 @@ class PosteManager(SecurityManager, NoDeleteManager):
     prefixe_implantation = "implantation__region"
 
     def actifs(self):
-        return super(PosteManager, self).get_query_set().filter(date_fin__gt=datetime.datetime.now())
+        return super(PosteManager, self).get_query_set().filter(
+            Q(date_fin__gt=datetime.datetime.now()) |
+            Q(date_fin__isnull=True)
+        )
 
     def ma_region_ou_service(self, user):
         return super(PosteManager, self).ma_region_ou_service(user)
@@ -102,7 +102,7 @@ class PosteManager(SecurityManager, NoDeleteManager):
                                         .select_related(*fkeys).all()
 
 
-class DossierManager(SecurityManager, NoDeleteManager):
+class DossierManager(SecurityManager):
     prefixe_service = "poste__service"
     prefixe_implantation = "poste__implantation__region"
 
@@ -118,6 +118,39 @@ class DossierManager(SecurityManager, NoDeleteManager):
         return super(DossierManager, self).ma_region_ou_service(user)
 
 
+class EmployeQuerySet(NoDeleteQuerySet):
+
+    def actifs(self, date_min=None, date_max=None, annee=None):
+        qs = self
+        if annee:
+            janvier = date(annee, 1, 1)
+            decembre = date(annee, 12, 31)
+            date_min = max(janvier, date_min) if date_min else janvier
+            date_max = min(decembre, date_max) if date_max else decembre
+        if not date_min and not date_max:
+            date_min = date_max = date.today()
+        if date_min:
+            qs = qs.filter(
+                Q(rh_dossiers__date_fin__gte=date_min) |
+                Q(rh_dossiers__date_fin=None)
+            )
+        if date_max:
+            qs = qs.filter(
+                Q(rh_dossiers__date_debut__lte=date_max) |
+                Q(rh_dossiers__date_debut=None)
+            )
+        return qs.distinct()
+
+
+class EmployeManager(NoDeleteManager):
+    def get_query_set(self):
+        return EmployeQuerySet(self.model) \
+                .filter(supprime=False)
+
+    def actifs(self, *args, **kwargs):
+        return self.get_query_set().actifs(*args, **kwargs)
+
+
 class PosteComparaisonManager(SecurityManager):
     use_for_related_fields = True
     prefixe_implantation = "implantation__region"
@@ -128,7 +161,5 @@ class DossierComparaisonManager(SecurityManager):
     prefixe_implantation = "implantation__region"
 
 
-class DeviseManager(NoDeleteManager):
-
-    def get_query_set(self):
-        return super(DeviseManager, self).get_query_set().filter(archive=False)
+class TypeRemunerationManager(models.Manager):
+    pass