conflit réglé merge master et regionalisation
[auf_rh_dae.git] / project / rh / admin.py
index c2eec9e..4d63671 100644 (file)
@@ -15,8 +15,8 @@ from auf.django.metadata.admin import \
         AUF_METADATA_READONLY_FIELDS
 import auf.django.references.models as ref
 
+from project import groups
 from project.decorators import in_drh_or_admin
-from project.groups import grp_correspondants_rh
 from project.groups import get_employe_from_user
 
 import project.rh.models as rh
@@ -28,7 +28,14 @@ from project.rh.change_list import ChangeList
 class BaseAdmin(admin.ModelAdmin):
 
     class Media:
-        css = {'screen': ('css/admin_custom.css',)}
+        css = {'screen': (
+            'css/admin_custom.css',
+            'jquery-autocomplete/jquery.autocomplete.css',
+        )}
+        js = (
+            'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
+            'jquery-autocomplete/jquery.autocomplete.min.js',
+        )
 
 
 class ArchiveMixin(object):
@@ -52,6 +59,7 @@ class ArchiveMixin(object):
 class RegionProxy(ref.Region):
     """ Proxy utilisé pour les organigrammes par région """
     class Meta:
+        managed = False
         proxy = True
         verbose_name = u"Organigramme par région"
         verbose_name_plural = u"Organigramme par région"
@@ -60,6 +68,7 @@ class RegionProxy(ref.Region):
 class ImplantationProxy(ref.Implantation):
     """ Proxy utilisé pour les organigrammes par implantation """
     class Meta:
+        managed = False
         proxy = True
         verbose_name = u"Organigramme par implantations"
         verbose_name_plural = u"Organigramme par implantations"
@@ -69,6 +78,7 @@ class ServiceProxy(rh.Service):
     """ Proxy utilisé pour les organigrammes opar service """
 
     class Meta:
+        managed = False
         proxy = True
         verbose_name = u"Organigramme par services"
         verbose_name_plural = u"Organigramme par services"
@@ -77,6 +87,7 @@ class ServiceProxy(rh.Service):
 class EmployeProxy(rh.Employe):
     """ Proxy utilisé pour les organigrammes des employés """
     class Meta:
+        managed = False
         proxy = True
         verbose_name = u"Organigramme des employés"
         verbose_name_plural = u"Organigramme des employés"
@@ -120,7 +131,9 @@ class ProtectRegionMixin(object):
         if in_drh_or_admin(request.user):
             return qs
 
-        if grp_correspondants_rh in user_groups:
+        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(**{self.model.prefix_implantation: \
                     employe.implantation.region})
@@ -137,10 +150,6 @@ class ProtectRegionMixin(object):
     def has_change_permission(self, request, obj=None):
         user_groups = request.user.groups.all()
 
-        # Lock pour autoriser uniquement les DRH à utiliser RH
-        if not in_drh_or_admin(request.user):
-            return False
-
         if len(user_groups) == 0 and not request.user.is_superuser:
             return False
 
@@ -370,6 +379,18 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
         'remplacement_de': 'dossiers',
     }, superclass=DossierForm)
 
+    def has_add_permission(self, request):
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return in_drh_or_admin(request.user)
+
     def lookup_allowed(self, key, value):
         if key in (
             'employe__nom__istartswith',
@@ -539,6 +560,18 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
             ),
         )
 
+    def has_add_permission(self, request):
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return in_drh_or_admin(request.user)
+
     def _apercu(self, obj):
         return u"""<a title="Aperçu de l'employé"
                       onclick="return showAddAnotherPopup(this);"
@@ -638,6 +671,15 @@ class EmployeProxyAdmin(EmployeAdmin):
     def has_add_permission(self, obj):
         return False
 
+    def has_change_permission(self, request, obj=None):
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
     def _organigramme(self, obj):
         l = []
         for d in rh.Dossier.objects.filter(
@@ -801,6 +843,18 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin,
                PosteComparaisonInline,
                PosteCommentaireInline, )
 
+    def has_add_permission(self, request):
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
+
+    def has_delete_permission(self, request, obj=None):
+        return in_drh_or_admin(request.user)
+
     def lookup_allowed(self, key, value):
         return key in (
             'date_debut__gte', 'date_debut__isnull', 'date_fin__lte',
@@ -1030,7 +1084,13 @@ class ServiceProxyAdmin(ServiceAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        return in_drh_or_admin(request.user)
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
 
     def _organigramme(self, obj):
         return """<a href="%s"><strong>Organigramme</strong></a>""" % \
@@ -1201,7 +1261,13 @@ class ImplantationProxyAdmin(BaseAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        return in_drh_or_admin(request.user)
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
 
     def _organigramme(self, obj):
         return '<a href="%s"><strong>Organigramme</strong></a>' % (
@@ -1223,7 +1289,13 @@ class RegionProxyAdmin(BaseAdmin):
         return False
 
     def has_change_permission(self, request, obj=None):
-        return in_drh_or_admin(request.user)
+        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 or \
+           in_drh_or_admin(request.user):
+            return True
+        return False
 
     def _organigramme(self, obj):
         return """<a href="%s"><strong>Organigramme</strong></a>""" % (