1 # -*- encoding: utf-8 -*-
3 from django
.contrib
.auth
.models
import Group
4 from auf
.django
.workflow
.models
import WorkflowMixin
6 def safe_create_groupe(name
):
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).
13 grp
, created
= Group
.objects
.get_or_create(name
=name
)
18 # Groupes impliqués dans le Worflow
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')
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
, )
34 POSTE_ETAT_REFUSE
= 'REFUSE'
35 POSTE_ETAT_BROUILLON
= 'BROUILLON'
36 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
= 'DIRECTEUR_BUR_SRV'
37 POSTE_ETAT_ADMINISTRATEUR
= 'ADMINISTRATEUR'
38 POSTE_ETAT_DRH_CONTROLE
= 'DRH_CONTROLE'
39 POSTE_ETAT_POLE_FINANCIER
= 'FINANCE'
40 POSTE_ETAT_HAUTE_DIRECTION
= 'HAUTE_DIRECTION'
41 POSTE_ETAT_DRH_FINALISATION
= 'DRH_FINALISATION'
43 ETATS_EDITABLE
= (POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DRH_CONTROLE
)
46 POSTE_ACTION_ENVOYER_REFUSE
= POSTE_ETAT_REFUSE
47 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
48 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE
= POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
49 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
50 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
51 POSTE_ACTION_ENVOYER_POLE_FINANCIER
= POSTE_ETAT_POLE_FINANCIER
52 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
53 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
57 POSTE_ETAT_REFUSE
: u
"Refusé",
58 POSTE_ETAT_BROUILLON
: u
"En rédaction",
59 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
: u
"Directeur de bureau, pôle ou service",
60 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'adminstrateur",
61 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
62 POSTE_ETAT_POLE_FINANCIER
: u
"Pôle finances",
63 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
64 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH et région',
67 # définition du worflow séquentiel
69 POSTE_ACTION_ENVOYER_REFUSE
: {
71 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_POLE_FINANCIER
, POSTE_ETAT_HAUTE_DIRECTION
),
72 'etat_final' : POSTE_ETAT_REFUSE
,
74 POSTE_ACTION_ENVOYER_BROUILLON
: {
76 'etat_initial' : None,
77 'etat_final' : POSTE_ETAT_BROUILLON
,
79 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE
: {
81 'etat_initial' : POSTE_ETAT_BROUILLON
,
82 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,
84 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
: {
86 'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,
87 'etat_final' : POSTE_ETAT_ADMINISTRATEUR
,
89 POSTE_ACTION_ENVOYER_DRH_CONTROLE
: {
91 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, POSTE_ETAT_ADMINISTRATEUR
, ),
92 'etat_final' : POSTE_ETAT_DRH_CONTROLE
,
94 POSTE_ACTION_ENVOYER_POLE_FINANCIER
: {
96 'etat_initial' : POSTE_ETAT_DRH_CONTROLE
,
97 'etat_final' : POSTE_ETAT_POLE_FINANCIER
,
99 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
: {
101 'etat_initial' : POSTE_ETAT_POLE_FINANCIER
,
102 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION
,
104 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
106 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION
,
107 'etat_final' : POSTE_ETAT_DRH_FINALISATION
,
111 class PosteWorkflow(WorkflowMixin
):
112 etat_initial
= POSTE_ETAT_BROUILLON
114 actions
= POSTE_ACTIONS
119 def acces_refuse(self
, action
, request
):
122 def acces_directeur_bur_srv(self
, action
, request
):
123 for g
in request
.user
.groups
.all():
124 if g
in (grp_administrateurs
, grp_gestionnaires
, grp_service_utilisateurs
, grp_correspondants_rh
, grp_drh
,):
128 def acces_administrateur(self
, action
, request
):
129 for g
in request
.user
.groups
.all():
130 if g
in (grp_directeurs_service
, grp_drh
,):
134 def acces_drh_controle(self
, action
, request
):
135 for g
in request
.user
.groups
.all():
136 if g
in (grp_directeurs_bureau
, grp_administrateurs
, grp_drh
,):
140 def acces_finance(self
, action
, request
):
141 for g
in request
.user
.groups
.all():
146 def acces_haute_direction(self
, action
, request
):
147 for g
in request
.user
.groups
.all():
148 if g
in (grp_pole_financier
, grp_drh
, ):
152 def acces_drh_finalisation(self
, action
, request
):
153 for g
in request
.user
.groups
.all():
154 if g
in (grp_haute_direction
, grp_drh
, ):
160 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
161 DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
= POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
162 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
163 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
164 DOSSIER_ETAT_POLE_FINANCIER
= POSTE_ETAT_POLE_FINANCIER
165 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
166 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
168 class DossierWorkflow(PosteWorkflow
):
173 def save(self
, force_insert
=False, force_update
=False, using
=None):
175 Lorsqu'un dossier est retenu, on flag le poste pourvu
177 super(PosteWorkflow
, self
).save(force_insert
, force_update
, using
)
178 if self
.etat
== DOSSIER_ETAT_DRH_FINALISATION
:
179 self
.poste
.pourvu
= True
183 MAP_GROUPE_ETATS_A_FAIRE
= {
184 grp_gestionnaires
: (),
185 grp_service_utilisateurs
: (),
186 grp_correspondants_rh
: (),
187 grp_administrateurs
: (POSTE_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_ADMINISTRATEUR
,),
188 grp_directeurs_bureau
: (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,),
189 grp_drh
: (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
, DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,),
190 grp_pole_financier
: (POSTE_ETAT_POLE_FINANCIER
, DOSSIER_ETAT_POLE_FINANCIER
, ),
191 grp_haute_direction
: (POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
, ),
192 grp_directeurs_service
: (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,),