debut_field = 'date_debut'
fin_field = 'date_fin'
- def get_q_actifs(self, date_min=None, date_max=None, annee=None):
+ def _actifs(self, debut_field, fin_field, date_min=None, date_max=None,
+ annee=None):
q = Q()
if annee:
janvier = date(annee, 1, 1)
date_min = date_max = date.today()
if date_min:
q = q & (
- Q(**{self.fin_field + '__gte': date_min}) |
- Q(**{self.fin_field: None}))
+ Q(**{fin_field + '__gte': date_min}) |
+ Q(**{fin_field: None}))
if date_max:
q = q & (
- Q(**{self.debut_field + '__lte': date_max}) |
- Q(**{self.debut_field: None}))
+ Q(**{debut_field + '__lte': date_max}) |
+ Q(**{debut_field: None}))
- q_inconnus = self.get_q_inconnus()
+ q_inconnus = self._inconnus(debut_field, fin_field)
return q & ~q_inconnus
+ def _inconnus(self, debut_field, fin_field):
+ q = Q(**{
+ debut_field + '__isnull': True,
+ fin_field + '__isnull': True,
+ })
+ return q
+
+ def get_q_actifs(self, date_min=None, date_max=None, annee=None):
+ return self._actifs(self.debut_field, self.fin_field,
+ date_min, date_max, annee)
+
def actifs(self, date_min=None, date_max=None, annee=None):
qs = self
q = self.get_q_actifs(date_min, date_max, annee)
return qs.filter(q)
def get_q_inconnus(self, date_min=None, date_max=None, annee=None):
- q = Q(**{
- self.debut_field + '__isnull': True,
- self.fin_field + '__isnull': True,
- })
- return q
+ return self._inconnus(self.debut_field, self.fin_field)
def inconnus(self):
qs = self
class RemunerationQuerySet(ActifsQuerySet):
def actifs(self, *args, **kwargs):
- return self \
- ._actifs('date_debut', 'date_fin', *args, **kwargs) \
- ._actifs(
- 'dossier__date_debut', 'dossier__date_fin',
- *args, **kwargs)
+ remun_q = self._actifs('date_debut', 'date_fin', *args, **kwargs)
+ dossier_q = self._actifs('dossier__date_debut', 'dossier__date_fin',
+ *args, **kwargs)
+ return self.filter(remun_q & dossier_q)
class RemunerationManager(models.Manager):
import datetime
from django.core.urlresolvers import reverse
+from django.contrib.auth.models import User
from project.rh.test.common import RhTest
from project.rh import models as rh
dossier=self.dossier_bap_ifi)
contrat.save()
- salaire = rh.TypeRemuneration(nom="salaire",
- type_paiement="Régulier",
- nature_remuneration="Indemnité",
- )
- salaire.save()
-
- remun_cnf_ngaoundere = rh.Remuneration(
- type=salaire,
- date_debut=self.today,
- dossier=self.dossier_cnf_ngaoundere,
- montant="100",
- devise=self.devise_cad,
- )
- remun_cnf_ngaoundere.save()
-
- remun_bap_ifi = rh.Remuneration(
- type=salaire,
- date_debut=self.today,
- dossier=self.dossier_bap_ifi,
- montant="200",
- devise=self.devise_cad,
- )
- remun_bap_ifi.save()
-
-
def test_anonyme(self):
"""
Un anonyme ne peut pas accéder à ce rapport
"""
url = reverse('rhr_masse_salariale')
- today = datetime.date.today()
- annee_moins_2 = datetime.date(today.year - 2, 1, 1)
- annee_moins_1 = datetime.date(today.year - 1, 1, 1)
- annee_plus_2 = datetime.date(today.year + 2, 1, 1)
- annee_plus_1 = datetime.date(today.year + 1, 1, 1)
-
-
def setUp(self):
super(RapportMasseSalarialeTest, self).setUp()
- # 2 dossiers actifs
- self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
- self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
- self.dossier_cnf_ngaoundere.save()
-
- self.dossier_cnf_bangui.date_debut = self.annee_moins_1
- self.dossier_cnf_bangui.date_fin = self.annee_plus_1
- self.dossier_cnf_bangui.save()
-
- # 1 dossier inactif
- self.dossier_bap_bureau.date_debut = self.annee_moins_2
- self.dossier_bap_bureau.date_fin = self.annee_moins_1
- self.dossier_bap_bureau.save()
-
- # 1 dossier futur
- self.dossier_bap_ifi.date_debut = self.annee_plus_1
- self.dossier_bap_ifi.date_fin = self.annee_plus_2
- self.dossier_bap_ifi.save()
-
- def test_filtrage(self):
- """
- Test la page avec des paramètres de filtrage.
- """
- self._test_drh()
- self._test_acces_ok(self.url)
- params = {'implantation': self.IMPLANTATION_ACGL_CNF_NGAOUNDERE.id,
- 'region': self.REGION_ACGL.id,
- 'annee': self.today.year,
- }
- resp = self.client.get(self.url, params)
- self.assertEqual(resp.context['form'].is_valid(), True)
- self.assertEqual(resp.status_code, 200)
def test_anonyme(self):
"""
self._test_grp_service_utilisateurs()
for url in self.urls:
self._test_acces_ko(url)
+
+class RapportMasseSalarialeCalculTest(RhTest):
+ """
+ Test l'accès au rapport de masse salariale
+ """
+ url = reverse('rhr_masse_salariale')
+
+ today = datetime.date.today()
+ annee_moins_2 = datetime.date(today.year - 2, 1, 1)
+ annee_moins_1 = datetime.date(today.year - 1, 1, 1)
+ annee_plus_2 = datetime.date(today.year + 2, 1, 1)
+ annee_plus_1 = datetime.date(today.year + 1, 1, 1)
+
+
+ def setUp(self):
+ super(RapportMasseSalarialeCalculTest, self).setUp()
+
+ self.type_salaire = rh.TypeRemuneration(nom="salaire",
+ type_paiement="Régulier",
+ nature_remuneration="Indemnité",
+ )
+ self.type_salaire.save()
+
+ # 4 dossiers actifs
+ self.dossier_cnf_ngaoundere.date_debut = self.annee_moins_1
+ self.dossier_cnf_ngaoundere.date_fin = self.annee_plus_1
+ self.dossier_cnf_ngaoundere.save()
+
+ self.dossier_cnf_bangui.date_debut = self.annee_moins_1
+ self.dossier_cnf_bangui.date_fin = self.annee_plus_1
+ self.dossier_cnf_bangui.save()
+
+ self.dossier_bap_bureau.date_debut = self.annee_moins_1
+ self.dossier_bap_bureau.date_fin = self.annee_plus_1
+ self.dossier_bap_bureau.save()
+
+ self.dossier_bap_ifi.date_debut = self.annee_moins_1
+ self.dossier_bap_ifi.date_fin = self.annee_plus_1
+ self.dossier_bap_ifi.save()
+
+
+ self.remun_cnf_ngaoundere = rh.Remuneration(
+ type=self.type_salaire,
+ date_debut=self.annee_moins_1,
+ dossier=self.dossier_cnf_ngaoundere,
+ montant="111",
+ devise=self.devise_cad,
+ )
+ self.remun_cnf_ngaoundere.save()
+
+ self.remun_cnf_bangui = rh.Remuneration(
+ type=self.type_salaire,
+ date_debut=self.annee_moins_1,
+ dossier=self.dossier_cnf_bangui,
+ montant="222",
+ devise=self.devise_cad,
+ )
+ self.remun_cnf_bangui.save()
+
+ self.remun_bap_bureau = rh.Remuneration(
+ type=self.type_salaire,
+ date_debut=self.annee_moins_1,
+ dossier=self.dossier_bap_bureau,
+ montant="333",
+ devise=self.devise_cad,
+ )
+ self.remun_bap_bureau.save()
+
+ self.remun_bap_ifi = rh.Remuneration(
+ type=self.type_salaire,
+ date_debut=self.annee_moins_1,
+ dossier=self.dossier_bap_ifi,
+ montant="444",
+ devise=self.devise_cad,
+ )
+ self.remun_bap_ifi.save()
+
+ self.taux_change_cad = \
+ rh.TauxChange(devise=self.devise_cad,
+ taux=0.5,
+ annee=self.today.year)
+ self.taux_change_cad.save()
+
+ def test_taux_change_presence(self):
+ """
+ Intégrité des rémunérations.
+ """
+ from project.rh.views import rapports_masse_salariale
+
+ self._test_drh()
+ user_drh = User.objects.get(email="0@test.auf")
+ params = {'annee': self.today.year, }
+
+ class Request:
+ GET = params
+ user = user_drh
+
+ def get_full_path(self):
+ return
+
+ request = Request()
+
+ self.taux_change_cad.delete()
+
+ self.assertRaises(rh.RemunIntegrityException,
+ rapports_masse_salariale, request)
+
+
+ def test_filtrage(self):
+ """
+ Test la page avec des paramètres de filtrage.
+ """
+ self._test_drh()
+ self._test_acces_ok(self.url)
+
+ params = {'implantation': self.IMPLANTATION_ACGL_CNF_NGAOUNDERE.id,
+ 'annee': self.today.year,
+ }
+ resp = self.client.get(self.url, params)
+ self.assertEqual(resp.status_code, 200)
+ self.assertEqual(resp.context['form'].is_valid(), True, resp.context['form'].errors)
+ self.assertEqual(len(resp.context['lignes']), 1)
+
+ params = {
+ 'region': self.REGION_ACGL.id,
+ 'annee': self.today.year,
+ }
+ resp = self.client.get(self.url, params)
+ self.assertEqual(resp.status_code, 200)
+ self.assertEqual(resp.context['form'].is_valid(), True)
+ self.assertEqual(len(resp.context['lignes']), 2)
+
+ params = {
+ 'annee': self.today.year,
+ }
+ resp = self.client.get(self.url, params)
+ self.assertEqual(resp.status_code, 200)
+ self.assertEqual(resp.context['form'].is_valid(), True)
+ self.assertEqual(len(resp.context['lignes']), 4)