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