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
, \
18 grp_haute_direction
, \
19 grp_service_utilisateurs
, \
23 class SecurityManager(models
.Manager
):
25 prefixe_service
= None
26 prefixe_implantation
= None
28 def mes_choses_a_faire(self
, user
):
31 for g
in user
.groups
.all():
32 etats
= MAP_GROUPE_ETATS_A_FAIRE
.get(g
, ())
38 qs
= self
.ma_region_ou_service(user
).none()
40 qs
= self
.ma_region_ou_service(user
).filter(q
)
44 def ma_region_ou_service(self
, user
):
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
50 # On s'assure que le manager travaille sur un modèle avec WF, autrement
51 # on ne teste pas sur l'état
53 self
.model
._meta
.get_field_by_name('etat')
54 workflowed_model
= True
56 workflowed_model
= False
58 employe
= get_employe_from_user(user
)
60 ############################################
62 ############################################
64 q
= Q(**{ self
.prefixe_implantation
: employe
.implantation
.region
})
67 if self
.prefixe_service
and workflowed_model
and \
68 grp_service_utilisateurs
in user
.groups
.all():
69 q
= q |
Q(**{ self
.prefixe_service
: employe
.service
})
71 liste
= self
.get_query_set().filter(q
)
74 ############################################
76 ############################################
77 if workflowed_model
and grp_accior
in user
.groups
.all():
78 liste
= self
.get_query_set().all()
80 ############################################
82 ############################################
83 if workflowed_model
and grp_abf
in user
.groups
.all():
84 liste
= self
.get_query_set().all()
86 ############################################
87 # TRAITEMENT HAUTE DIRECTION
88 ############################################
89 if workflowed_model
and grp_haute_direction
in user
.groups
.all():
90 liste
= self
.get_query_set().all()
92 ############################################
94 ############################################
95 if grp_drh
in user
.groups
.all():
96 liste
= self
.get_query_set().all()
101 class PosteManager(SecurityManager
):
103 Chargement de tous les objets FK existants sur chaque QuerySet.
105 prefixe_service
= "service"
106 prefixe_implantation
= "implantation__region"
108 def ma_region_ou_service(self
, user
):
109 return super(PosteManager
, self
).ma_region_ou_service(user
).filter(actif
=True)
111 def get_query_set(self
):
116 'implantation.bureau_rattachement',
124 return super(PosteManager
, self
).get_query_set() \
125 .select_related(*fkeys
).all()
128 class DossierManager(SecurityManager
):
129 prefixe_service
= "poste__service"
130 prefixe_implantation
= "poste__implantation__region"
132 def get_query_set(self
):
136 return super(DossierManager
, self
).get_query_set() \
137 .select_related(*fkeys
).all()
139 def ma_region_ou_service(self
, user
):
140 return super(DossierManager
, self
).ma_region_ou_service(user
).filter(poste__actif
=True)
143 class PosteComparaisonManager(SecurityManager
):
144 use_for_related_fields
= True
145 prefixe_implantation
= "implantation__region"