organigramme
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 1 Jun 2012 20:29:35 +0000 (16:29 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Fri, 1 Jun 2012 20:29:35 +0000 (16:29 -0400)
project/rh/admin.py
project/rh/test/rapport.py
project/rh/views.py

index 837d418..2292551 100644 (file)
@@ -655,6 +655,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(
@@ -1063,7 +1072,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>""" % \
@@ -1234,7 +1249,13 @@ class ImplantationProxyAdmin(admin.ModelAdmin):
         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>' % (
@@ -1256,7 +1277,13 @@ class RegionProxyAdmin(admin.ModelAdmin):
         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>""" % (
index a4d64f0..50284aa 100644 (file)
@@ -223,3 +223,113 @@ class RapportMasseSalarialeTest(RhTest):
         """
         self._test_grp_service_utilisateurs()
         self._test_acces_ko(self.url)
+
+
+class RapportOrganigrammeTest(RhTest):
+    """
+    Test l'accès aux organigrammes
+    """
+    def setUp(self):
+        super(RapportOrganigrammeTest, self).setUp()
+        self.url1 = reverse('rho_employe', args=[1, 'all'])
+        self.url2 = reverse('rho_employe_sans_niveau', args=[1])
+        self.url3 = reverse('rho_service', args=[1])
+        self.url4 = reverse('rho_implantation', args=[90])
+        self.url5 = reverse('rho_region', args=[1])
+
+        self.url5 = reverse('admin:rh_implantationproxy_changelist')
+        self.url6 = reverse('admin:rh_serviceproxy_changelist')
+        self.url7 = reverse('admin:rh_regionproxy_changelist')
+        self.url8 = reverse('admin:rh_employeproxy_changelist')
+
+        self.urls = (
+                #self.url1,
+                #self.url2,
+                #self.url3,
+                #self.url4,
+                self.url5,
+                self.url6,
+                self.url7,
+                self.url8,
+                )
+
+
+    def test_anonyme(self):
+        """
+        Un anonyme ne peut pas accéder à ce rapport
+        """
+        self._test_anonyme()
+        for url in self.urls:
+            self._test_acces_ko(url)
+
+    def test_correspondant_rh(self):
+        """
+        Un correspondant RH peut accéder à ce rapport
+        """
+        self._test_correspondant_rh()
+        for url in self.urls:
+            self._test_acces_ok(url)
+
+    def test_administrateur_regional(self):
+        """
+        Un administrateur peut accéder à ce rapport
+        """
+        self._test_administrateur_regional()
+        for url in self.urls:
+            self._test_acces_ok(url)
+
+    def test_directeur_bureau(self):
+        """
+        Un directeur de bureau peut accéder à ce rapport
+        """
+        self._test_directeur_bureau()
+        for url in self.urls:
+            self._test_acces_ok(url)
+
+    def test_drh(self):
+        """
+        Un DRH peut accéder à ce rapport
+        """
+        self._test_drh()
+        for url in self.urls:
+            self._test_acces_ok(url)
+
+    def test_drh2(self):
+        """
+        Un DRH (2ieme niveau) peut accéder à ce rapport
+        """
+        self._test_drh2()
+        for url in self.urls:
+            self._test_acces_ok(url)
+
+    def _test_grp_accior(self):
+        """
+        Un membre de l'ACCIOR ne peut pas accéder à ce rapport
+        """
+        self._test_grp_accior()
+        for url in self.urls:
+            self._test_acces_ko(url)
+
+    def _test_grp_abf(self):
+        """
+        Un membre de l'ABF ne peut pas accéder à ce rapport
+        """
+        self._test_grp_abf(self)
+        for url in self.urls:
+            self._test_acces_ko(url)
+
+    def _test_grp_haute_direction(self):
+        """
+        Un membre de la haute direction ne peut pas accéder à ce rapport
+        """
+        self._test_grp_haute_direction()
+        for url in self.urls:
+            self._test_acces_ko(url)
+
+    def _test_grp_service_utilisateurs(self):
+        """
+        Un membre du groupe service utilisateur ne peut pas accéder à ce rapport
+        """
+        self._test_grp_service_utilisateurs()
+        for url in self.urls:
+            self._test_acces_ko(url)
index bacb3e6..e05194c 100644 (file)
@@ -704,7 +704,11 @@ def employe_apercu(request, employe_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_employe(request, id, level="all"):
 
     poste = get_object_or_404(rh.Poste, pk=id)