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
, \
7 POSTE_ETAT_POLE_FINANCIER
, \
10 MAP_GROUPE_ETATS_A_FAIRE
11 from workflow
import dae_groupes
, \
12 grp_administrateurs
, \
14 grp_directeurs_bureau
, \
17 grp_haute_direction
, \
18 grp_service_utilisateurs
, \
19 grp_directeurs_service
, \
23 class SecurityManager(models
.Manager
):
25 prefixe_implantation
= None
27 def mes_choses_a_faire(self
, user
):
30 for g
in user
.groups
.all():
31 etats
= MAP_GROUPE_ETATS_A_FAIRE
.get(g
, ())
37 qs
= self
.ma_region_ou_service(user
).none()
39 qs
= self
.ma_region_ou_service(user
).filter(q
)
43 def ma_region_ou_service(self
, user
):
45 Filtrage des postes en fonction du user connecté (region / service)
46 On s'intéresse aussi au groupe auquel appartient le user car certains groupes
49 # On s'assure que le manager travaille sur un modèle avec WF, autrement
50 # on ne teste pas sur l'état
52 self
.model
._meta
.get_field_by_name('etat')
53 workflowed_model
= True
55 workflowed_model
= False
57 employe
= get_employe_from_user(user
)
59 ############################################
61 ############################################
64 if is_user_dans_service(user
):
65 q
= Q(**{ '%s' % self
.prefixe_implantation
: employe
.implantation
})
68 q
= Q(**{ '%s__region' % self
.prefixe_implantation
: employe
.implantation
.region
})
71 q_non_refuse
= ~
Q(etat__in
=(POSTE_ETAT_REFUSE
, DOSSIER_ETAT_REFUSE
,))
74 liste
= self
.get_query_set().filter(q
)
76 ############################################
77 # TRAITEMENT POLE FINANCIER
78 ############################################
79 if workflowed_model
and grp_pole_financier
in user
.groups
.all():
80 liste
= self
.get_query_set().filter(q_non_refuse
)
82 ############################################
83 # TRAITEMENT HAUTE DIRECTION
84 ############################################
85 if workflowed_model
and grp_haute_direction
in user
.groups
.all():
86 liste
= self
.get_query_set().filter(q_non_refuse
)
88 ############################################
90 ############################################
91 if grp_drh
in user
.groups
.all():
92 liste
= self
.get_query_set()
97 class PosteManager(SecurityManager
):
99 Chargement de tous les objets FK existants sur chaque QuerySet.
101 prefixe_implantation
= "implantation"
103 def ma_region_ou_service(self
, user
):
104 return super(PosteManager
, self
).ma_region_ou_service(user
).filter(actif
=True)
106 def get_query_set(self
):
118 return super(PosteManager
, self
).get_query_set() \
119 .select_related(*fkeys
).all()
122 class DossierManager(SecurityManager
):
123 prefixe_implantation
= "poste__implantation"
125 def ma_region_ou_service(self
, user
):
126 return super(DossierManager
, self
).ma_region_ou_service(user
).filter(poste__actif
=True)