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'
44 POSTE_ACTION_ENVOYER_REFUSE
= POSTE_ETAT_REFUSE
45 POSTE_ACTION_ENVOYER_BROUILLON
= POSTE_ETAT_BROUILLON
46 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE
= POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
47 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
48 POSTE_ACTION_ENVOYER_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
49 POSTE_ACTION_ENVOYER_POLE_FINANCIER
= POSTE_ETAT_POLE_FINANCIER
50 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
51 POSTE_ACTION_ENVOYER_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
55 POSTE_ETAT_REFUSE
: u
"Refusé",
56 POSTE_ETAT_BROUILLON
: u
"En rédaction",
57 POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
: u
"Directeur de bureau, pôle ou service",
58 POSTE_ETAT_ADMINISTRATEUR
: u
"Validation de l'adminstrateur",
59 POSTE_ETAT_DRH_CONTROLE
: u
"Validation DRH",
60 POSTE_ETAT_POLE_FINANCIER
: u
"Pôle finances",
61 POSTE_ETAT_HAUTE_DIRECTION
: u
"Validation : Secrétaire général / Recteur",
62 POSTE_ETAT_DRH_FINALISATION
: u
'Retour à la DRH et région',
65 # définition du worflow séquentiel
67 POSTE_ACTION_ENVOYER_REFUSE
: {
69 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_POLE_FINANCIER
, POSTE_ETAT_HAUTE_DIRECTION
),
70 'etat_final' : POSTE_ETAT_REFUSE
,
72 POSTE_ACTION_ENVOYER_BROUILLON
: {
74 'etat_initial' : None,
75 'etat_final' : POSTE_ETAT_BROUILLON
,
77 POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE
: {
79 'etat_initial' : POSTE_ETAT_BROUILLON
,
80 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,
82 POSTE_ACTION_ENVOYER_ADMINISTRATEUR
: {
84 'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,
85 'etat_final' : POSTE_ETAT_ADMINISTRATEUR
,
87 POSTE_ACTION_ENVOYER_DRH_CONTROLE
: {
89 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, POSTE_ETAT_ADMINISTRATEUR
, ),
90 'etat_final' : POSTE_ETAT_DRH_CONTROLE
,
92 POSTE_ACTION_ENVOYER_POLE_FINANCIER
: {
94 'etat_initial' : POSTE_ETAT_DRH_CONTROLE
,
95 'etat_final' : POSTE_ETAT_POLE_FINANCIER
,
97 POSTE_ACTION_ENVOYER_HAUTE_DIRECTION
: {
99 'etat_initial' : POSTE_ETAT_POLE_FINANCIER
,
100 'etat_final' : POSTE_ETAT_HAUTE_DIRECTION
,
102 POSTE_ACTION_ENVOYER_DRH_FINALISATION
: {
104 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION
,
105 'etat_final' : POSTE_ETAT_DRH_FINALISATION
,
109 class PosteWorkflow(WorkflowMixin
):
110 etat_initial
= POSTE_ETAT_BROUILLON
112 actions
= POSTE_ACTIONS
117 def acces_refuse(self
, action
, request
):
120 def acces_directeur_bur_srv(self
, action
, request
):
121 for g
in request
.user
.groups
.all():
122 if g
in (grp_administrateurs
, grp_gestionnaires
, grp_service_utilisateurs
, grp_correspondants_rh
, grp_drh
,):
126 def acces_administrateur(self
, action
, request
):
127 for g
in request
.user
.groups
.all():
128 if g
in (grp_directeurs_service
, grp_drh
,):
132 def acces_drh_controle(self
, action
, request
):
133 for g
in request
.user
.groups
.all():
134 if g
in (grp_directeurs_bureau
, grp_administrateurs
, grp_drh
,):
138 def acces_finance(self
, action
, request
):
139 for g
in request
.user
.groups
.all():
144 def acces_haute_direction(self
, action
, request
):
145 for g
in request
.user
.groups
.all():
146 if g
in (grp_pole_financier
, grp_drh
, ):
150 def acces_drh_finalisation(self
, action
, request
):
151 for g
in request
.user
.groups
.all():
152 if g
in (grp_haute_direction
, grp_drh
, ):
158 DOSSIER_ETAT_BROUILLON
= POSTE_ETAT_BROUILLON
159 DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
= POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
160 DOSSIER_ETAT_ADMINISTRATEUR
= POSTE_ETAT_ADMINISTRATEUR
161 DOSSIER_ETAT_DRH_CONTROLE
= POSTE_ETAT_DRH_CONTROLE
162 DOSSIER_ETAT_POLE_FINANCIER
= POSTE_ETAT_POLE_FINANCIER
163 DOSSIER_ETAT_HAUTE_DIRECTION
= POSTE_ETAT_HAUTE_DIRECTION
164 DOSSIER_ETAT_DRH_FINALISATION
= POSTE_ETAT_DRH_FINALISATION
166 class DossierWorkflow(PosteWorkflow
):
171 def save(self
, force_insert
=False, force_update
=False, using
=None):
173 Lorsqu'un dossier est retenu, on flag le poste pourvu
175 super(PosteWorkflow
, self
).save(force_insert
, force_update
, using
)
176 if self
.etat
== DOSSIER_ETAT_DRH_FINALISATION
:
177 self
.poste
.pourvu
= True
181 MAP_GROUPE_ETATS_A_FAIRE
= {
182 grp_gestionnaires
: (),
183 grp_service_utilisateurs
: (),
184 grp_correspondants_rh
: (),
185 grp_administrateurs
: (POSTE_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_ADMINISTRATEUR
,),
186 grp_directeurs_bureau
: (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,),
187 grp_drh
: (POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DRH_FINALISATION
, DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DRH_FINALISATION
,),
188 grp_pole_financier
: (POSTE_ETAT_POLE_FINANCIER
, DOSSIER_ETAT_POLE_FINANCIER
, ),
189 grp_haute_direction
: (POSTE_ETAT_HAUTE_DIRECTION
, DOSSIER_ETAT_HAUTE_DIRECTION
, ),
190 grp_directeurs_service
: (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
, DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,),
194 ETATS_EDITABLE
= (POSTE_ETAT_BROUILLON
, POSTE_ETAT_ADMINISTRATEUR
, POSTE_ETAT_DRH_CONTROLE
, POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,
195 DOSSIER_ETAT_BROUILLON
, DOSSIER_ETAT_ADMINISTRATEUR
, DOSSIER_ETAT_DRH_CONTROLE
, DOSSIER_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
,