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 grp_correspondants_rh
,
15 grp_directeurs_bureau
,
21 grp_service_utilisateurs
,
25 POSTE_ETAT_BROUILLON
= 'BROUILLON'
26 POSTE_ETAT_ADMINISTRATEUR
= 'ADMINISTRATEUR'
27 POSTE_ETAT_DIRECTEUR_BUREAU
= 'DIRECTEUR_BUREAU'
28 POSTE_ETAT_SERVICE_UTILISATEURS
= 'SRV_UTILISATEURS'
29 POSTE_ETAT_DRH_CONTROLE
= 'DRH_CONTROLE'
30 POSTE_ETAT_DRH_2
= 'DRH_2'
31 POSTE_ETAT_DEMANDE_MODIF
= 'DEMANDE_MODIF'
32 POSTE_ETAT_ACCIOR
= 'ACCIOR'
33 POSTE_ETAT_ABF
= 'ABF'
34 POSTE_ETAT_HAUTE_DIRECTION
= 'HAUTE_DIRECTION'
35 POSTE_ETAT_DEMANDE_JUSTIF
= 'DEMANDE_JUSTIF'
36 POSTE_ETAT_REGION_FINALISATION
= 'REGION_FINALISATION'
37 POSTE_ETAT_DRH_FINALISATION
= 'DRH_FINALISATION'
38 POSTE_ETAT_FINALISE
= 'FINALISE'
41 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
42 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
43 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
44 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
45 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
46 POSTE_ACTION_ENVOYER_DRH_2
= POSTE_ETAT_DRH_2
47 POSTE_ACTION_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
48 POSTE_ACTION_RETOUR_DEMANDE_MODIF
= 'RETOUR_DEMANDE_MODIF'
49 POSTE_ACTION_ENVOYER_ACCIOR
= POSTE_ETAT_ACCIOR
50 POSTE_ACTION_ENVOYER_ABF
= POSTE_ETAT_ABF
51 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
52 POSTE_ACTION_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
53 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
= 'RETOUR_DEMANDE_JUSTIF'
54 POSTE_ACTION_ENVOYER_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
55 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
56 POSTE_ACTION_FINALISER
= 'FINALISER'
60 POSTE_ETAT_BROUILLON
: u
"En rédaction",
61 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'administrateur",
62 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Directeur de bureau",
63 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Service utilisateurs",
64 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
65 POSTE_ETAT_DRH_2
: u
"Validation DRH 2",
66 POSTE_ETAT_DEMANDE_MODIF
: u
"Demande de modification",
67 POSTE_ETAT_ACCIOR
: u
"ACCIOR",
68 POSTE_ETAT_ABF
: u
"ABF",
69 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
70 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Demande de justification",
71 POSTE_ETAT_REGION_FINALISATION
: u
'Retour à la région',
72 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH',
73 POSTE_ETAT_FINALISE
: u
'Finalisée'
76 #libellés états pour boutons
77 POSTE_ETATS_BOUTONS
= {
78 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Envoyer au directeur de bureau",
79 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Envoyer au service utilisateurs",
80 POSTE_ETAT_ADMINISTRATEUR
: u
"Envoyer à l'adminstrateur",
81 POSTE_ETAT_DRH_CONTROLE
: u
"Envoyer à la DRH (validation)",
82 POSTE_ETAT_DRH_2
: u
"Envoyer à DRH 2",
83 POSTE_ETAT_DEMANDE_MODIF
: u
"Envoyer une demande de modification",
84 POSTE_ETAT_ACCIOR
: u
"Envoyer à l'ACCIOR",
85 POSTE_ETAT_ABF
: u
"Envoyer à l'ABF",
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_HAUTE_DIRECTION
: {
150 'etat_initial': (POSTE_ETAT_ABF
,),
151 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
153 POSTE_ACTION_DEMANDE_JUSTIF
: {
155 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
156 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF
,
158 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
: {
160 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF
,),
161 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
163 POSTE_ACTION_ENVOYER_REGION_FINALISATION
: {
165 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION
,),
166 'etat_final': POSTE_ETAT_REGION_FINALISATION
168 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
170 'etat_initial': (POSTE_ETAT_REGION_FINALISATION
,),
171 'etat_final': POSTE_ETAT_DRH_FINALISATION
,
173 POSTE_ACTION_FINALISER
: {
175 'etat_initial': (POSTE_ETAT_DRH_FINALISATION
,),
176 'etat_final': POSTE_ETAT_FINALISE
181 class PosteWorkflow(WorkflowMixin
):
182 etat_initial
= POSTE_ETAT_BROUILLON
184 actions
= POSTE_ACTIONS
189 def acces_directeur_bureau(self
, action
, request
):
190 user_groups
= request
.user
.groups
.all()
191 return grp_drh
in user_groups
or grp_drh2
in user_groups
or \
192 (is_user_dans_services_centraux(request
.user
) and
193 grp_administrateurs
in user_groups
)
195 def acces_administrateur(self
, action
, request
):
196 user_groups
= request
.user
.groups
.all()
197 return grp_correspondants_rh
in user_groups
or grp_drh
in user_groups \
198 or grp_drh2
in user_groups
200 def acces_drh_controle(self
, action
, request
):
201 user_groups
= request
.user
.groups
.all()
202 return grp_directeurs_bureau
in user_groups
or \
203 grp_service_utilisateurs
in user_groups
or \
204 grp_drh
in user_groups
or grp_drh2
in user_groups
or \
205 (grp_administrateurs
in user_groups
and
206 (action
== POSTE_ACTION_RETOUR_DEMANDE_MODIF
or
207 is_user_dans_region(request
.user
)))
209 def acces_drh_2(self
, action
, request
):
210 user_groups
= request
.user
.groups
.all()
211 return grp_drh
in user_groups
213 def acces_demande_modif(self
, action
, request
):
214 user_groups
= request
.user
.groups
.all()
215 return grp_drh
in user_groups
or grp_drh2
in user_groups
217 def acces_srv_utilisateurs(self
, action
, request
):
218 if not is_user_dans_services_centraux(request
.user
):
220 user_groups
= request
.user
.groups
.all()
221 return grp_administrateurs
in user_groups
or grp_drh
in user_groups \
222 or grp_drh2
in user_groups
224 def acces_accior(self
, action
, request
):
225 user_groups
= request
.user
.groups
.all()
226 return grp_drh
in user_groups
or grp_drh2
in user_groups
228 def acces_abf(self
, action
, request
):
229 user_groups
= request
.user
.groups
.all()
230 return grp_accior
in user_groups
or grp_drh
in user_groups \
231 or grp_drh2
in user_groups
233 def acces_haute_direction(self
, action
, request
):
234 user_groups
= request
.user
.groups
.all()
235 return grp_abf
in user_groups
or grp_drh
in user_groups \
236 or grp_drh2
in user_groups
238 def acces_region_finalisation(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_drh_finalisation(self
, action
, request
):
244 user_groups
= request
.user
.groups
.all()
245 return grp_administrateurs
in user_groups
or \
246 grp_correspondants_rh
in user_groups
or \
247 grp_drh
in user_groups
or \
248 grp_drh2
in user_groups
250 def acces_demande_justif(self
, action
, request
):
251 user_groups
= request
.user
.groups
.all()
252 return grp_haute_direction
in user_groups
or grp_drh
in user_groups \
253 or grp_drh2
in user_groups
255 def acces_retour_demande_modif(self
, action
, request
):
256 user_groups
= request
.user
.groups
.all()
257 return grp_administrateurs
in user_groups
or grp_drh
in user_groups \
258 or grp_drh2
in user_groups
260 def acces_retour_demande_justif(self
, action
, request
):
261 user_groups
= request
.user
.groups
.all()
262 return grp_drh
in user_groups
or grp_drh2
in user_groups
264 def acces_finaliser(self
, action
, request
):
265 user_groups
= request
.user
.groups
.all()
266 return grp_drh
in user_groups
or grp_drh2
in user_groups
270 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
271 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
272 DOSSIER_ETAT_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
273 DOSSIER_ETAT_SERVICE_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
274 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
275 DOSSIER_ETAT_DRH_2
= POSTE_ETAT_DRH_2
276 DOSSIER_ETAT_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
277 DOSSIER_ETAT_ACCIOR
= POSTE_ETAT_ACCIOR
278 DOSSIER_ETAT_ABF
= POSTE_ETAT_ABF
279 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
280 DOSSIER_ETAT_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
281 DOSSIER_ETAT_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
282 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
283 DOSSIER_ETAT_FINALISE
= POSTE_ETAT_FINALISE
286 class DossierWorkflow(PosteWorkflow
):
292 MAP_GROUPE_ETATS_A_FAIRE
= {
293 grp_correspondants_rh
: (
294 POSTE_ETAT_BROUILLON
, DOSSIER_ETAT_BROUILLON
,
295 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
297 grp_service_utilisateurs
: (
298 POSTE_ETAT_SERVICE_UTILISATEURS
,
299 DOSSIER_ETAT_SERVICE_UTILISATEURS
301 grp_administrateurs
: (
302 POSTE_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_ADMINISTRATEUR
,
303 POSTE_ETAT_DEMANDE_MODIF
, DOSSIER_ETAT_DEMANDE_MODIF
,
304 POSTE_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_REGION_FINALISATION
,
306 grp_directeurs_bureau
: (
307 POSTE_ETAT_DIRECTEUR_BUREAU
, DOSSIER_ETAT_DIRECTEUR_BUREAU
310 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
,
311 DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,
312 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_DEMANDE_JUSTIF
314 grp_drh2
: (POSTE_ETAT_DRH_2
, DOSSIER_ETAT_DRH_2
),
315 grp_accior
: (POSTE_ETAT_ACCIOR
, DOSSIER_ETAT_ACCIOR
),
316 grp_abf
: (POSTE_ETAT_ABF
, DOSSIER_ETAT_ABF
),
317 grp_haute_direction
: (
318 POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
324 POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
,
325 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
, POSTE_ETAT_DIRECTEUR_BUREAU
,
326 POSTE_ETAT_SERVICE_UTILISATEURS
, POSTE_ETAT_DEMANDE_MODIF
,
327 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_BROUILLON
,
328 DOSSIER_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_DRH_CONTROLE
,
329 DOSSIER_ETAT_DRH_2
, DOSSIER_ETAT_DIRECTEUR_BUREAU
,
330 DOSSIER_ETAT_SERVICE_UTILISATEURS
, DOSSIER_ETAT_DEMANDE_MODIF
,
331 DOSSIER_ETAT_DEMANDE_JUSTIF
,
335 DOSSIER_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_DRH_FINALISATION
,
336 DOSSIER_ETAT_FINALISE