1 # -*- encoding: utf-8 -*-
3 from django
.contrib
.auth
.models
import Group
4 from auf
.django
.workflow
.models
import WorkflowMixin
5 from utils
import is_user_dans_services_centraux
, is_user_dans_region
6 from rh
.groups
import *
9 POSTE_ETAT_BROUILLON
= 'BROUILLON'
10 POSTE_ETAT_ADMINISTRATEUR
= 'ADMINISTRATEUR'
11 POSTE_ETAT_DIRECTEUR_BUREAU
= 'DIRECTEUR_BUREAU'
12 POSTE_ETAT_SERVICE_UTILISATEURS
= 'SRV_UTILISATEURS'
13 POSTE_ETAT_DRH_CONTROLE
= 'DRH_CONTROLE'
14 POSTE_ETAT_DRH_2
= 'DRH_2'
15 POSTE_ETAT_DEMANDE_MODIF
= 'DEMANDE_MODIF'
16 POSTE_ETAT_ACCIOR
= 'ACCIOR'
17 POSTE_ETAT_ABF
= 'ABF'
18 POSTE_ETAT_HAUTE_DIRECTION
= 'HAUTE_DIRECTION'
19 POSTE_ETAT_DEMANDE_JUSTIF
= 'DEMANDE_JUSTIF'
20 POSTE_ETAT_REGION_FINALISATION
= 'REGION_FINALISATION'
21 POSTE_ETAT_DRH_FINALISATION
= 'DRH_FINALISATION'
22 POSTE_ETAT_FINALISE
= 'FINALISE'
25 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
26 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
27 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
28 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
29 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
30 POSTE_ACTION_ENVOYER_DRH_2
= POSTE_ETAT_DRH_2
31 POSTE_ACTION_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
32 POSTE_ACTION_RETOUR_DEMANDE_MODIF
= 'RETOUR_DEMANDE_MODIF'
33 POSTE_ACTION_ENVOYER_ACCIOR
= POSTE_ETAT_ACCIOR
34 POSTE_ACTION_ENVOYER_ABF
= POSTE_ETAT_ABF
35 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
36 POSTE_ACTION_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
37 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
= 'RETOUR_DEMANDE_JUSTIF'
38 POSTE_ACTION_ENVOYER_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
39 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
40 POSTE_ACTION_FINALISER
= 'FINALISER'
44 POSTE_ETAT_BROUILLON
: u
"En rédaction",
45 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'administrateur",
46 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Directeur de bureau",
47 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Service utilisateurs",
48 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
49 POSTE_ETAT_DRH_2
: u
"Validation DRH 2",
50 POSTE_ETAT_DEMANDE_MODIF
: u
"Demande de modification",
51 POSTE_ETAT_ACCIOR
: u
"ACCIOR",
52 POSTE_ETAT_ABF
: u
"ABF",
53 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
54 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Demande de justification",
55 POSTE_ETAT_REGION_FINALISATION
: u
'Retour à la région',
56 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH',
57 POSTE_ETAT_FINALISE
: u
'Finalisée'
60 #libellés états pour boutons
61 POSTE_ETATS_BOUTONS
= {
62 POSTE_ETAT_DIRECTEUR_BUREAU
: u
"Envoyer au directeur de bureau",
63 POSTE_ETAT_SERVICE_UTILISATEURS
: u
"Envoyer au service utilisateurs",
64 POSTE_ETAT_ADMINISTRATEUR
: u
"Envoyer à l'adminstrateur",
65 POSTE_ETAT_DRH_CONTROLE
: u
"Envoyer à la DRH (validation)",
66 POSTE_ETAT_DRH_2
: u
"Envoyer à DRH 2",
67 POSTE_ETAT_DEMANDE_MODIF
: u
"Envoyer une demande de modification",
68 POSTE_ETAT_ACCIOR
: u
"Envoyer à l'ACCIOR",
69 POSTE_ETAT_ABF
: u
"Envoyer à l'ABF",
70 POSTE_ETAT_HAUTE_DIRECTION
: u
"Envoyer à la haute direction",
71 POSTE_ETAT_DEMANDE_JUSTIF
: u
"Envoyer une demande de justification",
72 POSTE_ETAT_REGION_FINALISATION
: u
"Retourner à la région pour finalisation",
73 POSTE_ETAT_DRH_FINALISATION
: u
'Retourner à la DRH pour finalisation',
74 POSTE_ETAT_FINALISE
: u
'Finaliser'
77 # définition du worflow séquentiel
79 POSTE_ACTION_ENVOYER_BROUILLON
: {
81 'etat_initial' : None,
82 'etat_final' : POSTE_ETAT_BROUILLON
,
84 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
: {
86 'etat_initial' : (POSTE_ETAT_BROUILLON
,),
87 'etat_final' : POSTE_ETAT_ADMINISTRATEUR
,
89 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS
: {
91 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR
,),
92 'etat_final' : POSTE_ETAT_SERVICE_UTILISATEURS
,
94 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU
: {
96 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR
,),
97 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU
,
99 POSTE_ACTION_ENVOYER_DRH_CONTROLE
: {
101 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DIRECTEUR_BUREAU
, POSTE_ETAT_SERVICE_UTILISATEURS
),
102 'etat_final' : POSTE_ETAT_DRH_CONTROLE
,
104 POSTE_ACTION_ENVOYER_DRH_2
: {
106 'etat_initial' : (POSTE_ETAT_DRH_CONTROLE
,),
107 'etat_final' : POSTE_ETAT_DRH_2
,
109 POSTE_ACTION_DEMANDE_MODIF
: {
111 'etat_initial' : (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
),
112 'etat_final': POSTE_ETAT_DEMANDE_MODIF
,
114 POSTE_ACTION_RETOUR_DEMANDE_MODIF
: {
116 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF
,),
117 'etat_final': POSTE_ETAT_DRH_CONTROLE
,
119 POSTE_ACTION_ENVOYER_ACCIOR
: {
121 'etat_initial' : (POSTE_ETAT_DRH_2
,),
122 'etat_final' : POSTE_ETAT_ACCIOR
,
124 POSTE_ACTION_ENVOYER_ABF
: {
126 'etat_initial' : (POSTE_ETAT_ACCIOR
,),
127 'etat_final' : POSTE_ETAT_ABF
,
129 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
: {
131 'etat_initial' : (POSTE_ETAT_ABF
,),
132 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION
,
134 POSTE_ACTION_DEMANDE_JUSTIF
: {
136 'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION
,),
137 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF
,
139 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF
: {
141 'etat_initial' : (POSTE_ETAT_DEMANDE_JUSTIF
,),
142 'etat_final': POSTE_ETAT_HAUTE_DIRECTION
,
144 POSTE_ACTION_ENVOYER_REGION_FINALISATION
: {
146 'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION
,),
147 'etat_final' : POSTE_ETAT_REGION_FINALISATION
149 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
151 'etat_initial' : (POSTE_ETAT_REGION_FINALISATION
,),
152 'etat_final' : POSTE_ETAT_DRH_FINALISATION
,
154 POSTE_ACTION_FINALISER
: {
155 'nom' : u
'Finaliser',
156 'etat_initial' : (POSTE_ETAT_DRH_FINALISATION
,),
157 'etat_final' : POSTE_ETAT_FINALISE
162 class PosteWorkflow(WorkflowMixin
):
163 etat_initial
= POSTE_ETAT_BROUILLON
165 actions
= POSTE_ACTIONS
170 def acces_directeur_bureau(self
, action
, request
):
171 user_groups
= request
.user
.groups
.all()
172 return grp_drh
in user_groups
or grp_drh2
in user_groups
or \
173 (is_user_dans_services_centraux(request
.user
) and
174 grp_administrateurs
in user_groups
)
176 def acces_administrateur(self
, action
, request
):
177 user_groups
= request
.user
.groups
.all()
178 return grp_correspondants_rh
in user_groups
or grp_drh
in user_groups
or \
179 grp_drh2
in user_groups
181 def acces_drh_controle(self
, action
, request
):
182 user_groups
= request
.user
.groups
.all()
183 return grp_directeurs_bureau
in user_groups
or \
184 grp_service_utilisateurs
in user_groups
or \
185 grp_drh
in user_groups
or grp_drh2
in user_groups
or \
186 (grp_administrateurs
in user_groups
and
187 (action
== POSTE_ACTION_RETOUR_DEMANDE_MODIF
or
188 is_user_dans_region(request
.user
)))
190 def acces_drh_2(self
, action
, request
):
191 user_groups
= request
.user
.groups
.all()
192 return grp_drh
in user_groups
194 def acces_demande_modif(self
, action
, request
):
195 user_groups
= request
.user
.groups
.all()
196 return grp_drh
in user_groups
or grp_drh2
in user_groups
198 def acces_srv_utilisateurs(self
, action
, request
):
199 if not is_user_dans_services_centraux(request
.user
):
201 user_groups
= request
.user
.groups
.all()
202 return grp_administrateurs
in user_groups
or grp_drh
in user_groups
or \
203 grp_drh2
in user_groups
205 def acces_accior(self
, action
, request
):
206 user_groups
= request
.user
.groups
.all()
207 return grp_drh
in user_groups
or grp_drh2
in user_groups
209 def acces_abf(self
, action
, request
):
210 user_groups
= request
.user
.groups
.all()
211 return grp_accior
in user_groups
or grp_drh
in user_groups
or grp_drh2
in user_groups
213 def acces_haute_direction(self
, action
, request
):
214 user_groups
= request
.user
.groups
.all()
215 return grp_abf
in user_groups
or grp_drh
in user_groups
or grp_drh2
in user_groups
217 def acces_region_finalisation(self
, action
, request
):
218 user_groups
= request
.user
.groups
.all()
219 return grp_haute_direction
in user_groups
or grp_drh
in user_groups
or \
220 grp_drh2
in user_groups
222 def acces_drh_finalisation(self
, action
, request
):
223 user_groups
= request
.user
.groups
.all()
224 return grp_administrateurs
in user_groups
or \
225 grp_correspondants_rh
in user_groups
or \
226 grp_drh
in user_groups
or \
227 grp_drh2
in user_groups
229 def acces_demande_justif(self
, action
, request
):
230 user_groups
= request
.user
.groups
.all()
231 return grp_haute_direction
in user_groups
or grp_drh
in user_groups
or \
232 grp_drh2
in user_groups
234 def acces_retour_demande_modif(self
, action
, request
):
235 user_groups
= request
.user
.groups
.all()
236 return grp_administrateurs
in user_groups
or grp_drh
in user_groups
or \
237 grp_drh2
in user_groups
239 def acces_retour_demande_justif(self
, action
, request
):
240 user_groups
= request
.user
.groups
.all()
241 return grp_drh
in user_groups
or grp_drh2
in user_groups
243 def acces_finaliser(self
, action
, request
):
244 user_groups
= request
.user
.groups
.all()
245 return grp_drh
in user_groups
or grp_drh2
in user_groups
249 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
250 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
251 DOSSIER_ETAT_DIRECTEUR_BUREAU
= POSTE_ETAT_DIRECTEUR_BUREAU
252 DOSSIER_ETAT_SERVICE_UTILISATEURS
= POSTE_ETAT_SERVICE_UTILISATEURS
253 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
254 DOSSIER_ETAT_DRH_2
= POSTE_ETAT_DRH_2
255 DOSSIER_ETAT_DEMANDE_MODIF
= POSTE_ETAT_DEMANDE_MODIF
256 DOSSIER_ETAT_ACCIOR
= POSTE_ETAT_ACCIOR
257 DOSSIER_ETAT_ABF
= POSTE_ETAT_ABF
258 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
259 DOSSIER_ETAT_DEMANDE_JUSTIF
= POSTE_ETAT_DEMANDE_JUSTIF
260 DOSSIER_ETAT_REGION_FINALISATION
= POSTE_ETAT_REGION_FINALISATION
261 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
262 DOSSIER_ETAT_FINALISE
= POSTE_ETAT_FINALISE
264 class DossierWorkflow(PosteWorkflow
):
270 MAP_GROUPE_ETATS_A_FAIRE
= {
271 grp_correspondants_rh
: (POSTE_ETAT_BROUILLON
, DOSSIER_ETAT_BROUILLON
,
272 POSTE_ETAT_REGION_FINALISATION
,
273 DOSSIER_ETAT_REGION_FINALISATION
),
274 grp_service_utilisateurs
: (POSTE_ETAT_SERVICE_UTILISATEURS
,
275 DOSSIER_ETAT_SERVICE_UTILISATEURS
,),
276 grp_administrateurs
: (POSTE_ETAT_ADMINISTRATEUR
,
277 DOSSIER_ETAT_ADMINISTRATEUR
,
278 POSTE_ETAT_DEMANDE_MODIF
,
279 DOSSIER_ETAT_DEMANDE_MODIF
,
280 POSTE_ETAT_REGION_FINALISATION
,
281 DOSSIER_ETAT_REGION_FINALISATION
,
283 grp_directeurs_bureau
: (POSTE_ETAT_DIRECTEUR_BUREAU
, DOSSIER_ETAT_DIRECTEUR_BUREAU
, ),
284 grp_drh
: (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
,
285 DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,
286 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_DEMANDE_JUSTIF
),
287 grp_drh2
: (POSTE_ETAT_DRH_2
, DOSSIER_ETAT_DRH_2
),
288 grp_accior
: (POSTE_ETAT_ACCIOR
, DOSSIER_ETAT_ACCIOR
, ),
289 grp_abf
: (POSTE_ETAT_ABF
, DOSSIER_ETAT_ABF
, ),
290 grp_haute_direction
: (POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
, ),
294 ETATS_EDITABLE
= (POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
,
295 POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_2
,
296 POSTE_ETAT_DIRECTEUR_BUREAU
,
297 POSTE_ETAT_SERVICE_UTILISATEURS
, POSTE_ETAT_DEMANDE_MODIF
,
298 POSTE_ETAT_DEMANDE_JUSTIF
, DOSSIER_ETAT_BROUILLON
,
299 DOSSIER_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_DRH_CONTROLE
,
300 DOSSIER_ETAT_DRH_2
, DOSSIER_ETAT_DIRECTEUR_BUREAU
,
301 DOSSIER_ETAT_SERVICE_UTILISATEURS
,
302 DOSSIER_ETAT_DEMANDE_MODIF
, DOSSIER_ETAT_DEMANDE_JUSTIF
,
305 ETATS_VALIDE
= (DOSSIER_ETAT_REGION_FINALISATION
, DOSSIER_ETAT_DRH_FINALISATION
,
306 DOSSIER_ETAT_FINALISE
)