From aff1a4c621002e358c68b575e641a7bec1223d86 Mon Sep 17 00:00:00 2001 From: PA Parent Date: Mon, 21 Nov 2011 11:37:25 -0500 Subject: [PATCH 1/1] =?utf8?q?[#1823]=20Premi=C3=A8re=20phase=20pour=20r=C3=A9?= =?utf8?q?gionnalisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/rh/lib.py | 42 +++++++++++++++++++++++++++++++++++++----- project/rh/models.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/project/rh/lib.py b/project/rh/lib.py index d9d5496..e832a89 100644 --- a/project/rh/lib.py +++ b/project/rh/lib.py @@ -3,9 +3,40 @@ from django.db import models from django.contrib import admin from django.conf import settings +from django.db.models import Q from auf.django.metadata.admin import AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, AUF_METADATA_READONLY_FIELDS from project.rh import models as rh from forms import DossierForm, ContratForm +from dae.utils import get_employe_from_user + + +class ProtectRegionMixin(object): + + def queryset(self, request): + qs = super(ProtectRegionMixin, self).queryset(request) + + if request.user.is_superuser: + return qs + + employe = get_employe_from_user(request.user) + + q = Q(**{self.model.prefix_implantation: employe.implantation.region}) + qs = qs.filter(q).distinct() + return qs + + def has_change_permission(self, request, obj=None): + if request.user.is_superuser: + return True + + if obj: + employe = get_employe_from_user(request.user) + if employe.implantation.region in obj.get_regions(): + return True + else: + return False + + return True + # Inlines @@ -100,7 +131,7 @@ class TypePosteInline(AUFMetadataInlineAdminMixin, admin.TabularInline): # Admins -class AyantDroitAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class AyantDroitAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): """ L'ajout d'un nouvel ayantdroit se fait dans l'admin de l'employé. """ @@ -188,7 +219,7 @@ class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class DossierAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,): +class DossierAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin,): form = DossierForm alphabet_filter = 'employe__nom' search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', 'poste__nom_feminin') @@ -252,7 +283,7 @@ class DossierCommentaireAdmin(admin.ModelAdmin): pass -class EmployeAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class EmployeAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): alphabet_filter = 'nom' search_fields = ('id', 'nom', 'prenom', 'nom_affichage', 'actif', ) list_filter = ('actif', ) @@ -307,7 +338,7 @@ class FamilleEmploiAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class OrganismeBstgAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class OrganismeBstgAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): search_fields = ('nom', ) list_display = ('nom', 'type', 'pays', ) inlines = (DossierROInline,) @@ -318,7 +349,7 @@ class OrganismeBstgAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): ) -class PosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): +class PosteAdmin(AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin): alphabet_filter = 'nom' search_fields = ('nom', 'implantation__code', 'implantation__nom', 'implantation__region__code', 'implantation__region__nom', ) list_display = ('nom', 'implantation', 'service', 'type_poste', 'date_debut', 'date_fin', ) @@ -367,6 +398,7 @@ class PosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin): instance.save() formset.save_m2m() + class PosteCommentaireAdmin(admin.ModelAdmin): pass diff --git a/project/rh/models.py b/project/rh/models.py index ae03df7..f3cfbc8 100644 --- a/project/rh/models.py +++ b/project/rh/models.py @@ -194,6 +194,10 @@ class Poste_(AUFMetadata): # self.dossier_set.all() fonctionne pas return False + prefix_implantation = "implantation__region" + def get_regions(self): + return [self.implantation.region] + class Poste(Poste_): __doc__ = Poste_.__doc__ @@ -404,6 +408,14 @@ class Employe(AUFMetadata): pass return poste + prefix_implantation = "dossiers__poste__implantation__region" + def get_regions(self): + regions = [] + for d in self.dossiers.all(): + regions.append(d.poste.implantation.region) + return regions + + class EmployePiece(models.Model): """Documents relatifs à un employé. Ex.: CV... @@ -476,6 +488,14 @@ class AyantDroit(AUFMetadata): nom_affichage = u'%s %s' % (self.nom.upper(), self.prenom) return nom_affichage + prefix_implantation = "employe__dossiers__poste__implantation__region" + def get_regions(self): + regions = [] + for d in self.employe.dossiers.all(): + regions.append(d.poste.implantation.region) + return regions + + class AyantDroitCommentaire(Commentaire): ayant_droit = models.ForeignKey('AyantDroit', db_column='ayant_droit', related_name='+') @@ -573,6 +593,10 @@ class Dossier_(AUFMetadata): poste = self.poste.nom_feminin return u'%s - %s' % (self.employe, poste) + prefix_implantation = "poste__implantation__region" + def get_regions(self): + return [self.poste.implantation.region] + class Dossier(Dossier_): __doc__ = Dossier_.__doc__ @@ -921,6 +945,11 @@ class OrganismeBstg(AUFMetadata): def __unicode__(self): return u'%s (%s)' % (self.nom, self.get_type_display()) + prefix_implantation = "pays__region" + def get_regions(self): + return [self.pays.region] + + class Statut(AUFMetadata): """Statut de l'Employe dans le cadre d'un Dossier particulier. """ -- 1.7.10.4