from django.core.files.storage import FileSystemStorage
from django.db import models
from django.db.models import Q
-from django.contrib.auth.models import Group
import reversion
from workflow import PosteWorkflow, DossierWorkflow
+from workflow import dae_groupes, \
+ grp_administrateurs, \
+ grp_gestionnaires, \
+ grp_directeurs_bureau, \
+ grp_drh, \
+ grp_pole_financier, \
+ grp_haute_direction, \
+ grp_service_utilisateurs, \
+ grp_directeurs_service, \
+ grp_correspondants_rh
+
import datamaster_modeles.models as ref
from rh_v1 import models as rh
from utils import is_user_dans_service, get_employe_from_user
-# Groupes impliqués dans le Worflow
-grp_administrateurs, created = Group.objects.get_or_create(name='Administrateurs')
-grp_gestionnaires, created = Group.objects.get_or_create(name='Gestionnaires')
-grp_directeurs_bureau, created = Group.objects.get_or_create(name='Directeurs de bureau')
-grp_drh, created = Group.objects.get_or_create(name='DRH')
-grp_pole_financier, created = Group.objects.get_or_create(name='Pôle financier')
-grp_haute_direction, created = Group.objects.get_or_create(name='Haute direction')
-grp_service_utilisateurs, created = Group.objects.get_or_create(name='Service utilisateurs')
-grp_directeurs_service, created = Group.objects.get_or_create(name='Directeurs de service / pôle')
-grp_correspondants_rh, created = Group.objects.get_or_create(name='Correspondants RH')
-
-dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
- grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
- grp_directeurs_service, grp_correspondants_rh, )
-
STATUT_RESIDENCE_CHOICES = (
('local', 'Local'),
('expat', 'Expatrié'),
def ma_region_ou_service(self, user):
"""
Filtrage des postes en fonction du user connecté (region / service)
+ On s'intéresse aussi au groupe auquel appartient le user car certains groupes
+ peuvent tout voir.
"""
- # SERVICE
+
employe = get_employe_from_user(user)
+
+ ############################################
+ # TRAITEMENT NORMAL
+ ############################################
+
+ # SERVICE
if is_user_dans_service(user):
q = Q(implantation=employe.implantation)
# REGION
else:
q = Q(implantation__region=employe.implantation.region)
- return self.get_query_set().filter(q)
+ liste = self.get_query_set().filter(q)
+
+ ############################################
+ # TRAITEMENT POLE FINANCIER
+ ############################################
+ if grp_pole_financier in user.groups.all():
+ liste = self.get_query_set().filter(etat=POSTE_ETAT_FINANCE)
+
+ ############################################
+ # TRAITEMENT HAUTE DIRECTION
+ ############################################
+ if grp_pole_financier in user.groups.all():
+ liste = self.get_query_set().filter(etat=POSTE_ETAT_HAUTE_DIRECTION)
+
+ ############################################
+ # TRAITEMENT DRH
+ ############################################
+ if grp_drh in user.groups.all():
+ liste = self.get_query_set()
+
+ return liste
class Poste(PosteWorkflow, models.Model):
# Modèle existant
# -*- encoding: utf-8 -*-
+from django.contrib.auth.models import Group
from auf.django.workflow.models import WorkflowMixin
-#codes actions
-POSTE_ACTION_CREER = 'CREER'
-POSTE_ACTION_TERMINER = 'TERMINER'
+# Groupes impliqués dans le Worflow
+grp_administrateurs, created = Group.objects.get_or_create(name='Administrateurs')
+grp_gestionnaires, created = Group.objects.get_or_create(name='Gestionnaires')
+grp_directeurs_bureau, created = Group.objects.get_or_create(name='Directeurs de bureau')
+grp_drh, created = Group.objects.get_or_create(name='DRH')
+grp_pole_financier, created = Group.objects.get_or_create(name='Pôle financier')
+grp_haute_direction, created = Group.objects.get_or_create(name='Haute direction')
+grp_service_utilisateurs, created = Group.objects.get_or_create(name='Service utilisateurs')
+grp_directeurs_service, created = Group.objects.get_or_create(name='Directeurs de service / pôle')
+grp_correspondants_rh, created = Group.objects.get_or_create(name='Correspondants RH')
+
+dae_groupes = (grp_administrateurs, grp_gestionnaires, grp_directeurs_bureau, grp_drh,
+ grp_pole_financier, grp_haute_direction, grp_service_utilisateurs,
+ grp_directeurs_service, grp_correspondants_rh, )
# codes états
POSTE_ETAT_BROUILLON = 'BROUILLON'
-POSTE_ETAT_TERMINE = 'TERMINE'
+POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE = 'DIRECTEUR_BUR_SRV'
+POSTE_ETAT_ADMINISTRATEUR = 'ADMINISTRATEUR'
+POSTE_ETAT_DRH_CONTROLE = 'DRH_CONTROLE'
+POSTE_ETAT_POLE_FINANCIER = 'FINANCE'
+POSTE_ETAT_HAUTE_DIRECTION = 'HAUTE_DIRECTION'
+POSTE_ETAT_DRH_FINALISATION = 'DRH_FINALISATION'
+
+#codes actions
+POSTE_ACTION_ENVOYER_BROUILLON = POSTE_ETAT_BROUILLON
+POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE = POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE
+POSTE_ACTION_ENVOYER_ADMINISTRATEUR = POSTE_ETAT_ADMINISTRATEUR
+POSTE_ACTION_ENVOYER_DRH_CONTROLE = POSTE_ETAT_DRH_CONTROLE
+POSTE_ACTION_ENVOYER_POLE_FINANCIER = POSTE_ETAT_POLE_FINANCIER
+POSTE_ACTION_ENVOYER_HAUTE_DIRECTION = POSTE_ETAT_HAUTE_DIRECTION
+POSTE_ACTION_ENVOYER_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
#libellés états
POSTE_ETATS = {
POSTE_ETAT_BROUILLON : u'Brouillon',
- POSTE_ETAT_TERMINE : u'Terminé',
+ POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE : u'Directeur de bureau, pôle ou service',
+ POSTE_ETAT_ADMINISTRATEUR : u'Adminstrateur',
+ POSTE_ETAT_DRH_CONTROLE : u'Contrôle DRH',
+ POSTE_ETAT_POLE_FINANCIER : u'Pôle financier',
+ POSTE_ETAT_HAUTE_DIRECTION : u'Haute direction',
+ POSTE_ETAT_DRH_FINALISATION : u'Finalisation DRH',
}
# définition du worflow séquentiel
POSTE_ACTIONS = {
- POSTE_ACTION_CREER : {
+ POSTE_ACTION_ENVOYER_BROUILLON : {
'nom' : u'Créer',
'etat_initial' : None,
'etat_final' : POSTE_ETAT_BROUILLON,
},
- POSTE_ACTION_TERMINER : {
- 'nom' : u'Créer',
+ POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU_OU_SERVICE : {
+ 'nom' : u'Envoyer',
'etat_initial' : POSTE_ETAT_BROUILLON,
- 'etat_final' : POSTE_ETAT_TERMINE,
+ 'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU_OU_SERVICE,
+ },
+ POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
+ 'nom' : u'Envoyer',
+ 'etat_initial' : 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_final' : POSTE_ETAT_DRH_CONTROLE,
+ },
+ POSTE_ACTION_ENVOYER_POLE_FINANCIER : {
+ 'nom' : u'Envoyer',
+ 'etat_initial' : 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_final' : POSTE_ETAT_HAUTE_DIRECTION,
+ },
+ POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
+ 'nom' : u'Envoyer',
+ 'etat_initial' : POSTE_ETAT_HAUTE_DIRECTION,
+ 'etat_final' : POSTE_ETAT_DRH_FINALISATION,
},
}
class Meta:
abstract = True
- def acces_creer(self, action, request):
- return True
- def acces_terminer(self, action, request):
- return True
+ 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
+
+ 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
+
+ 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
+
+ def acces_finance(self, action, request):
+ for g in request.user.groups.all():
+ if g in (grp_drh, ):
+ return True
+ return False
+
+ 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
+
+ def acces_drh_finalisation(self, action, request):
+ for g in request.user.groups.all():
+ if g in (grp_haute_direction, grp_drh, ):
+ return True
+ return False
+
+
class DossierWorkflow(PosteWorkflow):