[#2658] Retrait du hack app_label() dans rh.models
[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 11
4ba84959
EMS
12dae_groupes = (
13 grp_correspondants_rh,
14 grp_administrateurs,
15 grp_directeurs_bureau,
16 grp_drh,
17 grp_drh2,
18 grp_accior,
19 grp_abf,
20 grp_haute_direction,
21 grp_service_utilisateurs,
22)
23
8fa94e8b
OL
24# codes états
25POSTE_ETAT_BROUILLON = 'BROUILLON'
1b217058 26POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
d8cfc3d5
OL
27POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU'
28POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS'
1b217058 29POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
5aaaef6b 30POSTE_ETAT_DRH_2 = 'DRH_2'
bbb2458d 31POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF'
d8cfc3d5 32POSTE_ETAT_ACCIOR = 'ACCIOR'
9a62bc55 33POSTE_ETAT_ABF = 'ABF'
1b217058 34POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
bbb2458d 35POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF'
9536ea21 36POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION'
1b217058 37POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
9536ea21 38POSTE_ETAT_FINALISE = 'FINALISE'
1b217058
OL
39
40#codes actions
41POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
1b217058 42POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
43POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
44POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
1b217058 45POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 46POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d
EMS
47POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
48POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF'
d8cfc3d5 49POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 50POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF
1b217058 51POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d
EMS
52POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
53POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF'
9536ea21 54POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
1b217058 55POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 56POSTE_ACTION_FINALISER = 'FINALISER'
8fa94e8b
OL
57
58#libellés états
59POSTE_ETATS = {
b31ce2d7
EMS
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'
8fa94e8b
OL
74 }
75
56589624
OL
76#libellés états pour boutons
77POSTE_ETATS_BOUTONS = {
b31ce2d7
EMS
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'
56589624
OL
91 }
92
8fa94e8b
OL
93# définition du worflow séquentiel
94POSTE_ACTIONS = {
b31ce2d7
EMS
95 POSTE_ACTION_ENVOYER_BROUILLON: {
96 'nom': u'Créer',
97 'etat_initial': None,
98 'etat_final': POSTE_ETAT_BROUILLON,
8fa94e8b 99 },
b31ce2d7
EMS
100 POSTE_ACTION_ENVOYER_ADMINISTRATEUR: {
101 'nom': u'Envoyer',
102 'etat_initial': (POSTE_ETAT_BROUILLON,),
103 'etat_final': POSTE_ETAT_ADMINISTRATEUR,
1b217058 104 },
b31ce2d7
EMS
105 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS: {
106 'nom': u'Envoyer',
107 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
108 'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS,
d8cfc3d5 109 },
b31ce2d7
EMS
110 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU: {
111 'nom': u'Envoyer',
112 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
113 'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU,
d8cfc3d5 114 },
b31ce2d7
EMS
115 POSTE_ACTION_ENVOYER_DRH_CONTROLE: {
116 'nom': u'Envoyer',
117 'etat_initial': (
118 POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU,
119 POSTE_ETAT_SERVICE_UTILISATEURS
120 ),
121 'etat_final': POSTE_ETAT_DRH_CONTROLE,
1b217058 122 },
b31ce2d7
EMS
123 POSTE_ACTION_ENVOYER_DRH_2: {
124 'nom': u'Envoyer',
125 'etat_initial': (POSTE_ETAT_DRH_CONTROLE,),
126 'etat_final': POSTE_ETAT_DRH_2,
5aaaef6b 127 },
b31ce2d7
EMS
128 POSTE_ACTION_DEMANDE_MODIF: {
129 'nom': u'Envoyer',
130 'etat_initial': (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
bbb2458d
EMS
131 'etat_final': POSTE_ETAT_DEMANDE_MODIF,
132 },
b31ce2d7 133 POSTE_ACTION_RETOUR_DEMANDE_MODIF: {
bbb2458d
EMS
134 'nom': u'Retourner',
135 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF,),
136 'etat_final': POSTE_ETAT_DRH_CONTROLE,
137 },
b31ce2d7
EMS
138 POSTE_ACTION_ENVOYER_ACCIOR: {
139 'nom': u'Envoyer',
140 'etat_initial': (POSTE_ETAT_DRH_2,),
141 'etat_final': POSTE_ETAT_ACCIOR,
d8cfc3d5 142 },
b31ce2d7
EMS
143 POSTE_ACTION_ENVOYER_ABF: {
144 'nom': u'Envoyer',
145 'etat_initial': (POSTE_ETAT_ACCIOR,),
146 'etat_final': POSTE_ETAT_ABF,
1b217058 147 },
b31ce2d7
EMS
148 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION: {
149 'nom': u'Envoyer',
150 'etat_initial': (POSTE_ETAT_ABF,),
151 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
1b217058 152 },
b31ce2d7
EMS
153 POSTE_ACTION_DEMANDE_JUSTIF: {
154 'nom': u'Envoyer',
155 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
bbb2458d
EMS
156 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF,
157 },
b31ce2d7
EMS
158 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF: {
159 'nom': u'Envoyer',
160 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF,),
bbb2458d
EMS
161 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
162 },
b31ce2d7
EMS
163 POSTE_ACTION_ENVOYER_REGION_FINALISATION: {
164 'nom': u'Envoyer',
165 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
166 'etat_final': POSTE_ETAT_REGION_FINALISATION
9536ea21 167 },
b31ce2d7
EMS
168 POSTE_ACTION_ENVOYER_DRH_FINALISATION: {
169 'nom': u'Envoyer',
170 'etat_initial': (POSTE_ETAT_REGION_FINALISATION,),
171 'etat_final': POSTE_ETAT_DRH_FINALISATION,
8fa94e8b 172 },
b31ce2d7
EMS
173 POSTE_ACTION_FINALISER: {
174 'nom': u'Finaliser',
175 'etat_initial': (POSTE_ETAT_DRH_FINALISATION,),
176 'etat_final': POSTE_ETAT_FINALISE
9536ea21 177 },
8fa94e8b
OL
178}
179
56589624 180
8fa94e8b
OL
181class PosteWorkflow(WorkflowMixin):
182 etat_initial = POSTE_ETAT_BROUILLON
183 etats = POSTE_ETATS
184 actions = POSTE_ACTIONS
185
186 class Meta:
187 abstract = True
188
d8cfc3d5 189 def acces_directeur_bureau(self, action, request):
2da4acc0 190 user_groups = request.user.groups.all()
5aaaef6b 191 return grp_drh in user_groups or grp_drh2 in user_groups or \
b31ce2d7 192 (is_user_dans_services_centraux(request.user) and
5aaaef6b 193 grp_administrateurs in user_groups)
1b217058
OL
194
195 def acces_administrateur(self, action, request):
5aaaef6b 196 user_groups = request.user.groups.all()
b31ce2d7
EMS
197 return grp_correspondants_rh in user_groups or grp_drh in user_groups \
198 or grp_drh2 in user_groups
1b217058
OL
199
200 def acces_drh_controle(self, action, request):
5aaaef6b
EMS
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)))
208
209 def acces_drh_2(self, action, request):
210 user_groups = request.user.groups.all()
211 return grp_drh in user_groups
bbb2458d
EMS
212
213 def acces_demande_modif(self, action, request):
5aaaef6b
EMS
214 user_groups = request.user.groups.all()
215 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 216
d8cfc3d5
OL
217 def acces_srv_utilisateurs(self, action, request):
218 if not is_user_dans_services_centraux(request.user):
219 return False
5aaaef6b 220 user_groups = request.user.groups.all()
b31ce2d7
EMS
221 return grp_administrateurs in user_groups or grp_drh in user_groups \
222 or grp_drh2 in user_groups
d8cfc3d5 223
d8cfc3d5 224 def acces_accior(self, action, request):
5aaaef6b
EMS
225 user_groups = request.user.groups.all()
226 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 227
9a62bc55 228 def acces_abf(self, action, request):
5aaaef6b 229 user_groups = request.user.groups.all()
b31ce2d7
EMS
230 return grp_accior in user_groups or grp_drh in user_groups \
231 or grp_drh2 in user_groups
d8cfc3d5 232
1b217058 233 def acces_haute_direction(self, action, request):
5aaaef6b 234 user_groups = request.user.groups.all()
b31ce2d7
EMS
235 return grp_abf in user_groups or grp_drh in user_groups \
236 or grp_drh2 in user_groups
1b217058 237
9536ea21 238 def acces_region_finalisation(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
9536ea21 242
1b217058 243 def acces_drh_finalisation(self, action, request):
5aaaef6b 244 user_groups = request.user.groups.all()
25524bf7
EMS
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
1b217058 249
bbb2458d 250 def acces_demande_justif(self, action, request):
5aaaef6b 251 user_groups = request.user.groups.all()
b31ce2d7
EMS
252 return grp_haute_direction in user_groups or grp_drh in user_groups \
253 or grp_drh2 in user_groups
bbb2458d
EMS
254
255 def acces_retour_demande_modif(self, action, request):
5aaaef6b 256 user_groups = request.user.groups.all()
b31ce2d7
EMS
257 return grp_administrateurs in user_groups or grp_drh in user_groups \
258 or grp_drh2 in user_groups
bbb2458d
EMS
259
260 def acces_retour_demande_justif(self, action, request):
5aaaef6b
EMS
261 user_groups = request.user.groups.all()
262 return grp_drh in user_groups or grp_drh2 in user_groups
bbb2458d 263
9536ea21 264 def acces_finaliser(self, action, request):
5aaaef6b
EMS
265 user_groups = request.user.groups.all()
266 return grp_drh in user_groups or grp_drh2 in user_groups
9536ea21 267
1b217058 268
515124ec
OL
269#codes actions
270DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON
515124ec 271DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
272DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
273DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
515124ec 274DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 275DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d 276DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
d8cfc3d5 277DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 278DOSSIER_ETAT_ABF = POSTE_ETAT_ABF
515124ec 279DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d 280DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
9536ea21 281DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
515124ec 282DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 283DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE
afc204bf 284
b31ce2d7 285
afc204bf
OL
286class DossierWorkflow(PosteWorkflow):
287
288 class Meta:
289 abstract = True
515124ec 290
515124ec
OL
291
292MAP_GROUPE_ETATS_A_FAIRE = {
b31ce2d7
EMS
293 grp_correspondants_rh: (
294 POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
295 POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION
296 ),
297 grp_service_utilisateurs: (
298 POSTE_ETAT_SERVICE_UTILISATEURS,
299 DOSSIER_ETAT_SERVICE_UTILISATEURS
300 ),
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,
305 ),
306 grp_directeurs_bureau: (
307 POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU
308 ),
309 grp_drh: (
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
313 ),
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
319 ),
515124ec 320}
286d0aa9
OL
321
322
b31ce2d7
EMS
323ETATS_EDITABLE = (
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,
286d0aa9
OL
332)
333
b31ce2d7
EMS
334ETATS_VALIDE = (
335 DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
336 DOSSIER_ETAT_FINALISE
337)