groups = niveau projet
[auf_rh_dae.git] / project / dae / workflow.py
1 # -*- encoding: utf-8 -*-
2
3 from auf.django.workflow.models import WorkflowMixin
4
5 from project.groups import \
6 grp_drh, grp_drh2, grp_administrateurs, grp_service_utilisateurs, \
7 grp_correspondants_rh, grp_directeurs_bureau, grp_accior, grp_abf, \
8 grp_haute_direction
9
10 from project.dae.utils import \
11 is_user_dans_services_centraux, is_user_dans_region
12
13 dae_groupes = (
14 grp_correspondants_rh,
15 grp_administrateurs,
16 grp_directeurs_bureau,
17 grp_drh,
18 grp_drh2,
19 grp_accior,
20 grp_abf,
21 grp_haute_direction,
22 grp_service_utilisateurs,
23 )
24
25 # codes états
26 POSTE_ETAT_BROUILLON = 'BROUILLON'
27 POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
28 POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU'
29 POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS'
30 POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
31 POSTE_ETAT_DRH_2 = 'DRH_2'
32 POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF'
33 POSTE_ETAT_ACCIOR = 'ACCIOR'
34 POSTE_ETAT_ABF = 'ABF'
35 POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
36 POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF'
37 POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION'
38 POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
39 POSTE_ETAT_FINALISE = 'FINALISE'
40
41 #codes actions
42 POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
43 POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
44 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
45 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
46 POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
47 POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2
48 POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
49 POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF'
50 POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR
51 POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF
52 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
53 POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
54 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF'
55 POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
56 POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
57 POSTE_ACTION_FINALISER = 'FINALISER'
58
59 #libellés états
60 POSTE_ETATS = {
61 POSTE_ETAT_BROUILLON: u"En rédaction",
62 POSTE_ETAT_ADMINISTRATEUR: u"Validation de l'administrateur",
63 POSTE_ETAT_DIRECTEUR_BUREAU: u"Directeur de bureau",
64 POSTE_ETAT_SERVICE_UTILISATEURS: u"Service utilisateurs",
65 POSTE_ETAT_DRH_CONTROLE: u"Validation DRH",
66 POSTE_ETAT_DRH_2: u"Validation DRH 2",
67 POSTE_ETAT_DEMANDE_MODIF: u"Demande de modification",
68 POSTE_ETAT_ACCIOR: u"ACCIOR",
69 POSTE_ETAT_ABF: u"ABF",
70 POSTE_ETAT_HAUTE_DIRECTION: u"Validation : Secrétaire général / Recteur",
71 POSTE_ETAT_DEMANDE_JUSTIF: u"Demande de justification",
72 POSTE_ETAT_REGION_FINALISATION: u'Retour à la région',
73 POSTE_ETAT_DRH_FINALISATION: u'Retour à la DRH',
74 POSTE_ETAT_FINALISE: u'Finalisée'
75 }
76
77 #libellés états pour boutons
78 POSTE_ETATS_BOUTONS = {
79 POSTE_ETAT_DIRECTEUR_BUREAU: u"Envoyer au directeur de bureau",
80 POSTE_ETAT_SERVICE_UTILISATEURS: u"Envoyer au service utilisateurs",
81 POSTE_ETAT_ADMINISTRATEUR: u"Envoyer à l'adminstrateur",
82 POSTE_ETAT_DRH_CONTROLE: u"Envoyer à la DRH (validation)",
83 POSTE_ETAT_DRH_2: u"Envoyer à DRH 2",
84 POSTE_ETAT_DEMANDE_MODIF: u"Envoyer une demande de modification",
85 POSTE_ETAT_ACCIOR: u"Envoyer à l'ACCIOR",
86 POSTE_ETAT_ABF: u"Envoyer à l'ABF",
87 POSTE_ETAT_HAUTE_DIRECTION: u"Envoyer à la haute direction",
88 POSTE_ETAT_DEMANDE_JUSTIF: u"Envoyer une demande de justification",
89 POSTE_ETAT_REGION_FINALISATION: u"Retourner à la région pour finalisation",
90 POSTE_ETAT_DRH_FINALISATION: u'Retourner à la DRH pour finalisation',
91 POSTE_ETAT_FINALISE: u'Finaliser'
92 }
93
94 # définition du worflow séquentiel
95 POSTE_ACTIONS = {
96 POSTE_ACTION_ENVOYER_BROUILLON: {
97 'nom': u'Créer',
98 'etat_initial': None,
99 'etat_final': POSTE_ETAT_BROUILLON,
100 },
101 POSTE_ACTION_ENVOYER_ADMINISTRATEUR: {
102 'nom': u'Envoyer',
103 'etat_initial': (POSTE_ETAT_BROUILLON,),
104 'etat_final': POSTE_ETAT_ADMINISTRATEUR,
105 },
106 POSTE_ACTION_ENVOYER_SRV_UTILISATEURS: {
107 'nom': u'Envoyer',
108 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
109 'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS,
110 },
111 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU: {
112 'nom': u'Envoyer',
113 'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
114 'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU,
115 },
116 POSTE_ACTION_ENVOYER_DRH_CONTROLE: {
117 'nom': u'Envoyer',
118 'etat_initial': (
119 POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU,
120 POSTE_ETAT_SERVICE_UTILISATEURS
121 ),
122 'etat_final': POSTE_ETAT_DRH_CONTROLE,
123 },
124 POSTE_ACTION_ENVOYER_DRH_2: {
125 'nom': u'Envoyer',
126 'etat_initial': (POSTE_ETAT_DRH_CONTROLE,),
127 'etat_final': POSTE_ETAT_DRH_2,
128 },
129 POSTE_ACTION_DEMANDE_MODIF: {
130 'nom': u'Envoyer',
131 'etat_initial': (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
132 'etat_final': POSTE_ETAT_DEMANDE_MODIF,
133 },
134 POSTE_ACTION_RETOUR_DEMANDE_MODIF: {
135 'nom': u'Retourner',
136 'etat_initial': (POSTE_ETAT_DEMANDE_MODIF,),
137 'etat_final': POSTE_ETAT_DRH_CONTROLE,
138 },
139 POSTE_ACTION_ENVOYER_ACCIOR: {
140 'nom': u'Envoyer',
141 'etat_initial': (POSTE_ETAT_DRH_2,),
142 'etat_final': POSTE_ETAT_ACCIOR,
143 },
144 POSTE_ACTION_ENVOYER_ABF: {
145 'nom': u'Envoyer',
146 'etat_initial': (POSTE_ETAT_ACCIOR,),
147 'etat_final': POSTE_ETAT_ABF,
148 },
149 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION: {
150 'nom': u'Envoyer',
151 'etat_initial': (POSTE_ETAT_ABF,),
152 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
153 },
154 POSTE_ACTION_DEMANDE_JUSTIF: {
155 'nom': u'Envoyer',
156 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
157 'etat_final': POSTE_ETAT_DEMANDE_JUSTIF,
158 },
159 POSTE_ACTION_RETOUR_DEMANDE_JUSTIF: {
160 'nom': u'Envoyer',
161 'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF,),
162 'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
163 },
164 POSTE_ACTION_ENVOYER_REGION_FINALISATION: {
165 'nom': u'Envoyer',
166 'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
167 'etat_final': POSTE_ETAT_REGION_FINALISATION
168 },
169 POSTE_ACTION_ENVOYER_DRH_FINALISATION: {
170 'nom': u'Envoyer',
171 'etat_initial': (POSTE_ETAT_REGION_FINALISATION,),
172 'etat_final': POSTE_ETAT_DRH_FINALISATION,
173 },
174 POSTE_ACTION_FINALISER: {
175 'nom': u'Finaliser',
176 'etat_initial': (POSTE_ETAT_DRH_FINALISATION,),
177 'etat_final': POSTE_ETAT_FINALISE
178 },
179 }
180
181
182 class PosteWorkflow(WorkflowMixin):
183 etat_initial = POSTE_ETAT_BROUILLON
184 etats = POSTE_ETATS
185 actions = POSTE_ACTIONS
186
187 class Meta:
188 abstract = True
189
190 def acces_directeur_bureau(self, action, request):
191 user_groups = request.user.groups.all()
192 return grp_drh in user_groups or grp_drh2 in user_groups or \
193 (is_user_dans_services_centraux(request.user) and
194 grp_administrateurs in user_groups)
195
196 def acces_administrateur(self, action, request):
197 user_groups = request.user.groups.all()
198 return grp_correspondants_rh in user_groups or grp_drh in user_groups \
199 or grp_drh2 in user_groups
200
201 def acces_drh_controle(self, action, request):
202 user_groups = request.user.groups.all()
203 return grp_directeurs_bureau in user_groups or \
204 grp_service_utilisateurs in user_groups or \
205 grp_drh in user_groups or grp_drh2 in user_groups or \
206 (grp_administrateurs in user_groups and
207 (action == POSTE_ACTION_RETOUR_DEMANDE_MODIF or
208 is_user_dans_region(request.user)))
209
210 def acces_drh_2(self, action, request):
211 user_groups = request.user.groups.all()
212 return grp_drh in user_groups
213
214 def acces_demande_modif(self, action, request):
215 user_groups = request.user.groups.all()
216 return grp_drh in user_groups or grp_drh2 in user_groups
217
218 def acces_srv_utilisateurs(self, action, request):
219 if not is_user_dans_services_centraux(request.user):
220 return False
221 user_groups = request.user.groups.all()
222 return grp_administrateurs in user_groups or grp_drh in user_groups \
223 or grp_drh2 in user_groups
224
225 def acces_accior(self, action, request):
226 user_groups = request.user.groups.all()
227 return grp_drh in user_groups or grp_drh2 in user_groups
228
229 def acces_abf(self, action, request):
230 user_groups = request.user.groups.all()
231 return grp_accior in user_groups or grp_drh in user_groups \
232 or grp_drh2 in user_groups
233
234 def acces_haute_direction(self, action, request):
235 user_groups = request.user.groups.all()
236 return grp_abf in user_groups or grp_drh in user_groups \
237 or grp_drh2 in user_groups
238
239 def acces_region_finalisation(self, action, request):
240 user_groups = request.user.groups.all()
241 return grp_haute_direction in user_groups or grp_drh in user_groups \
242 or grp_drh2 in user_groups
243
244 def acces_drh_finalisation(self, action, request):
245 user_groups = request.user.groups.all()
246 return grp_administrateurs in user_groups or \
247 grp_correspondants_rh in user_groups or \
248 grp_drh in user_groups or \
249 grp_drh2 in user_groups
250
251 def acces_demande_justif(self, action, request):
252 user_groups = request.user.groups.all()
253 return grp_haute_direction in user_groups or grp_drh in user_groups \
254 or grp_drh2 in user_groups
255
256 def acces_retour_demande_modif(self, action, request):
257 user_groups = request.user.groups.all()
258 return grp_administrateurs in user_groups or grp_drh in user_groups \
259 or grp_drh2 in user_groups
260
261 def acces_retour_demande_justif(self, action, request):
262 user_groups = request.user.groups.all()
263 return grp_drh in user_groups or grp_drh2 in user_groups
264
265 def acces_finaliser(self, action, request):
266 user_groups = request.user.groups.all()
267 return grp_drh in user_groups or grp_drh2 in user_groups
268
269
270 #codes actions
271 DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON
272 DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
273 DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU
274 DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS
275 DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
276 DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2
277 DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF
278 DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR
279 DOSSIER_ETAT_ABF = POSTE_ETAT_ABF
280 DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
281 DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF
282 DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
283 DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
284 DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE
285
286
287 class DossierWorkflow(PosteWorkflow):
288
289 class Meta:
290 abstract = True
291
292
293 MAP_GROUPE_ETATS_A_FAIRE = {
294 grp_correspondants_rh: (
295 POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
296 POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION
297 ),
298 grp_service_utilisateurs: (
299 POSTE_ETAT_SERVICE_UTILISATEURS,
300 DOSSIER_ETAT_SERVICE_UTILISATEURS
301 ),
302 grp_administrateurs: (
303 POSTE_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_ADMINISTRATEUR,
304 POSTE_ETAT_DEMANDE_MODIF, DOSSIER_ETAT_DEMANDE_MODIF,
305 POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION,
306 ),
307 grp_directeurs_bureau: (
308 POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU
309 ),
310 grp_drh: (
311 POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_FINALISATION,
312 DOSSIER_ETAT_DRH_CONTROLE, DOSSIER_ETAT_DRH_FINALISATION,
313 POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_DEMANDE_JUSTIF
314 ),
315 grp_drh2: (POSTE_ETAT_DRH_2, DOSSIER_ETAT_DRH_2),
316 grp_accior: (POSTE_ETAT_ACCIOR, DOSSIER_ETAT_ACCIOR),
317 grp_abf: (POSTE_ETAT_ABF, DOSSIER_ETAT_ABF),
318 grp_haute_direction: (
319 POSTE_ETAT_HAUTE_DIRECTION, DOSSIER_ETAT_HAUTE_DIRECTION
320 ),
321 }
322
323
324 ETATS_EDITABLE = (
325 POSTE_ETAT_BROUILLON, POSTE_ETAT_ADMINISTRATEUR,
326 POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2, POSTE_ETAT_DIRECTEUR_BUREAU,
327 POSTE_ETAT_SERVICE_UTILISATEURS, POSTE_ETAT_DEMANDE_MODIF,
328 POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_BROUILLON,
329 DOSSIER_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_DRH_CONTROLE,
330 DOSSIER_ETAT_DRH_2, DOSSIER_ETAT_DIRECTEUR_BUREAU,
331 DOSSIER_ETAT_SERVICE_UTILISATEURS, DOSSIER_ETAT_DEMANDE_MODIF,
332 DOSSIER_ETAT_DEMANDE_JUSTIF,
333 )
334
335 ETATS_VALIDE = (
336 DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
337 DOSSIER_ETAT_FINALISE
338 )