# -*- 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 project.utils import get_employe_from_user
-from project.groups import 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):
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)
# 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)
return liste
-class PosteManager(SecurityManager, NoDeleteManager):
+class PosteManager(SecurityManager):
"""
Chargement de tous les objets FK existants sur chaque QuerySet.
"""
prefixe_implantation = "implantation__region"
def actifs(self):
- q_actif = Q(date_fin__gt=datetime.datetime.now()) | Q(date_fin__isnull=True)
- return super(PosteManager, self).get_query_set().filter(q_actif)
+ 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)
.select_related(*fkeys).all()
-class DossierManager(SecurityManager, NoDeleteManager):
+class DossierManager(SecurityManager):
prefixe_service = "poste__service"
prefixe_implantation = "poste__implantation__region"
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"
prefixe_implantation = "implantation__region"
-class DeviseManager(NoDeleteManager):
- pass
-
-class ServiceManager(NoDeleteManager):
- pass
-
-class TypeRemunerationManager(NoDeleteManager):
+class TypeRemunerationManager(models.Manager):
pass