from dae import models as dae
from utils import get_employe_from_user, is_user_dans_service
from rh_v1 import models as rh
-from workflow import grp_drh
+from workflow import grp_drh, POSTE_ETATS_BOUTONS
def _implantation_choices(obj, request):
# TRAITEMENT NORMAL
contrat_date_fin=admin_widgets.AdminDateWidget(),
)
-WF_HELP_TEXT = """Ce champs affiche par défaut l'étape de traitement de la demande.
-La liste déroulante vous permet de sélectionner l'étape suivante."""
WF_HELP_TEXT = ""
class PosteWorkflowForm(WorkflowFormMixin):
-
+ bouton_libelles = POSTE_ETATS_BOUTONS
class Meta:
fields = ('etat', )
model = dae.Poste
-
+
def __init__(self, *args, **kwargs):
super(self.__class__, self).__init__(*args, **kwargs)
self.fields['etat'].help_text = WF_HELP_TEXT
class DossierWorkflowForm(WorkflowFormMixin):
-
+ bouton_libelles = POSTE_ETATS_BOUTONS # meme workflow que poste...
class Meta:
fields = ('etat', )
model = dae.Dossier
POSTE_ETAT_DRH_FINALISATION : u'Retour à la DRH et région',
}
+#libellés états pour boutons
+POSTE_ETATS_BOUTONS = {
+ POSTE_ETAT_REFUSE : u"Refuser",
+ POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE : u"Envoyer au directeur de bureau, pôle ou service",
+ POSTE_ETAT_ADMINISTRATEUR : u"Envoyer à l'adminstrateur",
+ POSTE_ETAT_DRH_CONTROLE : u"Envoyer à la DRH (validation)",
+ POSTE_ETAT_POLE_FINANCIER : u"Envoyer au pôle finances",
+ POSTE_ETAT_HAUTE_DIRECTION : u"Envoyer à la haute direction",
+ POSTE_ETAT_DRH_FINALISATION : u'Envoyer à la DRH (traitement)',
+ }
+
# définition du worflow séquentiel
POSTE_ACTIONS = {
POSTE_ACTION_ENVOYER_REFUSE : {
},
POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
'nom' : u'Envoyer',
- 'etat_initial' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
+ 'etat_initial' : (POSTE_ETAT_REFUSE, POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE),
'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
},
POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
'nom' : u'Envoyer',
- 'etat_initial' : (POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE, POSTE_ETAT_ADMINISTRATEUR, ),
+ 'etat_initial' : (POSTE_ETAT_REFUSE, POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE, POSTE_ETAT_ADMINISTRATEUR, ),
'etat_final' : POSTE_ETAT_DRH_CONTROLE,
},
POSTE_ACTION_ENVOYER_POLE_FINANCIER : {
'nom' : u'Envoyer',
- 'etat_initial' : POSTE_ETAT_DRH_CONTROLE,
+ 'etat_initial' : (POSTE_ETAT_REFUSE, POSTE_ETAT_DRH_CONTROLE, ),
'etat_final' : POSTE_ETAT_POLE_FINANCIER,
},
POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
'nom' : u'Envoyer',
- 'etat_initial' : POSTE_ETAT_POLE_FINANCIER,
+ 'etat_initial' : (POSTE_ETAT_REFUSE, POSTE_ETAT_POLE_FINANCIER, ),
'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
},
POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
'nom' : u'Envoyer',
- 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION,
+ 'etat_initial' : (POSTE_ETAT_REFUSE, POSTE_ETAT_HAUTE_DIRECTION, ),
'etat_final' : POSTE_ETAT_DRH_FINALISATION,
},
}
+
+def refuse_sauf_pour_drh(f):
+ """
+ Personne ne peut manipuler quelque chose à l'état refusé excepté la DRH
+ """
+ def inner(obj, action, request):
+ if obj.etat != 'REFUSE':
+ return f(obj, action, request)
+ if grp_drh in request.user.groups.all():
+ return f(obj, action, request)
+ else:
+ return False
+ return inner
+
class PosteWorkflow(WorkflowMixin):
etat_initial = POSTE_ETAT_BROUILLON
etats = POSTE_ETATS
abstract = True
def acces_refuse(self, action, request):
- return True
+ if grp_pole_financier in request.user.groups.all():
+ return False
+
+ user_groupes = request.user.groups.all()
+ for g, etats in MAP_GROUPE_ETATS_A_FAIRE.items():
+ if g in user_groupes and self.etat in etats:
+ return True
+ return False
+ @refuse_sauf_pour_drh
def acces_directeur_bur_srv(self, action, request):
for g in request.user.groups.all():
if g in (grp_administrateurs, grp_gestionnaires, grp_service_utilisateurs, grp_correspondants_rh, grp_drh,):
return True
return False
+ @refuse_sauf_pour_drh
def acces_administrateur(self, action, request):
for g in request.user.groups.all():
if g in (grp_directeurs_service, grp_drh,):
return True
return False
+ @refuse_sauf_pour_drh
def acces_drh_controle(self, action, request):
for g in request.user.groups.all():
if g in (grp_directeurs_bureau, grp_administrateurs, grp_drh,):
return True
return False
+ @refuse_sauf_pour_drh
def acces_finance(self, action, request):
for g in request.user.groups.all():
if g in (grp_drh, ):
return True
return False
+ @refuse_sauf_pour_drh
def acces_haute_direction(self, action, request):
for g in request.user.groups.all():
if g in (grp_pole_financier, grp_drh, ):
return True
return False
+ @refuse_sauf_pour_drh
def acces_drh_finalisation(self, action, request):
for g in request.user.groups.all():
if g in (grp_haute_direction, grp_drh, ):