[#2267] Transposer le tableau "Classement du poste" à l'affichage
[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
d8cfc3d5 5from utils import get_employe_from_user
18c6d4c0 6from workflow import POSTE_ETAT_HAUTE_DIRECTION, \
d8cfc3d5 7 POSTE_ETAT_ACCIOR, \
9a62bc55 8 POSTE_ETAT_ABF, \
8ae5fbb1 9 DOSSIER_ETAT_ACCIOR, \
9a62bc55 10 DOSSIER_ETAT_ABF, \
18c6d4c0 11 MAP_GROUPE_ETATS_A_FAIRE
f258e4e7
OL
12from workflow import dae_groupes, \
13 grp_administrateurs, \
f258e4e7
OL
14 grp_directeurs_bureau, \
15 grp_drh, \
d8cfc3d5 16 grp_accior, \
9a62bc55 17 grp_abf, \
f258e4e7
OL
18 grp_haute_direction, \
19 grp_service_utilisateurs, \
f258e4e7
OL
20 grp_correspondants_rh
21
515124ec 22
f258e4e7
OL
23class SecurityManager(models.Manager):
24
189b6306 25 prefixe_service = None
f258e4e7
OL
26 prefixe_implantation = None
27
515124ec
OL
28 def mes_choses_a_faire(self, user):
29 q = Q()
bb59cdf6 30 rien_a_faire = True
515124ec
OL
31 for g in user.groups.all():
32 etats = MAP_GROUPE_ETATS_A_FAIRE.get(g, ())
33 for etat in etats:
bb59cdf6 34 rien_a_faire = False
515124ec
OL
35 q = q | Q(etat=etat)
36
bb59cdf6
OL
37 if rien_a_faire:
38 qs = self.ma_region_ou_service(user).none()
39 else:
40 qs = self.ma_region_ou_service(user).filter(q)
41
515124ec
OL
42 return qs
43
f258e4e7
OL
44 def ma_region_ou_service(self, user):
45 """
46 Filtrage des postes en fonction du user connecté (region / service)
47 On s'intéresse aussi au groupe auquel appartient le user car certains groupes
48 peuvent tout voir.
49 """
072d6547
OL
50 # On s'assure que le manager travaille sur un modèle avec WF, autrement
51 # on ne teste pas sur l'état
52 try:
53 self.model._meta.get_field_by_name('etat')
54 workflowed_model = True
55 except:
56 workflowed_model = False
57
f258e4e7
OL
58 employe = get_employe_from_user(user)
59
60 ############################################
61 # TRAITEMENT NORMAL
757c0fd5 62 ############################################
8ae5fbb1
OL
63 # REGION
64 q = Q(**{ self.prefixe_implantation : employe.implantation.region })
65
f258e4e7 66 # SERVICE
1de3da13
EMS
67 if self.prefixe_service and workflowed_model and \
68 grp_service_utilisateurs in user.groups.all():
8ae5fbb1 69 q = q | Q(**{ self.prefixe_service : employe.service})
f258e4e7 70
3420143c 71 liste = self.get_query_set().filter(q)
f258e4e7 72
189b6306 73
0adcf7d1 74 ############################################
d8cfc3d5 75 # TRAITEMENT ACCIOR
757c0fd5 76 ############################################
d8cfc3d5 77 if workflowed_model and grp_accior in user.groups.all():
757c0fd5 78 liste = self.get_query_set().all()
d8cfc3d5
OL
79
80 ############################################
9a62bc55 81 # TRAITEMENT ABF
757c0fd5 82 ############################################
9a62bc55 83 if workflowed_model and grp_abf in user.groups.all():
bbb2458d 84 liste = self.get_query_set().all()
18c6d4c0 85
0adcf7d1
OL
86 ############################################
87 # TRAITEMENT HAUTE DIRECTION
757c0fd5 88 ############################################
0adcf7d1 89 if workflowed_model and grp_haute_direction in user.groups.all():
bbb2458d 90 liste = self.get_query_set().all()
f258e4e7
OL
91
92 ############################################
93 # TRAITEMENT DRH
757c0fd5 94 ############################################
f258e4e7 95 if grp_drh in user.groups.all():
bbb2458d 96 liste = self.get_query_set().all()
18c6d4c0 97
f258e4e7
OL
98 return liste
99
100
101class PosteManager(SecurityManager):
102 """
103 Chargement de tous les objets FK existants sur chaque QuerySet.
104 """
189b6306
OL
105 prefixe_service = "service"
106 prefixe_implantation = "implantation__region"
f258e4e7 107
b15bf543 108 def ma_region_ou_service(self, user):
18c6d4c0 109 return super(PosteManager, self).ma_region_ou_service(user).filter(actif=True)
b15bf543 110
f258e4e7
OL
111 def get_query_set(self):
112 fkeys = (
113 'id_rh',
114 'responsable',
115 'implantation',
0b2edb6e 116 'implantation.bureau_rattachement',
f258e4e7
OL
117 'type_poste',
118 'service',
119 'classement_min',
120 'classement_max',
121 'valeur_point_min',
122 'valeur_point_max',
123 )
124 return super(PosteManager, self).get_query_set() \
125 .select_related(*fkeys).all()
126
127
128class DossierManager(SecurityManager):
189b6306
OL
129 prefixe_service = "poste__service"
130 prefixe_implantation = "poste__implantation__region"
f258e4e7 131
0b2edb6e
OL
132 def get_query_set(self):
133 fkeys = (
134 'poste',
135 )
136 return super(DossierManager, self).get_query_set() \
137 .select_related(*fkeys).all()
138
b15bf543 139 def ma_region_ou_service(self, user):
18c6d4c0 140 return super(DossierManager, self).ma_region_ou_service(user).filter(poste__actif=True)
b15bf543
OL
141
142
1de3da13
EMS
143class PosteComparaisonManager(SecurityManager):
144 use_for_related_fields = True
145 prefixe_implantation = "implantation__region"