-
# -*- 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):
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)
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 = (
- 'id_rh',
- 'responsable',
- 'implantation',
- 'implantation.bureau_rattachement',
+ #'id_rh',
+ #'responsable',
+ #'implantation',
+ #'implantation.bureau_rattachement',
'type_poste',
- 'service',
- 'classement_min',
- 'classement_max',
- 'valeur_point_min',
- 'valeur_point_max',
+ #'service',
+ #'classement_min',
+ #'classement_max',
+ #'valeur_point_min',
+ #'valeur_point_max',
)
return super(PosteManager, self).get_query_set() \
.select_related(*fkeys).all()
def get_query_set(self):
fkeys = (
'poste',
+ 'employe',
)
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)
+ 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