[#1823] Première phase pour régionnalisation
[auf_rh_dae.git] / project / rh / lib.py
index d9d5496..e832a89 100644 (file)
@@ -3,9 +3,40 @@
 from django.db import models
 from django.contrib import admin
 from django.conf import settings
 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 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
 
 
 # Inlines
 
@@ -100,7 +131,7 @@ class TypePosteInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
 
 # Admins
 
 
 # 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é.
     """
     """
     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')
     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
 
 
     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', )
     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,)
     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', )
     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()
 
             instance.save()
         formset.save_m2m()
 
+
 class PosteCommentaireAdmin(admin.ModelAdmin):
     pass
 
 class PosteCommentaireAdmin(admin.ModelAdmin):
     pass