from auf.django.references import models as ref
+from project import groups
+from project.decorators import drh_or_admin_required, in_one_of_group
from project.decorators import redirect_interdiction
-from project.decorators import drh_or_admin_required
from project.decorators import region_protected
from project.groups import get_employe_from_user
-from project.groups import grp_drh, grp_correspondants_rh
from project.rh import models as rh
from project.rh import graph as rh_graph
@login_required
+@drh_or_admin_required
def profil(request):
"""Profil personnel de l'employé - éditable"""
employe = get_employe_from_user(user)
@login_required
+@drh_or_admin_required
def employes_liste(request):
"""Liste des employés."""
today = date.today()
@login_required
+@drh_or_admin_required
def employe(request, id):
"""Information publique sur un employé."""
try:
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def rapports_contrat(request):
if 'HTTP_REFERER' in request.META.keys():
referer = request.META['HTTP_REFERER']
lookup_params = cl.purge_params(lookup_params)
q_temporel = cl.get_q_temporel(contrats)
q = Q(**lookup_params) & q_temporel
+ user_groups = request.user.groups.all()
+ if groups.grp_correspondants_rh in user_groups or\
+ groups.grp_administrateurs in user_groups or\
+ groups.grp_directeurs_bureau in user_groups:
+ employe = get_employe_from_user(request.user)
+ q = q & Q(dossier__poste__implantation__region=employe.implantation.region)
+
contrats = contrats.filter(q).exclude(dossier__employe__supprime=1)
if 'o' in request.GET:
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def rapports_masse_salariale(request):
class RechercheTemporelle(forms.Form):
- CHOICE_ANNEES = range(
- rh.Remuneration.objects.exclude(date_debut=None)
- .order_by('date_debut')[0].date_debut.year,
- date.today().year + 1
- )
+ remunerations = rh.Remuneration.objects.exclude(date_debut=None)
+ if len(remunerations) > 0:
+ annee_debut = remunerations.order_by('date_debut')[0].date_debut.year
+ else:
+ annee_debut = 1982
+ CHOICE_ANNEES = range(annee_debut, date.today().year + 1)
annee = forms.CharField(
initial=date.today().year,
)
)
+ user_groups = request.user.groups.all()
+ if groups.grp_correspondants_rh in user_groups or\
+ groups.grp_administrateurs in user_groups or\
+ groups.grp_directeurs_bureau in user_groups:
+ employe = get_employe_from_user(request.user)
+ regions = ref.Region.objects.filter(id=employe.implantation.region.id)
+ implantations = ref.Implantation.objects.filter(region=employe.implantation.region)
+ else:
+ regions = ref.Region.objects.all()
+ implantations = ref.Implantation.objects.all()
+
region = forms.CharField(
widget=forms.Select(choices=[('', '')] +
- [(i.id, i) for i in ref.Region.objects.all()]
+ [(i.id, i) for i in regions]
)
)
implantation = forms.CharField(
widget=forms.Select(choices=[('', '')] +
- [(i.id, i) for i in ref.Implantation.objects.all()]
+ [(i.id, i) for i in implantations]
)
)
if region:
custom_filter['dossier__poste__implantation__region'] = region
+ # on force la région dans tous les cas pour les membres de ce groupe
+ user_groups = request.user.groups.all()
+ if groups.grp_correspondants_rh in user_groups or\
+ groups.grp_administrateurs in user_groups or\
+ groups.grp_directeurs_bureau in user_groups:
+ employe = get_employe_from_user(request.user)
+ custom_filter['dossier__poste__implantation__region'] = employe.implantation.region.id
+
+
c = {
'title': 'Rapport de masse salariale',
'form': form,
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def rapports_employes_sans_contrat(request):
lookup_params = get_lookup_params(request)
+ # régionalisation
+ user_groups = request.user.groups.all()
+ q_region = Q()
+ if groups.grp_correspondants_rh in user_groups or\
+ groups.grp_administrateurs in user_groups or\
+ groups.grp_directeurs_bureau in user_groups:
+ employe = get_employe_from_user(request.user)
+ q_region = Q(poste__implantation__region=employe.implantation.region)
+
# contrats échus
contrats_echus = rh.Contrat.objects.filter(
date_fin__lt=date.today()
)
# dossiers en cours sans contrat
- dossiers_sans_contrat = rh.Dossier.objects.filter(
- Q(date_fin=None) | Q(date_fin__gt=date.today()),
+ dossiers_sans_contrat = rh.Dossier.objects.filter(q_region & (
+ Q(date_fin=None) | Q(date_fin__gt=date.today())),
).exclude(
date_debut__gt=date.today()
).filter(
}
return render(request, 'admin/rh/poste/apercu.html', c)
-
+@region_protected(rh.Employe)
def employe_apercu(request, employe_id):
employe = get_object_or_404(rh.Employe, pk=employe_id)
user_groups = request.user.groups.all()
dossiers = None
- if request.user.is_superuser or \
- grp_drh in user_groups:
+ if in_drh_or_admin(request.user):
q = Q(employe=employe)
- if grp_correspondants_rh in user_groups:
- regions = [
- d.poste.implantation.region for d in employe.rh_dossiers.all()
- ]
- q = Q(employe=employe) & Q(implantation__region__in=regions)
+ if groups.grp_correspondants_rh in user_groups or\
+ groups.grp_administrateurs in user_groups or\
+ groups.grp_directeurs_bureau in user_groups:
+ employe_connecte = get_employe_from_user(request.user)
+ q = Q(employe=employe) & Q(poste__implantation__region=employe_connecte.implantation.region)
+
dossiers = rh.Dossier.objects.filter(q).order_by('-date_debut')
c = {
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def organigrammes_employe(request, id, level="all"):
poste = get_object_or_404(rh.Poste, pk=id)
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def organigrammes_service(request, id):
service = get_object_or_404(rh.Service, pk=id)
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def organigrammes_implantation(request, id):
implantation = get_object_or_404(ref.Implantation, pk=id)
@login_required
-@drh_or_admin_required
+@in_one_of_group((groups.grp_correspondants_rh,
+ groups.grp_administrateurs,
+ groups.grp_directeurs_bureau,
+ groups.grp_drh,
+ groups.grp_drh2))
def organigrammes_region(request, id):
region = get_object_or_404(ref.Region, pk=id)