1 # -*- encoding: utf-8 -*-
3 from django
.db
import models
4 from django
.db
.models
import Q
5 from utils
import is_user_dans_service
, get_employe_from_user
6 from workflow
import POSTE_ETAT_HAUTE_DIRECTION
, POSTE_ETAT_POLE_FINANCIER
7 from workflow
import dae_groupes
, \
10 grp_directeurs_bureau
, \
13 grp_haute_direction
, \
14 grp_service_utilisateurs
, \
15 grp_directeurs_service
, \
18 class SecurityManager(models
.Manager
):
20 prefixe_implantation
= None
22 def ma_region_ou_service(self
, user
):
24 Filtrage des postes en fonction du user connecté (region / service)
25 On s'intéresse aussi au groupe auquel appartient le user car certains groupes
29 # On s'assure que le manager travaille sur un modèle avec WF, autrement
30 # on ne teste pas sur l'état
32 self
.model
._meta
.get_field_by_name('etat')
33 workflowed_model
= True
35 workflowed_model
= False
37 employe
= get_employe_from_user(user
)
39 ############################################
41 ############################################
44 if is_user_dans_service(user
):
45 q
= Q(**{ '%s' % self
.prefixe_implantation
: employe
.implantation
})
48 q
= Q(**{ '%s__region' % self
.prefixe_implantation
: employe
.implantation
.region
})
49 liste
= self
.get_query_set().filter(q
)
51 ############################################
52 # TRAITEMENT POLE FINANCIER
53 ############################################
54 if workflowed_model
and grp_pole_financier
in user
.groups
.all():
55 liste
= self
.get_query_set().filter(etat
=POSTE_ETAT_POLE_FINANCIER
)
57 ############################################
58 # TRAITEMENT HAUTE DIRECTION
59 ############################################
60 if workflowed_model
and grp_haute_direction
in user
.groups
.all():
61 liste
= self
.get_query_set().filter(etat
=POSTE_ETAT_HAUTE_DIRECTION
)
63 ############################################
65 ############################################
66 if grp_drh
in user
.groups
.all():
67 liste
= self
.get_query_set()
72 class PosteManager(SecurityManager
):
74 Chargement de tous les objets FK existants sur chaque QuerySet.
76 prefixe_implantation
= "implantation"
78 def get_query_set(self
):
90 return super(PosteManager
, self
).get_query_set() \
91 .select_related(*fkeys
).all()
94 class DossierManager(SecurityManager
):
95 prefixe_implantation
= "poste__implantation"