1 # -*- encoding: utf-8 -*-
3 from django
.db
import models
4 from django
.db
.models
import Q
5 from utils
import get_employe_from_user
6 from workflow
import POSTE_ETAT_HAUTE_DIRECTION
, \
11 MAP_GROUPE_ETATS_A_FAIRE
12 from workflow
import dae_groupes
, \
13 grp_administrateurs
, \
14 grp_directeurs_bureau
, \
19 grp_haute_direction
, \
20 grp_service_utilisateurs
, \
24 class SecurityManager(models
.Manager
):
26 prefixe_service
= None
27 prefixe_implantation
= None
29 def mes_choses_a_faire(self
, user
):
31 employe
= get_employe_from_user(user
)
33 for g
in user
.groups
.all():
34 etats
= MAP_GROUPE_ETATS_A_FAIRE
.get(g
, ())
38 if g
== grp_service_utilisateurs
:
39 q2
&= Q(**{self
.prefixe_service
: employe
.service
})
40 elif g
not in (grp_accior
, grp_abf
, grp_haute_direction
, grp_drh
, grp_drh2
):
41 q2
&= Q(**{self
.prefixe_implantation
: employe
.implantation
.region
})
45 qs
= self
.ma_region_ou_service(user
).none()
47 qs
= self
.ma_region_ou_service(user
).filter(q
)
51 def ma_region_ou_service(self
, user
):
53 Filtrage des postes en fonction du user connecté (region / service)
54 On s'intéresse aussi au groupe auquel appartient le user car certains groupes
57 employe
= get_employe_from_user(user
)
59 ############################################
61 ############################################
63 q
= Q(**{ self
.prefixe_implantation
: employe
.implantation
.region
})
66 if self
.prefixe_service
and grp_service_utilisateurs
in user
.groups
.all():
67 q
= q |
Q(**{ self
.prefixe_service
: employe
.service
})
69 liste
= self
.get_query_set().filter(q
)
71 ############################################
73 ############################################
74 if grp_accior
in user
.groups
.all():
75 liste
= self
.get_query_set().all()
77 ############################################
79 ############################################
80 if grp_abf
in user
.groups
.all():
81 liste
= self
.get_query_set().all()
83 ############################################
84 # TRAITEMENT HAUTE DIRECTION
85 ############################################
86 if grp_haute_direction
in user
.groups
.all():
87 liste
= self
.get_query_set().all()
89 ############################################
91 ############################################
92 if grp_drh
in user
.groups
.all() or grp_drh2
in user
.groups
.all():
93 liste
= self
.get_query_set().all()
98 class PosteManager(SecurityManager
):
100 Chargement de tous les objets FK existants sur chaque QuerySet.
102 prefixe_service
= "service"
103 prefixe_implantation
= "implantation__region"
105 def ma_region_ou_service(self
, user
):
106 return super(PosteManager
, self
).ma_region_ou_service(user
).filter(actif
=True)
108 def get_query_set(self
):
113 'implantation.bureau_rattachement',
121 return super(PosteManager
, self
).get_query_set() \
122 .select_related(*fkeys
).all()
125 class DossierManager(SecurityManager
):
126 prefixe_service
= "poste__service"
127 prefixe_implantation
= "poste__implantation__region"
129 def get_query_set(self
):
133 return super(DossierManager
, self
).get_query_set() \
134 .select_related(*fkeys
).all()
136 def ma_region_ou_service(self
, user
):
137 return super(DossierManager
, self
).ma_region_ou_service(user
).filter(poste__actif
=True)
140 class PosteComparaisonManager(SecurityManager
):
141 use_for_related_fields
= True
142 prefixe_implantation
= "implantation__region"
144 class DossierComparaisonManager(SecurityManager
):
145 use_for_related_fields
= True
146 prefixe_implantation
= "implantation__region"