b5759141e3bb8c99e5763c916c4475d29bad370b
[auf_rh_dae.git] / project / dae / workflow.py
1 # -*- encoding: utf-8 -*-
2
3 from django.contrib.auth.models import Group
4 from auf.django.workflow.models import WorkflowMixin
5
6 # Groupes impliqués dans le Worflow
7 grp_administrateurs, created = Group.objects.get_or_create(name='Administrateurs')
8 grp_gestionnaires, created = Group.objects.get_or_create(name='Gestionnaires')
9 grp_directeurs_bureau, created = Group.objects.get_or_create(name='Directeurs de bureau')
10 grp_drh, created = Group.objects.get_or_create(name='DRH')
11 grp_pole_financier, created = Group.objects.get_or_create(name='Pôle financier')
12 grp_haute_direction, created = Group.objects.get_or_create(name='Haute direction')
13 grp_service_utilisateurs, created = Group.objects.get_or_create(name='Service utilisateurs')
14 grp_directeurs_service, created = Group.objects.get_or_create(name='Directeurs de service / pôle')
15 grp_correspondants_rh, created = Group.objects.get_or_create(name='Correspondants RH')
16
17 dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
18 grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
19 grp_directeurs_service, grp_correspondants_rh, )
20
21 # codes états
22 POSTE_ETAT_BROUILLON = 'BROUILLON'
23 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE = 'DIRECTEUR_BUR_SRV'
24 POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
25 POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
26 POSTE_ETAT_POLE_FINANCIER = 'FINANCE'
27 POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
28 POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
29
30 #codes actions
31 POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
32 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE = POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
33 POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
34 POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
35 POSTE_ACTION_ENVOYER_POLE_FINANCIER = POSTE_ETAT_POLE_FINANCIER
36 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
37 POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
38
39 #libellés états
40 POSTE_ETATS = {
41 POSTE_ETAT_BROUILLON : u'Brouillon',
42 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE : u'Directeur de bureau, pôle ou service',
43 POSTE_ETAT_ADMINISTRATEUR : u'Adminstrateur',
44 POSTE_ETAT_DRH_CONTROLE : u'Contrôle DRH',
45 POSTE_ETAT_POLE_FINANCIER : u'Pôle financier',
46 POSTE_ETAT_HAUTE_DIRECTION : u'Haute direction',
47 POSTE_ETAT_DRH_FINALISATION : u'Finalisation DRH',
48 }
49
50 # définition du worflow séquentiel
51 POSTE_ACTIONS = {
52 POSTE_ACTION_ENVOYER_BROUILLON : {
53 'nom' : u'Créer',
54 'etat_initial' : None,
55 'etat_final' : POSTE_ETAT_BROUILLON,
56 },
57 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE : {
58 'nom' : u'Envoyer',
59 'etat_initial' : POSTE_ETAT_BROUILLON,
60 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
61 },
62 POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
63 'nom' : u'Envoyer',
64 'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
65 'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
66 },
67 POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
68 'nom' : u'Envoyer',
69 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE, POSTE_ETAT_ADMINISTRATEUR, ),
70 'etat_final' : POSTE_ETAT_DRH_CONTROLE,
71 },
72 POSTE_ACTION_ENVOYER_POLE_FINANCIER : {
73 'nom' : u'Envoyer',
74 'etat_initial' : POSTE_ETAT_DRH_CONTROLE,
75 'etat_final' : POSTE_ETAT_POLE_FINANCIER,
76 },
77 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
78 'nom' : u'Envoyer',
79 'etat_initial' : POSTE_ETAT_POLE_FINANCIER,
80 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
81 },
82 POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
83 'nom' : u'Envoyer',
84 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION,
85 'etat_final' : POSTE_ETAT_DRH_FINALISATION,
86 },
87 }
88
89 class PosteWorkflow(WorkflowMixin):
90 etat_initial = POSTE_ETAT_BROUILLON
91 etats = POSTE_ETATS
92 actions = POSTE_ACTIONS
93
94 class Meta:
95 abstract = True
96
97
98 def acces_directeur_bur_srv(self, action, request):
99 for g in request.user.groups.all():
100 if g in (grp_administrateurs, grp_gestionnaires, grp_service_utilisateurs, grp_correspondants_rh, grp_drh,):
101 return True
102 return False
103
104 def acces_administrateur(self, action, request):
105 for g in request.user.groups.all():
106 if g in (grp_directeurs_service, grp_drh,):
107 return True
108 return False
109
110 def acces_drh_controle(self, action, request):
111 for g in request.user.groups.all():
112 if g in (grp_directeurs_bureau, grp_administrateurs, grp_drh,):
113 return True
114 return False
115
116 def acces_finance(self, action, request):
117 for g in request.user.groups.all():
118 if g in (grp_drh, ):
119 return True
120 return False
121
122 def acces_haute_direction(self, action, request):
123 for g in request.user.groups.all():
124 if g in (grp_pole_financier, grp_drh, ):
125 return True
126 return False
127
128 def acces_drh_finalisation(self, action, request):
129 for g in request.user.groups.all():
130 if g in (grp_haute_direction, grp_drh, ):
131 return True
132 return False
133
134
135
136 class DossierWorkflow(PosteWorkflow):
137
138 class Meta:
139 abstract = True