ajouté l'initialisation d'une simulation
[auf_rh_dae.git] / project / dae / workflow.py
CommitLineData
8fa94e8b
OL
1# -*- encoding: utf-8 -*-
2
1b217058 3from django.contrib.auth.models import Group
8fa94e8b
OL
4from auf.django.workflow.models import WorkflowMixin
5
fb1b9150
OL
6def safe_create_groupe(name):
7 """
8 Création d'un groupe prédéfini. Retourne None, quand la création
9 ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
10 n'a pas été crée encore).
11 """
12 try:
13 grp, created = Group.objects.get_or_create(name=name)
14 except:
15 return None
16 return grp
17
1b217058 18# Groupes impliqués dans le Worflow
fb1b9150
OL
19grp_administrateurs = safe_create_groupe(name='Administrateurs')
20grp_gestionnaires = safe_create_groupe(name='Gestionnaires')
21grp_directeurs_bureau = safe_create_groupe(name='Directeurs de bureau')
22grp_drh = safe_create_groupe(name='DRH')
23grp_pole_financier = safe_create_groupe(name='Pôle financier')
24grp_haute_direction = safe_create_groupe(name='Haute direction')
25grp_service_utilisateurs = safe_create_groupe(name='Service utilisateurs')
26grp_directeurs_service = safe_create_groupe(name='Directeurs de service / pôle')
27grp_correspondants_rh = safe_create_groupe(name='Correspondants RH')
1b217058
OL
28
29dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
30 grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
31 grp_directeurs_service, grp_correspondants_rh, )
8fa94e8b
OL
32
33# codes états
34POSTE_ETAT_BROUILLON = 'BROUILLON'
1b217058
OL
35POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE = 'DIRECTEUR_BUR_SRV'
36POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
37POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
38POSTE_ETAT_POLE_FINANCIER = 'FINANCE'
39POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
40POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
41
504a514e
OL
42ETATS_EDITABLE = (POSTE_ETAT_BROUILLON, POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DRH_CONTROLE)
43
1b217058
OL
44#codes actions
45POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
46POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE = POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
47POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
48POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
49POSTE_ACTION_ENVOYER_POLE_FINANCIER = POSTE_ETAT_POLE_FINANCIER
50POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
51POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
8fa94e8b
OL
52
53#libellés états
54POSTE_ETATS = {
504a514e
OL
55 POSTE_ETAT_BROUILLON : u"Proposition",
56 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE : u"Directeur de bureau, pôle ou service",
57 POSTE_ETAT_ADMINISTRATEUR : u"Validation de l'adminstrateur",
58 POSTE_ETAT_DRH_CONTROLE : u"Validation DRH",
59 POSTE_ETAT_POLE_FINANCIER : u"Pôle finances",
60 POSTE_ETAT_HAUTE_DIRECTION : u"Validation : Secrétaire général / Recteur",
61 POSTE_ETAT_DRH_FINALISATION : u'Retour à la DRH et région',
8fa94e8b
OL
62 }
63
64# définition du worflow séquentiel
65POSTE_ACTIONS = {
1b217058 66 POSTE_ACTION_ENVOYER_BROUILLON : {
8fa94e8b
OL
67 'nom' : u'Créer',
68 'etat_initial' : None,
69 'etat_final' : POSTE_ETAT_BROUILLON,
70 },
1b217058
OL
71 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE : {
72 'nom' : u'Envoyer',
8fa94e8b 73 'etat_initial' : POSTE_ETAT_BROUILLON,
1b217058
OL
74 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
75 },
76 POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
77 'nom' : u'Envoyer',
78 'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
79 'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
80 },
81 POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
82 'nom' : u'Envoyer',
83 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE, POSTE_ETAT_ADMINISTRATEUR, ),
84 'etat_final' : POSTE_ETAT_DRH_CONTROLE,
85 },
86 POSTE_ACTION_ENVOYER_POLE_FINANCIER : {
87 'nom' : u'Envoyer',
88 'etat_initial' : POSTE_ETAT_DRH_CONTROLE,
89 'etat_final' : POSTE_ETAT_POLE_FINANCIER,
90 },
91 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
92 'nom' : u'Envoyer',
93 'etat_initial' : POSTE_ETAT_POLE_FINANCIER,
94 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
95 },
96 POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
97 'nom' : u'Envoyer',
98 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION,
99 'etat_final' : POSTE_ETAT_DRH_FINALISATION,
8fa94e8b
OL
100 },
101}
102
103class PosteWorkflow(WorkflowMixin):
104 etat_initial = POSTE_ETAT_BROUILLON
105 etats = POSTE_ETATS
106 actions = POSTE_ACTIONS
107
108 class Meta:
109 abstract = True
110
8fa94e8b 111
1b217058
OL
112 def acces_directeur_bur_srv(self, action, request):
113 for g in request.user.groups.all():
114 if g in (grp_administrateurs, grp_gestionnaires, grp_service_utilisateurs, grp_correspondants_rh, grp_drh,):
115 return True
116 return False
117
118 def acces_administrateur(self, action, request):
119 for g in request.user.groups.all():
120 if g in (grp_directeurs_service, grp_drh,):
121 return True
122 return False
123
124 def acces_drh_controle(self, action, request):
125 for g in request.user.groups.all():
126 if g in (grp_directeurs_bureau, grp_administrateurs, grp_drh,):
127 return True
128 return False
129
130 def acces_finance(self, action, request):
131 for g in request.user.groups.all():
132 if g in (grp_drh, ):
133 return True
134 return False
135
136 def acces_haute_direction(self, action, request):
137 for g in request.user.groups.all():
138 if g in (grp_pole_financier, grp_drh, ):
139 return True
140 return False
141
142 def acces_drh_finalisation(self, action, request):
143 for g in request.user.groups.all():
144 if g in (grp_haute_direction, grp_drh, ):
145 return True
146 return False
147
148
afc204bf
OL
149
150class DossierWorkflow(PosteWorkflow):
151
152 class Meta:
153 abstract = True