Commit | Line | Data |
---|---|---|
8fa94e8b OL |
1 | # -*- encoding: utf-8 -*- |
2 | ||
3 | from auf.django.workflow.models import WorkflowMixin | |
b31ce2d7 | 4 | |
d41d8e47 | 5 | from project.groups import \ |
b31ce2d7 EMS |
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 | |
afd3be54 | 9 | from project.groups import \ |
d41d8e47 | 10 | is_user_dans_services_centraux, is_user_dans_region |
8fa94e8b OL |
11 | |
12 | # codes états | |
13 | POSTE_ETAT_BROUILLON = 'BROUILLON' | |
1b217058 | 14 | POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR' |
d8cfc3d5 OL |
15 | POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU' |
16 | POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS' | |
1b217058 | 17 | POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE' |
5aaaef6b | 18 | POSTE_ETAT_DRH_2 = 'DRH_2' |
bbb2458d | 19 | POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF' |
d8cfc3d5 | 20 | POSTE_ETAT_ACCIOR = 'ACCIOR' |
9a62bc55 | 21 | POSTE_ETAT_ABF = 'ABF' |
1b217058 | 22 | POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION' |
bbb2458d | 23 | POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF' |
9536ea21 | 24 | POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION' |
1b217058 | 25 | POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION' |
9536ea21 | 26 | POSTE_ETAT_FINALISE = 'FINALISE' |
1b217058 OL |
27 | |
28 | #codes actions | |
29 | POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON | |
1b217058 | 30 | POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR |
d8cfc3d5 OL |
31 | POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU |
32 | POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS | |
1b217058 | 33 | POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE |
5aaaef6b | 34 | POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2 |
bbb2458d EMS |
35 | POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF |
36 | POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF' | |
d8cfc3d5 | 37 | POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR |
9a62bc55 | 38 | POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF |
1b217058 | 39 | POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION |
bbb2458d EMS |
40 | POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF |
41 | POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF' | |
9536ea21 | 42 | POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION |
1b217058 | 43 | POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION |
9536ea21 | 44 | POSTE_ACTION_FINALISER = 'FINALISER' |
8fa94e8b OL |
45 | |
46 | #libellés états | |
47 | POSTE_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 |
65 | POSTE_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 |
82 | POSTE_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 |
169 | class 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 |
258 | DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON | |
515124ec | 259 | DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR |
d8cfc3d5 OL |
260 | DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU |
261 | DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS | |
515124ec | 262 | DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE |
5aaaef6b | 263 | DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2 |
bbb2458d | 264 | DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF |
d8cfc3d5 | 265 | DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR |
9a62bc55 | 266 | DOSSIER_ETAT_ABF = POSTE_ETAT_ABF |
515124ec | 267 | DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION |
bbb2458d | 268 | DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF |
9536ea21 | 269 | DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION |
515124ec | 270 | DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION |
9536ea21 | 271 | DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE |
afc204bf | 272 | |
b31ce2d7 | 273 | |
afc204bf OL |
274 | class DossierWorkflow(PosteWorkflow): |
275 | ||
276 | class Meta: | |
277 | abstract = True | |
515124ec | 278 | |
515124ec OL |
279 | |
280 | MAP_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 |
311 | ETATS_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 |
322 | ETATS_VALIDE = ( |
323 | DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION, | |
324 | DOSSIER_ETAT_FINALISE | |
325 | ) |