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