1 # -*- encoding: utf-8 -*-
3 from auf
.django
.workflow
.models
import WorkflowMixin
5 from project
.groups
import \
6 grp_drh
, grp_drh2
, grp_administrateurs
, grp_service_utilisateurs
, \
7 grp_correspondants_rh
, grp_directeurs_bureau
, grp_accior
, grp_abf
, \
9 from project
.groups
import \
10 is_user_dans_services_centraux
, is_user_dans_region
13 POSTE_ETAT_BROUILLON
= 'BROUILLON'
14 POSTE_ETAT_ADMINISTRATEUR
= 'ADMINISTRATEUR'
15 POSTE_ETAT_DIRECTEUR_BUREAU
= 'DIRECTEUR_BUREAU'
16 POSTE_ETAT_SERVICE_UTILISATEURS
= 'SRV_UTILISATEURS'
17 POSTE_ETAT_DRH_CONTROLE
= 'DRH_CONTROLE'
18 POSTE_ETAT_DRH_2
= 'DRH_2'
19 POSTE_ETAT_DEMANDE_MODIF
= 'DEMANDE_MODIF'
20 POSTE_ETAT_ACCIOR
= 'ACCIOR'
21 POSTE_ETAT_ABF
= 'ABF'
22 POSTE_ETAT_HAUTE_DIRECTION
= 'HAUTE_DIRECTION'
23 POSTE_ETAT_DEMANDE_JUSTIF
= 'DEMANDE_JUSTIF'
24 POSTE_ETAT_REGION_FINALISATION
= 'REGION_FINALISATION'
25 POSTE_ETAT_DRH_FINALISATION
= 'DRH_FINALISATION'
26 POSTE_ETAT_FINALISE
= 'FINALISE'
29 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
30 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
31 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
32 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
33 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
34 POSTE_ACTION_ENVOYER_DRH_2
= POSTE_ETAT_DRH_2
35 POSTE_ACTION_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
36 POSTE_ACTION_RETOUR_DEMANDE_MODIF
= 'RETOUR_DEMANDE_MODIF'
37 POSTE_ACTION_ENVOYER_ACCIOR
= POSTE_ETAT_ACCIOR
38 POSTE_ACTION_ENVOYER_ABF
= POSTE_ETAT_ABF
39 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
40 POSTE_ACTION_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
41 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
= 'RETOUR_DEMANDE_JUSTIF'
42 POSTE_ACTION_ENVOYER_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
43 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
44 POSTE_ACTION_FINALISER
= 'FINALISER'
48 POSTE_ETAT_BROUILLON
: u
"En rédaction",
49 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'administrateur",
50 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Directeur de bureau",
51 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Service utilisateurs",
52 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
53 POSTE_ETAT_DRH_2
: u
"Validation DRH 2",
54 POSTE_ETAT_DEMANDE_MODIF
: u
"Demande de modification",
55 POSTE_ETAT_ACCIOR
: u
"ACCIOR",
56 POSTE_ETAT_ABF
: u
"ABF",
57 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
58 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Demande de justification",
59 POSTE_ETAT_REGION_FINALISATION
: u
'Retour à la région',
60 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH',
61 POSTE_ETAT_FINALISE
: u
'Finalisée'
64 #libellés états pour boutons
65 POSTE_ETATS_BOUTONS
= {
66 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Envoyer au directeur de bureau",
67 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Envoyer au service utilisateurs",
68 POSTE_ETAT_ADMINISTRATEUR
: u
"Envoyer à l'adminstrateur",
69 POSTE_ETAT_DRH_CONTROLE
: u
"Envoyer à la DRH (validation)",
70 POSTE_ETAT_DRH_2
: u
"Envoyer à DRH 2",
71 POSTE_ETAT_DEMANDE_MODIF
: u
"Envoyer une demande de modification",
72 POSTE_ETAT_ACCIOR
: u
"Envoyer à l'ACCIOR",
73 POSTE_ETAT_ABF
: u
"Envoyer à l'ABF",
74 POSTE_ETAT_HAUTE_DIRECTION
: u
"Envoyer à la haute direction",
75 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Envoyer une demande de justification",
76 POSTE_ETAT_REGION_FINALISATION
: u
"Retourner à la région pour finalisation",
77 POSTE_ETAT_DRH_FINALISATION
: u
'Retourner à la DRH pour finalisation',
78 POSTE_ETAT_FINALISE
: u
'Finaliser'
81 # définition du worflow séquentiel
83 POSTE_ACTION_ENVOYER_BROUILLON
: {
86 'etat_final': POSTE_ETAT_BROUILLON
,
88 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
: {
90 'etat_initial': (POSTE_ETAT_BROUILLON
,),
91 'etat_final': POSTE_ETAT_ADMINISTRATEUR
,
93 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
: {
95 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR
,),
96 'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS
,
98 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
: {
100 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR
,),
101 'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU
,
103 POSTE_ACTION_ENVOYER_DRH_CONTROLE
: {
106 POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DIRECTEUR_BUREAU
,
107 POSTE_ETAT_SERVICE_UTILISATEURS
109 'etat_final': POSTE_ETAT_DRH_CONTROLE
,
111 POSTE_ACTION_ENVOYER_DRH_2
: {
113 'etat_initial': (POSTE_ETAT_DRH_CONTROLE
,),
114 'etat_final': POSTE_ETAT_DRH_2
,
116 POSTE_ACTION_DEMANDE_MODIF
: {
118 'etat_initial': (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
),
119 'etat_final': POSTE_ETAT_DEMANDE_MODIF
,
121 POSTE_ACTION_RETOUR_DEMANDE_MODIF
: {
123 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF
,),
124 'etat_final': POSTE_ETAT_DRH_CONTROLE
,
126 POSTE_ACTION_ENVOYER_ACCIOR
: {
128 'etat_initial': (POSTE_ETAT_DRH_2
,),
129 'etat_final': POSTE_ETAT_ACCIOR
,
131 POSTE_ACTION_ENVOYER_ABF
: {
133 'etat_initial': (POSTE_ETAT_ACCIOR
,),
134 'etat_final': POSTE_ETAT_ABF
,
136 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
: {
138 'etat_initial': (POSTE_ETAT_ABF
,),
139 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
141 POSTE_ACTION_DEMANDE_JUSTIF
: {
143 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
144 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF
,
146 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
: {
148 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF
,),
149 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
151 POSTE_ACTION_ENVOYER_REGION_FINALISATION
: {
153 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
154 'etat_final': POSTE_ETAT_REGION_FINALISATION
156 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
158 'etat_initial': (POSTE_ETAT_REGION_FINALISATION
,),
159 'etat_final': POSTE_ETAT_DRH_FINALISATION
,
161 POSTE_ACTION_FINALISER
: {
163 'etat_initial': (POSTE_ETAT_DRH_FINALISATION
,),
164 'etat_final': POSTE_ETAT_FINALISE
169 class PosteWorkflow(WorkflowMixin
):
170 etat_initial
= POSTE_ETAT_BROUILLON
172 actions
= POSTE_ACTIONS
177 def acces_directeur_bureau(self
, action
, request
):
178 user_groups
= request
.user
.groups
.all()
179 return grp_drh
in user_groups
or grp_drh2
in user_groups
or \
180 (is_user_dans_services_centraux(request
.user
) and
181 grp_administrateurs
in user_groups
)
183 def acces_administrateur(self
, action
, request
):
184 user_groups
= request
.user
.groups
.all()
185 return grp_correspondants_rh
in user_groups
or grp_drh
in user_groups \
186 or grp_drh2
in user_groups
188 def acces_drh_controle(self
, action
, request
):
189 user_groups
= request
.user
.groups
.all()
190 return grp_directeurs_bureau
in user_groups
or \
191 grp_service_utilisateurs
in user_groups
or \
192 grp_drh
in user_groups
or grp_drh2
in user_groups
or \
193 (grp_administrateurs
in user_groups
and
194 (action
== POSTE_ACTION_RETOUR_DEMANDE_MODIF
or
195 is_user_dans_region(request
.user
)))
197 def acces_drh_2(self
, action
, request
):
198 user_groups
= request
.user
.groups
.all()
199 return grp_drh
in user_groups
201 def acces_demande_modif(self
, action
, request
):
202 user_groups
= request
.user
.groups
.all()
203 return grp_drh
in user_groups
or grp_drh2
in user_groups
205 def acces_srv_utilisateurs(self
, action
, request
):
206 if not is_user_dans_services_centraux(request
.user
):
208 user_groups
= request
.user
.groups
.all()
209 return grp_administrateurs
in user_groups
or grp_drh
in user_groups \
210 or grp_drh2
in user_groups
212 def acces_accior(self
, action
, request
):
213 user_groups
= request
.user
.groups
.all()
214 return grp_drh
in user_groups
or grp_drh2
in user_groups
216 def acces_abf(self
, action
, request
):
217 user_groups
= request
.user
.groups
.all()
218 return grp_accior
in user_groups
or grp_drh
in user_groups \
219 or grp_drh2
in user_groups
221 def acces_haute_direction(self
, action
, request
):
222 user_groups
= request
.user
.groups
.all()
223 return grp_abf
in user_groups
or grp_drh
in user_groups \
224 or grp_drh2
in user_groups
226 def acces_region_finalisation(self
, action
, request
):
227 user_groups
= request
.user
.groups
.all()
228 return grp_haute_direction
in user_groups
or grp_drh
in user_groups \
229 or grp_drh2
in user_groups
231 def acces_drh_finalisation(self
, action
, request
):
232 user_groups
= request
.user
.groups
.all()
233 return grp_administrateurs
in user_groups
or \
234 grp_correspondants_rh
in user_groups
or \
235 grp_drh
in user_groups
or \
236 grp_drh2
in user_groups
238 def acces_demande_justif(self
, action
, request
):
239 user_groups
= request
.user
.groups
.all()
240 return grp_haute_direction
in user_groups
or grp_drh
in user_groups \
241 or grp_drh2
in user_groups
243 def acces_retour_demande_modif(self
, action
, request
):
244 user_groups
= request
.user
.groups
.all()
245 return grp_administrateurs
in user_groups
or grp_drh
in user_groups \
246 or grp_drh2
in user_groups
248 def acces_retour_demande_justif(self
, action
, request
):
249 user_groups
= request
.user
.groups
.all()
250 return grp_drh
in user_groups
or grp_drh2
in user_groups
252 def acces_finaliser(self
, action
, request
):
253 user_groups
= request
.user
.groups
.all()
254 return grp_drh
in user_groups
or grp_drh2
in user_groups
258 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
259 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
260 DOSSIER_ETAT_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
261 DOSSIER_ETAT_SERVICE_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
262 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
263 DOSSIER_ETAT_DRH_2
= POSTE_ETAT_DRH_2
264 DOSSIER_ETAT_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
265 DOSSIER_ETAT_ACCIOR
= POSTE_ETAT_ACCIOR
266 DOSSIER_ETAT_ABF
= POSTE_ETAT_ABF
267 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
268 DOSSIER_ETAT_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
269 DOSSIER_ETAT_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
270 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
271 DOSSIER_ETAT_FINALISE
= POSTE_ETAT_FINALISE
274 class DossierWorkflow(PosteWorkflow
):
280 MAP_GROUPE_ETATS_A_FAIRE
= {
281 grp_correspondants_rh
: (
282 POSTE_ETAT_BROUILLON
, DOSSIER_ETAT_BROUILLON
,
283 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
285 grp_service_utilisateurs
: (
286 POSTE_ETAT_SERVICE_UTILISATEURS
,
287 DOSSIER_ETAT_SERVICE_UTILISATEURS
289 grp_administrateurs
: (
290 POSTE_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_ADMINISTRATEUR
,
291 POSTE_ETAT_DEMANDE_MODIF
, DOSSIER_ETAT_DEMANDE_MODIF
,
292 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
,
294 grp_directeurs_bureau
: (
295 POSTE_ETAT_DIRECTEUR_BUREAU
, DOSSIER_ETAT_DIRECTEUR_BUREAU
298 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
,
299 DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,
300 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_DEMANDE_JUSTIF
302 grp_drh2
: (POSTE_ETAT_DRH_2
, DOSSIER_ETAT_DRH_2
),
303 grp_accior
: (POSTE_ETAT_ACCIOR
, DOSSIER_ETAT_ACCIOR
),
304 grp_abf
: (POSTE_ETAT_ABF
, DOSSIER_ETAT_ABF
),
305 grp_haute_direction
: (
306 POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
312 POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
,
313 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
, POSTE_ETAT_DIRECTEUR_BUREAU
,
314 POSTE_ETAT_SERVICE_UTILISATEURS
, POSTE_ETAT_DEMANDE_MODIF
,
315 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_BROUILLON
,
316 DOSSIER_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_DRH_CONTROLE
,
317 DOSSIER_ETAT_DRH_2
, DOSSIER_ETAT_DIRECTEUR_BUREAU
,
318 DOSSIER_ETAT_SERVICE_UTILISATEURS
, DOSSIER_ETAT_DEMANDE_MODIF
,
319 DOSSIER_ETAT_DEMANDE_JUSTIF
,
323 DOSSIER_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_DRH_FINALISATION
,
324 DOSSIER_ETAT_FINALISE