1 # -*- encoding: utf-8 -*-
3 from auf
.django
.workflow
.models
import WorkflowMixin
5 from project
import groups
8 groups
.CORRESPONDANT_RH
,
9 groups
.ADMINISTRATEURS
,
10 groups
.DIRECTEUR_DE_BUREAU
,
16 groups
.HAUTE_DIRECTION
,
17 groups
.SERVICE_UTILISATEURS
,
21 POSTE_ETAT_BROUILLON
= 'BROUILLON'
22 POSTE_ETAT_ADMINISTRATEUR
= 'ADMINISTRATEUR'
23 POSTE_ETAT_DIRECTEUR_BUREAU
= 'DIRECTEUR_BUREAU'
24 POSTE_ETAT_SERVICE_UTILISATEURS
= 'SRV_UTILISATEURS'
25 POSTE_ETAT_DRH_CONTROLE
= 'DRH_CONTROLE'
26 POSTE_ETAT_DRH_2
= 'DRH_2'
27 POSTE_ETAT_DEMANDE_MODIF
= 'DEMANDE_MODIF'
28 POSTE_ETAT_ACCIOR
= 'ACCIOR'
29 POSTE_ETAT_ABF
= 'ABF'
30 POSTE_ETAT_FINANCE
= 'FINANCE'
31 POSTE_ETAT_HAUTE_DIRECTION
= 'HAUTE_DIRECTION'
32 POSTE_ETAT_DEMANDE_JUSTIF
= 'DEMANDE_JUSTIF'
33 POSTE_ETAT_REGION_FINALISATION
= 'REGION_FINALISATION'
34 POSTE_ETAT_DRH_FINALISATION
= 'DRH_FINALISATION'
35 POSTE_ETAT_FINALISE
= 'FINALISE'
38 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
39 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
40 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
41 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
42 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
43 POSTE_ACTION_ENVOYER_DRH_2
= POSTE_ETAT_DRH_2
44 POSTE_ACTION_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
45 POSTE_ACTION_RETOUR_DEMANDE_MODIF
= 'RETOUR_DEMANDE_MODIF'
46 POSTE_ACTION_ENVOYER_ACCIOR
= POSTE_ETAT_ACCIOR
47 POSTE_ACTION_ENVOYER_ABF
= POSTE_ETAT_ABF
48 POSTE_ACTION_ENVOYER_FINANCE
= POSTE_ETAT_FINANCE
49 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
50 POSTE_ACTION_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
51 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
= 'RETOUR_DEMANDE_JUSTIF'
52 POSTE_ACTION_ENVOYER_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
53 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
54 POSTE_ACTION_FINALISER
= 'FINALISER'
58 POSTE_ETAT_BROUILLON
: u
"En rédaction",
59 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'administrateur",
60 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Directeur de bureau",
61 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Service utilisateurs",
62 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
63 POSTE_ETAT_DRH_2
: u
"Validation DRH 2",
64 POSTE_ETAT_DEMANDE_MODIF
: u
"Demande de modification",
65 POSTE_ETAT_ACCIOR
: u
"ACCIOR",
66 POSTE_ETAT_ABF
: u
"ABF",
67 POSTE_ETAT_FINANCE
: u
"Finance",
68 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
69 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Demande de justification",
70 POSTE_ETAT_REGION_FINALISATION
: u
'Retour à la région',
71 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH',
72 POSTE_ETAT_FINALISE
: u
'Finalisée'
75 #libellés états pour boutons
76 POSTE_ETATS_BOUTONS
= {
77 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Envoyer au directeur de bureau",
78 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Envoyer au service utilisateurs",
79 POSTE_ETAT_ADMINISTRATEUR
: u
"Envoyer à l'administrateur",
80 POSTE_ETAT_DRH_CONTROLE
: u
"Envoyer à la DRH (validation)",
81 POSTE_ETAT_DRH_2
: u
"Envoyer à DRH 2",
82 POSTE_ETAT_DEMANDE_MODIF
: u
"Envoyer une demande de modification",
83 POSTE_ETAT_ACCIOR
: u
"Envoyer à l'ACCIOR",
84 POSTE_ETAT_ABF
: u
"Envoyer à l'ABF",
85 POSTE_ETAT_FINANCE
: u
"Envoyer aux finances",
86 POSTE_ETAT_HAUTE_DIRECTION
: u
"Envoyer à la haute direction",
87 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Envoyer une demande de justification",
88 POSTE_ETAT_REGION_FINALISATION
: u
"Retourner à la région pour finalisation",
89 POSTE_ETAT_DRH_FINALISATION
: u
'Retourner à la DRH pour finalisation',
90 POSTE_ETAT_FINALISE
: u
'Finaliser'
93 # définition du worflow séquentiel
95 POSTE_ACTION_ENVOYER_BROUILLON
: {
98 'etat_final': POSTE_ETAT_BROUILLON
,
100 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
: {
102 'etat_initial': (POSTE_ETAT_BROUILLON
,),
103 'etat_final': POSTE_ETAT_ADMINISTRATEUR
,
105 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
: {
107 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR
,),
108 'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS
,
110 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
: {
112 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR
,),
113 'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU
,
115 POSTE_ACTION_ENVOYER_DRH_CONTROLE
: {
118 POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DIRECTEUR_BUREAU
,
119 POSTE_ETAT_SERVICE_UTILISATEURS
121 'etat_final': POSTE_ETAT_DRH_CONTROLE
,
123 POSTE_ACTION_ENVOYER_DRH_2
: {
125 'etat_initial': (POSTE_ETAT_DRH_CONTROLE
,),
126 'etat_final': POSTE_ETAT_DRH_2
,
128 POSTE_ACTION_DEMANDE_MODIF
: {
130 'etat_initial': (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
),
131 'etat_final': POSTE_ETAT_DEMANDE_MODIF
,
133 POSTE_ACTION_RETOUR_DEMANDE_MODIF
: {
135 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF
,),
136 'etat_final': POSTE_ETAT_DRH_CONTROLE
,
138 #POSTE_ACTION_ENVOYER_ACCIOR: {
140 # 'etat_initial': (POSTE_ETAT_DRH_2,),
141 # 'etat_final': POSTE_ETAT_ACCIOR,
143 POSTE_ACTION_ENVOYER_ABF
: {
145 'etat_initial': (POSTE_ETAT_ACCIOR
, POSTE_ETAT_DRH_2
),
146 'etat_final': POSTE_ETAT_ABF
,
148 # POSTE_ACTION_ENVOYER_FINANCE: {
150 # 'etat_initial': (POSTE_ETAT_ABF, ),
151 # 'etat_final': POSTE_ETAT_FINANCE,
153 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
: {
155 'etat_initial': (POSTE_ETAT_ABF
, POSTE_ETAT_FINANCE
),
156 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
158 POSTE_ACTION_DEMANDE_JUSTIF
: {
160 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
161 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF
,
163 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
: {
165 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF
,),
166 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
168 POSTE_ACTION_ENVOYER_REGION_FINALISATION
: {
170 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
171 'etat_final': POSTE_ETAT_REGION_FINALISATION
173 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
175 'etat_initial': (POSTE_ETAT_REGION_FINALISATION
,),
176 'etat_final': POSTE_ETAT_DRH_FINALISATION
,
178 POSTE_ACTION_FINALISER
: {
180 'etat_initial': (POSTE_ETAT_DRH_FINALISATION
,),
181 'etat_final': POSTE_ETAT_FINALISE
186 class PosteWorkflow(WorkflowMixin
):
187 etat_initial
= POSTE_ETAT_BROUILLON
189 actions
= POSTE_ACTIONS
194 def acces_directeur_bureau(self
, action
, request
):
195 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
196 return groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
or \
197 (groups
.is_user_dans_services_centraux(request
.user
) and
198 groups
.ADMINISTRATEURS
in user_groups
)
200 def acces_administrateur(self
, action
, request
):
201 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
202 return groups
.CORRESPONDANT_RH
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
203 or groups
.DRH_NIVEAU_2
in user_groups
205 def acces_drh_controle(self
, action
, request
):
206 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
207 return groups
.DIRECTEUR_DE_BUREAU
in user_groups
or \
208 groups
.SERVICE_UTILISATEURS
in user_groups
or \
209 groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
or \
210 (groups
.ADMINISTRATEURS
in user_groups
and
211 (action
== POSTE_ACTION_RETOUR_DEMANDE_MODIF
or
212 groups
.is_user_dans_region(request
.user
)))
214 def acces_drh_2(self
, action
, request
):
215 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
216 return groups
.DRH_NIVEAU_1
in user_groups
218 def acces_demande_modif(self
, action
, request
):
219 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
220 return groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
222 def acces_srv_utilisateurs(self
, action
, request
):
223 if not groups
.is_user_dans_services_centraux(request
.user
):
225 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
226 return groups
.ADMINISTRATEURS
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
227 or groups
.DRH_NIVEAU_2
in user_groups
229 def acces_accior(self
, action
, request
):
230 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
231 return groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
233 def acces_abf(self
, action
, request
):
234 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
235 return groups
.ACCIOR
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
236 or groups
.DRH_NIVEAU_2
in user_groups
238 def acces_finance(self
, action
, request
):
239 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
240 return groups
.ABF
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
241 or groups
.DRH_NIVEAU_2
in user_groups
243 def acces_haute_direction(self
, action
, request
):
244 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
245 return groups
.FINANCE
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
246 or groups
.DRH_NIVEAU_2
in user_groups
248 def acces_region_finalisation(self
, action
, request
):
249 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
250 return groups
.HAUTE_DIRECTION
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
251 or groups
.DRH_NIVEAU_2
in user_groups
253 def acces_drh_finalisation(self
, action
, request
):
254 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
255 return groups
.ADMINISTRATEURS
in user_groups
or \
256 groups
.CORRESPONDANT_RH
in user_groups
or \
257 groups
.DRH_NIVEAU_1
in user_groups
or \
258 groups
.DRH_NIVEAU_2
in user_groups
260 def acces_demande_justif(self
, action
, request
):
261 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
262 return groups
.HAUTE_DIRECTION
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
263 or groups
.DRH_NIVEAU_2
in user_groups
265 def acces_retour_demande_modif(self
, action
, request
):
266 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
267 return groups
.ADMINISTRATEURS
in user_groups
or groups
.DRH_NIVEAU_1
in user_groups \
268 or groups
.DRH_NIVEAU_2
in user_groups
270 def acces_retour_demande_justif(self
, action
, request
):
271 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
272 return groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
274 def acces_finaliser(self
, action
, request
):
275 user_groups
= [g
.name
for g
in request
.user
.groups
.all()]
276 return groups
.DRH_NIVEAU_1
in user_groups
or groups
.DRH_NIVEAU_2
in user_groups
280 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
281 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
282 DOSSIER_ETAT_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
283 DOSSIER_ETAT_SERVICE_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
284 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
285 DOSSIER_ETAT_DRH_2
= POSTE_ETAT_DRH_2
286 DOSSIER_ETAT_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
287 DOSSIER_ETAT_ACCIOR
= POSTE_ETAT_ACCIOR
288 DOSSIER_ETAT_ABF
= POSTE_ETAT_ABF
289 DOSSIER_ETAT_FINANCE
= POSTE_ETAT_FINANCE
290 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
291 DOSSIER_ETAT_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
292 DOSSIER_ETAT_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
293 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
294 DOSSIER_ETAT_FINALISE
= POSTE_ETAT_FINALISE
297 class DossierWorkflow(PosteWorkflow
):
303 MAP_GROUPE_ETATS_A_FAIRE
= {
304 groups
.CORRESPONDANT_RH
: (
305 POSTE_ETAT_BROUILLON
, DOSSIER_ETAT_BROUILLON
,
306 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
308 groups
.SERVICE_UTILISATEURS
: (
309 POSTE_ETAT_SERVICE_UTILISATEURS
,
310 DOSSIER_ETAT_SERVICE_UTILISATEURS
312 groups
.ADMINISTRATEURS
: (
313 POSTE_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_ADMINISTRATEUR
,
314 POSTE_ETAT_DEMANDE_MODIF
, DOSSIER_ETAT_DEMANDE_MODIF
,
315 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
,
317 groups
.DIRECTEUR_DE_BUREAU
: (
318 POSTE_ETAT_DIRECTEUR_BUREAU
, DOSSIER_ETAT_DIRECTEUR_BUREAU
320 groups
.DRH_NIVEAU_1
: (
321 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
,
322 DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,
323 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_DEMANDE_JUSTIF
325 groups
.DRH_NIVEAU_2
: (POSTE_ETAT_DRH_2
, DOSSIER_ETAT_DRH_2
),
326 groups
.ACCIOR
: (POSTE_ETAT_ACCIOR
, DOSSIER_ETAT_ACCIOR
),
327 groups
.ABF
: (POSTE_ETAT_ABF
, DOSSIER_ETAT_ABF
),
328 groups
.FINANCE
: (POSTE_ETAT_FINANCE
, DOSSIER_ETAT_FINANCE
),
329 groups
.HAUTE_DIRECTION
: (
330 POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
336 POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
,
337 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
, POSTE_ETAT_DIRECTEUR_BUREAU
,
338 POSTE_ETAT_SERVICE_UTILISATEURS
, POSTE_ETAT_DEMANDE_MODIF
,
339 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_BROUILLON
,
340 DOSSIER_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_DRH_CONTROLE
,
341 DOSSIER_ETAT_DRH_2
, DOSSIER_ETAT_DIRECTEUR_BUREAU
,
342 DOSSIER_ETAT_SERVICE_UTILISATEURS
, DOSSIER_ETAT_DEMANDE_MODIF
,
343 DOSSIER_ETAT_DEMANDE_JUSTIF
,
347 DOSSIER_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_DRH_FINALISATION
,
348 DOSSIER_ETAT_FINALISE