Merge branch 'dev' of ssh://git.auf/auf_rh_dae into dev
[auf_rh_dae.git] / project / dae / managers.py
CommitLineData
f258e4e7
OL
1# -*- encoding: utf-8 -*-
2
3from django.db import models
4from django.db.models import Q
5from utils import is_user_dans_service, get_employe_from_user
515124ec 6from workflow import POSTE_ETAT_HAUTE_DIRECTION, POSTE_ETAT_POLE_FINANCIER, MAP_GROUPE_ETATS_A_FAIRE
f258e4e7
OL
7from workflow import dae_groupes, \
8 grp_administrateurs, \
9 grp_gestionnaires, \
10 grp_directeurs_bureau, \
11 grp_drh, \
12 grp_pole_financier, \
13 grp_haute_direction, \
14 grp_service_utilisateurs, \
15 grp_directeurs_service, \
16 grp_correspondants_rh
17
515124ec 18
f258e4e7
OL
19class SecurityManager(models.Manager):
20
21 prefixe_implantation = None
22
515124ec
OL
23 def mes_choses_a_faire(self, user):
24 q = Q()
25 for g in user.groups.all():
26 etats = MAP_GROUPE_ETATS_A_FAIRE.get(g, ())
27 for etat in etats:
28 q = q | Q(etat=etat)
29
30 qs = self.ma_region_ou_service(user).filter(q)
31 return qs
32
f258e4e7
OL
33 def ma_region_ou_service(self, user):
34 """
35 Filtrage des postes en fonction du user connecté (region / service)
36 On s'intéresse aussi au groupe auquel appartient le user car certains groupes
37 peuvent tout voir.
38 """
39
072d6547
OL
40 # On s'assure que le manager travaille sur un modèle avec WF, autrement
41 # on ne teste pas sur l'état
42 try:
43 self.model._meta.get_field_by_name('etat')
44 workflowed_model = True
45 except:
46 workflowed_model = False
47
f258e4e7
OL
48 employe = get_employe_from_user(user)
49
50 ############################################
51 # TRAITEMENT NORMAL
52 ############################################
53
54 # SERVICE
55 if is_user_dans_service(user):
56 q = Q(**{ '%s' % self.prefixe_implantation : employe.implantation })
57 # REGION
58 else:
59 q = Q(**{ '%s__region' % self.prefixe_implantation : employe.implantation.region })
60 liste = self.get_query_set().filter(q)
61
62 ############################################
63 # TRAITEMENT POLE FINANCIER
64 ############################################
072d6547 65 if workflowed_model and grp_pole_financier in user.groups.all():
62cfa562 66 liste = self.get_query_set().filter(etat=POSTE_ETAT_POLE_FINANCIER)
f258e4e7
OL
67
68 ############################################
69 # TRAITEMENT HAUTE DIRECTION
70 ############################################
072d6547 71 if workflowed_model and grp_haute_direction in user.groups.all():
f258e4e7
OL
72 liste = self.get_query_set().filter(etat=POSTE_ETAT_HAUTE_DIRECTION)
73
74 ############################################
75 # TRAITEMENT DRH
76 ############################################
77 if grp_drh in user.groups.all():
78 liste = self.get_query_set()
79
80 return liste
81
82
83class PosteManager(SecurityManager):
84 """
85 Chargement de tous les objets FK existants sur chaque QuerySet.
86 """
87 prefixe_implantation = "implantation"
88
89 def get_query_set(self):
90 fkeys = (
91 'id_rh',
92 'responsable',
93 'implantation',
94 'type_poste',
95 'service',
96 'classement_min',
97 'classement_max',
98 'valeur_point_min',
99 'valeur_point_max',
100 )
101 return super(PosteManager, self).get_query_set() \
102 .select_related(*fkeys).all()
103
104
105class DossierManager(SecurityManager):
106 prefixe_implantation = "poste__implantation"
107