Commit | Line | Data |
---|---|---|
8fa94e8b OL |
1 | # -*- encoding: utf-8 -*- |
2 | ||
1b217058 | 3 | from django.contrib.auth.models import Group |
8fa94e8b | 4 | from auf.django.workflow.models import WorkflowMixin |
42dfa870 | 5 | from utils import is_user_dans_services_centraux, is_user_dans_region |
3f5cbabe | 6 | from rh.groups import * |
8fa94e8b OL |
7 | |
8 | # codes états | |
9 | POSTE_ETAT_BROUILLON = 'BROUILLON' | |
1b217058 | 10 | POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR' |
d8cfc3d5 OL |
11 | POSTE_ETAT_DIRECTEUR_BUREAU = 'DIRECTEUR_BUREAU' |
12 | POSTE_ETAT_SERVICE_UTILISATEURS = 'SRV_UTILISATEURS' | |
1b217058 | 13 | POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE' |
5aaaef6b | 14 | POSTE_ETAT_DRH_2 = 'DRH_2' |
bbb2458d | 15 | POSTE_ETAT_DEMANDE_MODIF = 'DEMANDE_MODIF' |
d8cfc3d5 | 16 | POSTE_ETAT_ACCIOR = 'ACCIOR' |
9a62bc55 | 17 | POSTE_ETAT_ABF = 'ABF' |
1b217058 | 18 | POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION' |
bbb2458d | 19 | POSTE_ETAT_DEMANDE_JUSTIF = 'DEMANDE_JUSTIF' |
9536ea21 | 20 | POSTE_ETAT_REGION_FINALISATION = 'REGION_FINALISATION' |
1b217058 | 21 | POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION' |
9536ea21 | 22 | POSTE_ETAT_FINALISE = 'FINALISE' |
1b217058 OL |
23 | |
24 | #codes actions | |
25 | POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON | |
1b217058 | 26 | POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR |
d8cfc3d5 OL |
27 | POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU |
28 | POSTE_ACTION_ENVOYER_SRV_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS | |
1b217058 | 29 | POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE |
5aaaef6b | 30 | POSTE_ACTION_ENVOYER_DRH_2 = POSTE_ETAT_DRH_2 |
bbb2458d EMS |
31 | POSTE_ACTION_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF |
32 | POSTE_ACTION_RETOUR_DEMANDE_MODIF = 'RETOUR_DEMANDE_MODIF' | |
d8cfc3d5 | 33 | POSTE_ACTION_ENVOYER_ACCIOR = POSTE_ETAT_ACCIOR |
9a62bc55 | 34 | POSTE_ACTION_ENVOYER_ABF = POSTE_ETAT_ABF |
1b217058 | 35 | POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION |
bbb2458d EMS |
36 | POSTE_ACTION_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF |
37 | POSTE_ACTION_RETOUR_DEMANDE_JUSTIF = 'RETOUR_DEMANDE_JUSTIF' | |
9536ea21 | 38 | POSTE_ACTION_ENVOYER_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION |
1b217058 | 39 | POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION |
9536ea21 | 40 | POSTE_ACTION_FINALISER = 'FINALISER' |
8fa94e8b OL |
41 | |
42 | #libellés états | |
43 | POSTE_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 |
61 | POSTE_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 |
78 | POSTE_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 |
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 | ||
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 |
249 | DOSSIER_ETAT_BROUILLON = POSTE_ETAT_BROUILLON | |
515124ec | 250 | DOSSIER_ETAT_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR |
d8cfc3d5 OL |
251 | DOSSIER_ETAT_DIRECTEUR_BUREAU = POSTE_ETAT_DIRECTEUR_BUREAU |
252 | DOSSIER_ETAT_SERVICE_UTILISATEURS = POSTE_ETAT_SERVICE_UTILISATEURS | |
515124ec | 253 | DOSSIER_ETAT_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE |
5aaaef6b | 254 | DOSSIER_ETAT_DRH_2 = POSTE_ETAT_DRH_2 |
bbb2458d | 255 | DOSSIER_ETAT_DEMANDE_MODIF = POSTE_ETAT_DEMANDE_MODIF |
d8cfc3d5 | 256 | DOSSIER_ETAT_ACCIOR = POSTE_ETAT_ACCIOR |
9a62bc55 | 257 | DOSSIER_ETAT_ABF = POSTE_ETAT_ABF |
515124ec | 258 | DOSSIER_ETAT_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION |
bbb2458d | 259 | DOSSIER_ETAT_DEMANDE_JUSTIF = POSTE_ETAT_DEMANDE_JUSTIF |
9536ea21 | 260 | DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION |
515124ec | 261 | DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION |
9536ea21 | 262 | DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE |
afc204bf OL |
263 | |
264 | class DossierWorkflow(PosteWorkflow): | |
265 | ||
266 | class Meta: | |
267 | abstract = True | |
515124ec | 268 | |
515124ec OL |
269 | |
270 | MAP_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 | 294 | ETATS_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 |
305 | ETATS_VALIDE = (DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION, |
306 | DOSSIER_ETAT_FINALISE) |