From 56589624fcb4ad56b776d19332ff31dfe9847a07 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Olivier=20Larchev=C3=AAque?= Date: Tue, 24 May 2011 12:30:11 -0400 Subject: [PATCH] #1490 --- buildout.cfg | 2 +- project/dae/forms.py | 10 ++--- project/dae/templates/dae/embauche_consulter.html | 10 ++--- project/dae/templates/dae/poste_consulter.html | 12 ++--- project/dae/workflow.py | 50 ++++++++++++++++++--- 5 files changed, 56 insertions(+), 28 deletions(-) diff --git a/buildout.cfg b/buildout.cfg index 22dfa48..f67e761 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -36,7 +36,7 @@ south = 0.7 auf.django.skin = 0.15dev auf.django.auth = 0.5.2dev django-reversion = 1.3.3 -auf.django.workflow = 0.10dev +auf.django.workflow = 0.12dev django-ajax-selects = 1.1.4 #reportlab = 2.5 diff --git a/project/dae/forms.py b/project/dae/forms.py index a4d5bd2..137ef94 100644 --- a/project/dae/forms.py +++ b/project/dae/forms.py @@ -10,7 +10,7 @@ from datamaster_modeles import models as ref 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 @@ -276,23 +276,21 @@ class DossierForm(forms.ModelForm): 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 diff --git a/project/dae/templates/dae/embauche_consulter.html b/project/dae/templates/dae/embauche_consulter.html index ac2dca2..c8ddbda 100644 --- a/project/dae/templates/dae/embauche_consulter.html +++ b/project/dae/templates/dae/embauche_consulter.html @@ -142,17 +142,13 @@

Votre validation (ou commentaire)

-

Ce dossier est présentement à l'état {{ poste.get_etat_display }}.

- +

Ce dossier est actuellement à l'état {{ dossier.get_etat_display }}.

- {{ validationForm }} + {{ validationForm.commentaire }}
- + {{ validationForm.get_input_etats_as_buttons|safe }}
diff --git a/project/dae/templates/dae/poste_consulter.html b/project/dae/templates/dae/poste_consulter.html index e2afdaf..ccfa91b 100644 --- a/project/dae/templates/dae/poste_consulter.html +++ b/project/dae/templates/dae/poste_consulter.html @@ -29,18 +29,14 @@ Demande d'autorisation d'embauche {% endfor %} -

Votre validation (ou commentaire)

-

Ce poste est présentement à l'état {{ poste.get_etat_display }}.

- +

Votre validation

+

Le poste est actuellement à l'état : {{ poste.get_etat_display }}.

-{{ validationForm }} +{{ validationForm.commentaire }}
- +{{ validationForm.get_input_etats_as_buttons|safe }}
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, ): -- 1.7.10.4