dae.Poste heritage
[auf_rh_dae.git] / project / dae / workflow.py
1 # -*- encoding: utf-8 -*-
2
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 *
7
8 # codes états
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'
23
24 #codes actions
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'
41
42 #libellés états
43 POSTE_ETATS = {
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'
58 }
59
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'
75 }
76
77 # définition du worflow séquentiel
78 POSTE_ACTIONS = {
79 POSTE_ACTION_ENVOYER_BROUILLON : {
80 'nom' : u'Créer',
81 'etat_initial' : None,
82 'etat_final' : POSTE_ETAT_BROUILLON,
83 },
84 POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
85 'nom' : u'Envoyer',
86 'etat_initial' : (POSTE_ETAT_BROUILLON,),
87 'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
88 },
89 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS : {
90 'nom' : u'Envoyer',
91 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
92 'etat_final' : POSTE_ETAT_SERVICE_UTILISATEURS,
93 },
94 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU : {
95 'nom' : u'Envoyer',
96 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
97 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU,
98 },
99 POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
100 'nom' : u'Envoyer',
101 'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU, POSTE_ETAT_SERVICE_UTILISATEURS),
102 'etat_final' : POSTE_ETAT_DRH_CONTROLE,
103 },
104 POSTE_ACTION_ENVOYER_DRH_2 : {
105 'nom' : u'Envoyer',
106 'etat_initial' : (POSTE_ETAT_DRH_CONTROLE,),
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),
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 },
119 POSTE_ACTION_ENVOYER_ACCIOR : {
120 'nom' : u'Envoyer',
121 'etat_initial' : (POSTE_ETAT_DRH_2,),
122 'etat_final' : POSTE_ETAT_ACCIOR,
123 },
124 POSTE_ACTION_ENVOYER_ABF : {
125 'nom' : u'Envoyer',
126 'etat_initial' : (POSTE_ETAT_ACCIOR,),
127 'etat_final' : POSTE_ETAT_ABF,
128 },
129 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
130 'nom' : u'Envoyer',
131 'etat_initial' : (POSTE_ETAT_ABF,),
132 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
133 },
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 },
144 POSTE_ACTION_ENVOYER_REGION_FINALISATION : {
145 'nom' : u'Envoyer',
146 'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION,),
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,),
152 'etat_final' : POSTE_ETAT_DRH_FINALISATION,
153 },
154 POSTE_ACTION_FINALISER : {
155 'nom' : u'Finaliser',
156 'etat_initial' : (POSTE_ETAT_DRH_FINALISATION,),
157 'etat_final' : POSTE_ETAT_FINALISE
158 },
159 }
160
161
162 class PosteWorkflow(WorkflowMixin):
163 etat_initial = POSTE_ETAT_BROUILLON
164 etats = POSTE_ETATS
165 actions = POSTE_ACTIONS
166
167 class Meta:
168 abstract = True
169
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)
175
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
180
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)))
189
190 def acces_drh_2(self, action, request):
191 user_groups = request.user.groups.all()
192 return grp_drh in user_groups
193
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
197
198 def acces_srv_utilisateurs(self, action, request):
199 if not is_user_dans_services_centraux(request.user):
200 return False
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
204
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
208
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
212
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
216
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
221
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
228
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
233
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
238
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
242
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
246
247
248 #codes actions
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
263
264 class DossierWorkflow(PosteWorkflow):
265
266 class Meta:
267 abstract = True
268
269
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,
282 ),
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, ),
291 }
292
293
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,
303 )
304
305 ETATS_VALIDE = (DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
306 DOSSIER_ETAT_FINALISE)