dae.Poste heritage
[auf_rh_dae.git] / project / dae / workflow.py
CommitLineData
8fa94e8b
OL
1# -*- encoding: utf-8 -*-
2
1b217058 3from django.contrib.auth.models import Group
8fa94e8b 4from auf.django.workflow.models import WorkflowMixin
42dfa870 5from utils import is_user_dans_services_centraux, is_user_dans_region
3f5cbabe 6from rh.groups import *
8fa94e8b
OL
7
8# codes états
9POSTE_ETAT_BROUILLON = 'BROUILLON'
1b217058 10POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
d8cfc3d5
OL
11POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU'
12POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS'
1b217058 13POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
5aaaef6b 14POSTE_ETAT_DRH_2 = 'DRH_2'
bbb2458d 15POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF'
d8cfc3d5 16POSTE_ETAT_ACCIOR = 'ACCIOR'
9a62bc55 17POSTE_ETAT_ABF = 'ABF'
1b217058 18POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
bbb2458d 19POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF'
9536ea21 20POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION'
1b217058 21POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
9536ea21 22POSTE_ETAT_FINALISE = 'FINALISE'
1b217058
OL
23
24#codes actions
25POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
1b217058 26POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
27POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
28POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
1b217058 29POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 30POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d
EMS
31POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
32POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF'
d8cfc3d5 33POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 34POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF
1b217058 35POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d
EMS
36POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
37POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF'
9536ea21 38POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
1b217058 39POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 40POSTE_ACTION_FINALISER = 'FINALISER'
8fa94e8b
OL
41
42#libellés états
43POSTE_ETATS = {
3799cafc 44 POSTE_ETAT_BROUILLON : u"En rédaction",
6a7260b4 45 POSTE_ETAT_ADMINISTRATEUR : u"Validation de l'administrateur",
d8cfc3d5
OL
46 POSTE_ETAT_DIRECTEUR_BUREAU : u"Directeur de bureau",
47 POSTE_ETAT_SERVICE_UTILISATEURS : u"Service utilisateurs",
62cfa562 48 POSTE_ETAT_DRH_CONTROLE : u"Validation DRH",
5aaaef6b 49 POSTE_ETAT_DRH_2 : u"Validation DRH 2",
bbb2458d 50 POSTE_ETAT_DEMANDE_MODIF : u"Demande de modification",
d8cfc3d5 51 POSTE_ETAT_ACCIOR : u"ACCIOR",
9a62bc55 52 POSTE_ETAT_ABF : u"ABF",
62cfa562 53 POSTE_ETAT_HAUTE_DIRECTION : u"Validation : Secrétaire général / Recteur",
bbb2458d 54 POSTE_ETAT_DEMANDE_JUSTIF : u"Demande de justification",
9536ea21
EMS
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'
8fa94e8b
OL
58 }
59
56589624
OL
60#libellés états pour boutons
61POSTE_ETATS_BOUTONS = {
d8cfc3d5
OL
62 POSTE_ETAT_DIRECTEUR_BUREAU : u"Envoyer au directeur de bureau",
63 POSTE_ETAT_SERVICE_UTILISATEURS : u"Envoyer au service utilisateurs",
56589624
OL
64 POSTE_ETAT_ADMINISTRATEUR : u"Envoyer à l'adminstrateur",
65 POSTE_ETAT_DRH_CONTROLE : u"Envoyer à la DRH (validation)",
5aaaef6b 66 POSTE_ETAT_DRH_2 : u"Envoyer à DRH 2",
bbb2458d 67 POSTE_ETAT_DEMANDE_MODIF : u"Envoyer une demande de modification",
871be4b0 68 POSTE_ETAT_ACCIOR : u"Envoyer à l'ACCIOR",
9a62bc55 69 POSTE_ETAT_ABF : u"Envoyer à l'ABF",
56589624 70 POSTE_ETAT_HAUTE_DIRECTION : u"Envoyer à la haute direction",
bbb2458d 71 POSTE_ETAT_DEMANDE_JUSTIF : u"Envoyer une demande de justification",
9536ea21
EMS
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'
56589624
OL
75 }
76
8fa94e8b
OL
77# définition du worflow séquentiel
78POSTE_ACTIONS = {
1b217058 79 POSTE_ACTION_ENVOYER_BROUILLON : {
8fa94e8b
OL
80 'nom' : u'Créer',
81 'etat_initial' : None,
82 'etat_final' : POSTE_ETAT_BROUILLON,
83 },
1b217058
OL
84 POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
85 'nom' : u'Envoyer',
8684fcaa 86 'etat_initial' : (POSTE_ETAT_BROUILLON,),
1b217058
OL
87 'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
88 },
d8cfc3d5
OL
89 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS : {
90 'nom' : u'Envoyer',
8684fcaa 91 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
d8cfc3d5
OL
92 'etat_final' : POSTE_ETAT_SERVICE_UTILISATEURS,
93 },
94 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU : {
95 'nom' : u'Envoyer',
bbb2458d 96 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
d8cfc3d5
OL
97 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU,
98 },
1b217058
OL
99 POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
100 'nom' : u'Envoyer',
bbb2458d 101 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU, POSTE_ETAT_SERVICE_UTILISATEURS),
1b217058
OL
102 'etat_final' : POSTE_ETAT_DRH_CONTROLE,
103 },
5aaaef6b 104 POSTE_ACTION_ENVOYER_DRH_2 : {
bbb2458d
EMS
105 'nom' : u'Envoyer',
106 'etat_initial' : (POSTE_ETAT_DRH_CONTROLE,),
5aaaef6b
EMS
107 'etat_final' : POSTE_ETAT_DRH_2,
108 },
109 POSTE_ACTION_DEMANDE_MODIF : {
110 'nom' : u'Envoyer',
111 'etat_initial' : (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
bbb2458d
EMS
112 'etat_final': POSTE_ETAT_DEMANDE_MODIF,
113 },
114 POSTE_ACTION_RETOUR_DEMANDE_MODIF : {
115 'nom': u'Retourner',
116 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF,),
117 'etat_final': POSTE_ETAT_DRH_CONTROLE,
118 },
d8cfc3d5 119 POSTE_ACTION_ENVOYER_ACCIOR : {
1b217058 120 'nom' : u'Envoyer',
5aaaef6b 121 'etat_initial' : (POSTE_ETAT_DRH_2,),
d8cfc3d5
OL
122 'etat_final' : POSTE_ETAT_ACCIOR,
123 },
9a62bc55 124 POSTE_ACTION_ENVOYER_ABF : {
d8cfc3d5 125 'nom' : u'Envoyer',
bbb2458d 126 'etat_initial' : (POSTE_ETAT_ACCIOR,),
9a62bc55 127 'etat_final' : POSTE_ETAT_ABF,
1b217058
OL
128 },
129 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
130 'nom' : u'Envoyer',
bbb2458d 131 'etat_initial' : (POSTE_ETAT_ABF,),
1b217058
OL
132 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
133 },
bbb2458d
EMS
134 POSTE_ACTION_DEMANDE_JUSTIF : {
135 'nom' : u'Envoyer',
136 'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION,),
137 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF,
138 },
139 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF : {
140 'nom' : u'Envoyer',
141 'etat_initial' : (POSTE_ETAT_DEMANDE_JUSTIF,),
142 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
143 },
9536ea21 144 POSTE_ACTION_ENVOYER_REGION_FINALISATION : {
1b217058 145 'nom' : u'Envoyer',
bbb2458d 146 'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION,),
9536ea21
EMS
147 'etat_final' : POSTE_ETAT_REGION_FINALISATION
148 },
149 POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
150 'nom' : u'Envoyer',
151 'etat_initial' : (POSTE_ETAT_REGION_FINALISATION,),
1b217058 152 'etat_final' : POSTE_ETAT_DRH_FINALISATION,
8fa94e8b 153 },
9536ea21
EMS
154 POSTE_ACTION_FINALISER : {
155 'nom' : u'Finaliser',
156 'etat_initial' : (POSTE_ETAT_DRH_FINALISATION,),
157 'etat_final' : POSTE_ETAT_FINALISE
158 },
8fa94e8b
OL
159}
160
56589624 161
8fa94e8b
OL
162class PosteWorkflow(WorkflowMixin):
163 etat_initial = POSTE_ETAT_BROUILLON
164 etats = POSTE_ETATS
165 actions = POSTE_ACTIONS
166
167 class Meta:
168 abstract = True
169
d8cfc3d5 170 def acces_directeur_bureau(self, action, request):
2da4acc0 171 user_groups = request.user.groups.all()
5aaaef6b
EMS
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)
1b217058
OL
175
176 def acces_administrateur(self, action, request):
5aaaef6b
EMS
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
1b217058
OL
180
181 def acces_drh_controle(self, action, request):
5aaaef6b
EMS
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)))
189
190 def acces_drh_2(self, action, request):
191 user_groups = request.user.groups.all()
192 return grp_drh in user_groups
bbb2458d
EMS
193
194 def acces_demande_modif(self, action, request):
5aaaef6b
EMS
195 user_groups = request.user.groups.all()
196 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 197
d8cfc3d5
OL
198 def acces_srv_utilisateurs(self, action, request):
199 if not is_user_dans_services_centraux(request.user):
200 return False
5aaaef6b 201 user_groups = request.user.groups.all()
dceb5455 202 return grp_administrateurs in user_groups or grp_drh in user_groups or \
25524bf7 203 grp_drh2 in user_groups
d8cfc3d5 204
d8cfc3d5 205 def acces_accior(self, action, request):
5aaaef6b
EMS
206 user_groups = request.user.groups.all()
207 return grp_drh in user_groups or grp_drh2 in user_groups
1b217058 208
9a62bc55 209 def acces_abf(self, action, request):
5aaaef6b
EMS
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
d8cfc3d5 212
1b217058 213 def acces_haute_direction(self, action, request):
5aaaef6b
EMS
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
1b217058 216
9536ea21 217 def acces_region_finalisation(self, action, request):
5aaaef6b
EMS
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
9536ea21 221
1b217058 222 def acces_drh_finalisation(self, action, request):
5aaaef6b 223 user_groups = request.user.groups.all()
25524bf7
EMS
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
1b217058 228
bbb2458d 229 def acces_demande_justif(self, action, request):
5aaaef6b
EMS
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
bbb2458d
EMS
233
234 def acces_retour_demande_modif(self, action, request):
5aaaef6b
EMS
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
bbb2458d
EMS
238
239 def acces_retour_demande_justif(self, action, request):
5aaaef6b
EMS
240 user_groups = request.user.groups.all()
241 return grp_drh in user_groups or grp_drh2 in user_groups
bbb2458d 242
9536ea21 243 def acces_finaliser(self, action, request):
5aaaef6b
EMS
244 user_groups = request.user.groups.all()
245 return grp_drh in user_groups or grp_drh2 in user_groups
9536ea21 246
1b217058 247
515124ec
OL
248#codes actions
249DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON
515124ec 250DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
d8cfc3d5
OL
251DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
252DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
515124ec 253DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
5aaaef6b 254DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2
bbb2458d 255DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
d8cfc3d5 256DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR
9a62bc55 257DOSSIER_ETAT_ABF = POSTE_ETAT_ABF
515124ec 258DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
bbb2458d 259DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
9536ea21 260DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
515124ec 261DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
9536ea21 262DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE
afc204bf
OL
263
264class DossierWorkflow(PosteWorkflow):
265
266 class Meta:
267 abstract = True
515124ec 268
515124ec
OL
269
270MAP_GROUPE_ETATS_A_FAIRE = {
25524bf7
EMS
271 grp_correspondants_rh : (POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
272 POSTE_ETAT_REGION_FINALISATION,
273 DOSSIER_ETAT_REGION_FINALISATION),
9536ea21
EMS
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,
282 ),
d8cfc3d5 283 grp_directeurs_bureau : (POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU, ),
9536ea21
EMS
284 grp_drh : (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_FINALISATION,
285 DOSSIER_ETAT_DRH_CONTROLE, DOSSIER_ETAT_DRH_FINALISATION,
bbb2458d 286 POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_DEMANDE_JUSTIF),
5aaaef6b 287 grp_drh2 : (POSTE_ETAT_DRH_2, DOSSIER_ETAT_DRH_2),
d8cfc3d5 288 grp_accior : (POSTE_ETAT_ACCIOR, DOSSIER_ETAT_ACCIOR, ),
9a62bc55 289 grp_abf : (POSTE_ETAT_ABF, DOSSIER_ETAT_ABF, ),
3799cafc 290 grp_haute_direction : (POSTE_ETAT_HAUTE_DIRECTION, DOSSIER_ETAT_HAUTE_DIRECTION, ),
515124ec 291}
286d0aa9
OL
292
293
bbb2458d 294ETATS_EDITABLE = (POSTE_ETAT_BROUILLON, POSTE_ETAT_ADMINISTRATEUR,
5aaaef6b
EMS
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,
bbb2458d 299 DOSSIER_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_DRH_CONTROLE,
5aaaef6b 300 DOSSIER_ETAT_DRH_2, DOSSIER_ETAT_DIRECTEUR_BUREAU,
bbb2458d 301 DOSSIER_ETAT_SERVICE_UTILISATEURS,
5aaaef6b 302 DOSSIER_ETAT_DEMANDE_MODIF, DOSSIER_ETAT_DEMANDE_JUSTIF,
286d0aa9
OL
303)
304
9536ea21
EMS
305ETATS_VALIDE = (DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
306 DOSSIER_ETAT_FINALISE)