X-Git-Url: https://git.auf.org/?p=auf_rh_dae.git;a=blobdiff_plain;f=project%2Fdae%2Fworkflow.py;h=9cda079d78ed0a5057a297d2dcb392a56298dcf6;hp=2236691c325f3a4752ce6e9523f4a77ac13ae766;hb=56589624fcb4ad56b776d19332ff31dfe9847a07;hpb=ee045a5a782f03f344aef4c6cfc77047afc6a3a4 diff --git a/project/dae/workflow.py b/project/dae/workflow.py index 2236691..9cda079 100644 --- a/project/dae/workflow.py +++ b/project/dae/workflow.py @@ -62,6 +62,17 @@ POSTE_ETATS = { 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 : { @@ -81,31 +92,45 @@ POSTE_ACTIONS = { }, 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 @@ -115,38 +140,51 @@ class PosteWorkflow(WorkflowMixin): 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, ):