[#2658] Ne pas afficher les objets archivés nulle part sauf dans l'admin
[auf_rh_dae.git] / project / rh / managers.py
index d092a3f..f07d024 100644 (file)
@@ -1,19 +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 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):
@@ -24,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)
 
@@ -33,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)
 
@@ -78,8 +76,14 @@ class PosteManager(SecurityManager):
     prefixe_service = "service"
     prefixe_implantation = "implantation__region"
 
+    def actifs(self):
+        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).filter(actif=True)
+        return super(PosteManager, self).ma_region_ou_service(user)
 
     def get_query_set(self):
         fkeys = (
@@ -111,13 +115,51 @@ class DossierManager(SecurityManager):
                                         .select_related(*fkeys).all()
 
     def ma_region_ou_service(self, user):
-        return super(DossierManager, self).ma_region_ou_service(user).filter(poste__actif=True)
+        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"
 
+
 class DossierComparaisonManager(SecurityManager):
     use_for_related_fields = True
     prefixe_implantation = "implantation__region"
+
+
+class TypeRemunerationManager(models.Manager):
+    pass