PEP8
[auf_rh_dae.git] / project / dae / workflow.py
CommitLineData
8fa94e8b
OL
1# -*- encoding: utf-8 -*-
2
3from auf.django.workflow.models import WorkflowMixin
b31ce2d7
EMS
4
5from project.dae.utils import \
6 is_user_dans_services_centraux, is_user_dans_region
7from project.rh.groups import \
8 grp_drh, grp_drh2, grp_administrateurs, grp_service_utilisateurs, \
9 grp_correspondants_rh, grp_directeurs_bureau, grp_accior, grp_abf, \
10 grp_haute_direction
8fa94e8b
OL
11
12# codes états
13POSTE_ETAT_BROUILLON = 'BROUILLON'
1b217058 14POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
d8cfc3d5
OL
15POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU'
16POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS'
1b217058 17POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
5aaaef6b 18POSTE_ETAT_DRH_2 = 'DRH_2'
bbb2458d 19POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF'
d8cfc3d5 20POSTE_ETAT_ACCIOR = 'ACCIOR'
9a62bc55 21POSTE_ETAT_ABF = 'ABF'
1b217058 22POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
bbb2458d 23POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF'
9536ea21 24POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION'
1b217058 25POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
9536ea21 26POSTE_ETAT_FINALISE = 'FINALISE'
1b217058
OL
27
28#codes actions
29POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
1b217058 30POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
31POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
32POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
1b217058 33POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 34POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d
EMS
35POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
36POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF'
d8cfc3d5 37POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 38POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF
1b217058 39POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d
EMS
40POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
41POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF'
9536ea21 42POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
1b217058 43POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 44POSTE_ACTION_FINALISER = 'FINALISER'
8fa94e8b
OL
45
46#libellés états
47POSTE_ETATS = {
b31ce2d7
EMS
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'
8fa94e8b
OL
62 }
63
56589624
OL
64#libellés états pour boutons
65POSTE_ETATS_BOUTONS = {
b31ce2d7
EMS
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'
56589624
OL
79 }
80
8fa94e8b
OL
81# définition du worflow séquentiel
82POSTE_ACTIONS = {
b31ce2d7
EMS
83 POSTE_ACTION_ENVOYER_BROUILLON: {
84 'nom': u'Créer',
85 'etat_initial': None,
86 'etat_final': POSTE_ETAT_BROUILLON,
8fa94e8b 87 },
b31ce2d7
EMS
88 POSTE_ACTION_ENVOYER_ADMINISTRATEUR: {
89 'nom': u'Envoyer',
90 'etat_initial': (POSTE_ETAT_BROUILLON,),
91 'etat_final': POSTE_ETAT_ADMINISTRATEUR,
1b217058 92 },
b31ce2d7
EMS
93 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS: {
94 'nom': u'Envoyer',
95 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
96 'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS,
d8cfc3d5 97 },
b31ce2d7
EMS
98 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU: {
99 'nom': u'Envoyer',
100 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
101 'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU,
d8cfc3d5 102 },
b31ce2d7
EMS
103 POSTE_ACTION_ENVOYER_DRH_CONTROLE: {
104 'nom': u'Envoyer',
105 'etat_initial': (
106 POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU,
107 POSTE_ETAT_SERVICE_UTILISATEURS
108 ),
109 'etat_final': POSTE_ETAT_DRH_CONTROLE,
1b217058 110 },
b31ce2d7
EMS
111 POSTE_ACTION_ENVOYER_DRH_2: {
112 'nom': u'Envoyer',
113 'etat_initial': (POSTE_ETAT_DRH_CONTROLE,),
114 'etat_final': POSTE_ETAT_DRH_2,
5aaaef6b 115 },
b31ce2d7
EMS
116 POSTE_ACTION_DEMANDE_MODIF: {
117 'nom': u'Envoyer',
118 'etat_initial': (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
bbb2458d
EMS
119 'etat_final': POSTE_ETAT_DEMANDE_MODIF,
120 },
b31ce2d7 121 POSTE_ACTION_RETOUR_DEMANDE_MODIF: {
bbb2458d
EMS
122 'nom': u'Retourner',
123 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF,),
124 'etat_final': POSTE_ETAT_DRH_CONTROLE,
125 },
b31ce2d7
EMS
126 POSTE_ACTION_ENVOYER_ACCIOR: {
127 'nom': u'Envoyer',
128 'etat_initial': (POSTE_ETAT_DRH_2,),
129 'etat_final': POSTE_ETAT_ACCIOR,
d8cfc3d5 130 },
b31ce2d7
EMS
131 POSTE_ACTION_ENVOYER_ABF: {
132 'nom': u'Envoyer',
133 'etat_initial': (POSTE_ETAT_ACCIOR,),
134 'etat_final': POSTE_ETAT_ABF,
1b217058 135 },
b31ce2d7
EMS
136 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION: {
137 'nom': u'Envoyer',
138 'etat_initial': (POSTE_ETAT_ABF,),
139 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
1b217058 140 },
b31ce2d7
EMS
141 POSTE_ACTION_DEMANDE_JUSTIF: {
142 'nom': u'Envoyer',
143 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
bbb2458d
EMS
144 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF,
145 },
b31ce2d7
EMS
146 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF: {
147 'nom': u'Envoyer',
148 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF,),
bbb2458d
EMS
149 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
150 },
b31ce2d7
EMS
151 POSTE_ACTION_ENVOYER_REGION_FINALISATION: {
152 'nom': u'Envoyer',
153 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
154 'etat_final': POSTE_ETAT_REGION_FINALISATION
9536ea21 155 },
b31ce2d7
EMS
156 POSTE_ACTION_ENVOYER_DRH_FINALISATION: {
157 'nom': u'Envoyer',
158 'etat_initial': (POSTE_ETAT_REGION_FINALISATION,),
159 'etat_final': POSTE_ETAT_DRH_FINALISATION,
8fa94e8b 160 },
b31ce2d7
EMS
161 POSTE_ACTION_FINALISER: {
162 'nom': u'Finaliser',
163 'etat_initial': (POSTE_ETAT_DRH_FINALISATION,),
164 'etat_final': POSTE_ETAT_FINALISE
9536ea21 165 },
8fa94e8b
OL
166}
167
56589624 168
8fa94e8b
OL
169class PosteWorkflow(WorkflowMixin):
170 etat_initial = POSTE_ETAT_BROUILLON
171 etats = POSTE_ETATS
172 actions = POSTE_ACTIONS
173
174 class Meta:
175 abstract = True
176
d8cfc3d5 177 def acces_directeur_bureau(self, action, request):
2da4acc0 178 user_groups = request.user.groups.all()
5aaaef6b 179 return grp_drh in user_groups or grp_drh2 in user_groups or \
b31ce2d7 180 (is_user_dans_services_centraux(request.user) and
5aaaef6b 181 grp_administrateurs in user_groups)
1b217058
OL
182
183 def acces_administrateur(self, action, request):
5aaaef6b 184 user_groups = request.user.groups.all()
b31ce2d7
EMS
185 return grp_correspondants_rh in user_groups or grp_drh in user_groups \
186 or grp_drh2 in user_groups
1b217058
OL
187
188 def acces_drh_controle(self, action, request):
5aaaef6b
EMS
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)))
196
197 def acces_drh_2(self, action, request):
198 user_groups = request.user.groups.all()
199 return grp_drh in user_groups
bbb2458d
EMS
200
201 def acces_demande_modif(self, action, request):
5aaaef6b
EMS
202 user_groups = request.user.groups.all()
203 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 204
d8cfc3d5
OL
205 def acces_srv_utilisateurs(self, action, request):
206 if not is_user_dans_services_centraux(request.user):
207 return False
5aaaef6b 208 user_groups = request.user.groups.all()
b31ce2d7
EMS
209 return grp_administrateurs in user_groups or grp_drh in user_groups \
210 or grp_drh2 in user_groups
d8cfc3d5 211
d8cfc3d5 212 def acces_accior(self, action, request):
5aaaef6b
EMS
213 user_groups = request.user.groups.all()
214 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 215
9a62bc55 216 def acces_abf(self, action, request):
5aaaef6b 217 user_groups = request.user.groups.all()
b31ce2d7
EMS
218 return grp_accior in user_groups or grp_drh in user_groups \
219 or grp_drh2 in user_groups
d8cfc3d5 220
1b217058 221 def acces_haute_direction(self, action, request):
5aaaef6b 222 user_groups = request.user.groups.all()
b31ce2d7
EMS
223 return grp_abf in user_groups or grp_drh in user_groups \
224 or grp_drh2 in user_groups
1b217058 225
9536ea21 226 def acces_region_finalisation(self, action, request):
5aaaef6b 227 user_groups = request.user.groups.all()
b31ce2d7
EMS
228 return grp_haute_direction in user_groups or grp_drh in user_groups \
229 or grp_drh2 in user_groups
9536ea21 230
1b217058 231 def acces_drh_finalisation(self, action, request):
5aaaef6b 232 user_groups = request.user.groups.all()
25524bf7
EMS
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
1b217058 237
bbb2458d 238 def acces_demande_justif(self, action, request):
5aaaef6b 239 user_groups = request.user.groups.all()
b31ce2d7
EMS
240 return grp_haute_direction in user_groups or grp_drh in user_groups \
241 or grp_drh2 in user_groups
bbb2458d
EMS
242
243 def acces_retour_demande_modif(self, action, request):
5aaaef6b 244 user_groups = request.user.groups.all()
b31ce2d7
EMS
245 return grp_administrateurs in user_groups or grp_drh in user_groups \
246 or grp_drh2 in user_groups
bbb2458d
EMS
247
248 def acces_retour_demande_justif(self, action, request):
5aaaef6b
EMS
249 user_groups = request.user.groups.all()
250 return grp_drh in user_groups or grp_drh2 in user_groups
bbb2458d 251
9536ea21 252 def acces_finaliser(self, action, request):
5aaaef6b
EMS
253 user_groups = request.user.groups.all()
254 return grp_drh in user_groups or grp_drh2 in user_groups
9536ea21 255
1b217058 256
515124ec
OL
257#codes actions
258DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON
515124ec 259DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
260DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
261DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
515124ec 262DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 263DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d 264DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
d8cfc3d5 265DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 266DOSSIER_ETAT_ABF = POSTE_ETAT_ABF
515124ec 267DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d 268DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
9536ea21 269DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
515124ec 270DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 271DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE
afc204bf 272
b31ce2d7 273
afc204bf
OL
274class DossierWorkflow(PosteWorkflow):
275
276 class Meta:
277 abstract = True
515124ec 278
515124ec
OL
279
280MAP_GROUPE_ETATS_A_FAIRE = {
b31ce2d7
EMS
281 grp_correspondants_rh: (
282 POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
283 POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION
284 ),
285 grp_service_utilisateurs: (
286 POSTE_ETAT_SERVICE_UTILISATEURS,
287 DOSSIER_ETAT_SERVICE_UTILISATEURS
288 ),
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,
293 ),
294 grp_directeurs_bureau: (
295 POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU
296 ),
297 grp_drh: (
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
301 ),
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
307 ),
515124ec 308}
286d0aa9
OL
309
310
b31ce2d7
EMS
311ETATS_EDITABLE = (
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,
286d0aa9
OL
320)
321
b31ce2d7
EMS
322ETATS_VALIDE = (
323 DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
324 DOSSIER_ETAT_FINALISE
325)