Masse salariale: headers
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Wed, 21 Mar 2012 21:10:09 +0000 (16:10 -0500)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Wed, 21 Mar 2012 21:10:09 +0000 (16:10 -0500)
project/rh/masse_salariale.py
project/rh/views.py

index ea5039f..2fcb9e7 100644 (file)
@@ -3,6 +3,7 @@ import time
 import datetime
 import csv
 import StringIO
+import itertools
 
 from django.db.models import Q
 
@@ -21,12 +22,20 @@ TYPE_REMUN_EXPAT = (4,)
 TYPE_REMUN_LOGEMENT = (6,)
 TYPE_REMUN_TRANSP = (9,)
 TYPE_REMUN_13E = (18,)
-TYPE_REMUN_AUTRE_RECURR_NOT = (1, 2, 3, 4, 6, 7, 8, 9, 18, 13, 14, 15, 19)
-TYPE_PAIEMENT_PONCTUEL = u"Ponctuel"
 TYPE_PRIME_INTERIM = (19,)
+TYPE_REMUN_ALL_INDEMNITES = list(itertools.chain(*(TYPE_REMUN_BSTG,
+        TYPE_REMUN_MAD, TYPE_REMUN_BASE, TYPE_REMUN_FONC_RESP,
+        TYPE_REMUN_EXPAT, TYPE_REMUN_LOGEMENT, TYPE_REMUN_TRANSP,
+        TYPE_REMUN_13E, TYPE_PRIME_INTERIM)))
 TYPE_PRIME_INSTALLATION = (13,)
 TYPE_PRIME_DEMENAG = (15,)
 TYPE_PRIME_AVION = (14,)
+TYPE_PRIME_ALL = list(itertools.chain(
+            *(TYPE_PRIME_INSTALLATION, TYPE_PRIME_DEMENAG, TYPE_PRIME_AVION)
+        ))
+TYPE_CHARGE_PATRONALE = (17,)
+TYPE_CHARGE_ALL = list(itertools.chain(*(TYPE_CHARGE_PATRONALE,)))
+TYPE_NATURE_INDEMN = u"Indemnité"
 TYPE_NATURE_PAIEMENT = u"Accessoire"
 TYPE_NATURE_CHARGES = u"Charges"
 
@@ -121,17 +130,17 @@ class MasseSalariale():
                 ('indemnite_logement', u"Indemnités de logement"),
                 ('indemnite_transp', u"Indemnités de transport"),
                 ('indemnite_13e', u"Indemnités 13e mois"),
-                ('indemnite_autre', u"Autre indemnités"),
-                ('total_brut', u"Total brut"),
                 ('prime_interim', u"Prime d'intérim"),
+                ('indemnite_autre', u"Autre indemnités"),
+                ('indemnite_sous_total', u"Sous-total d'indemnités"),
                 ('prime_installation', u"Prime d'installation"),
                 ('prime_demenagement', u"Prime de déménagement"),
                 ('prime_avion', u"Prime d'avion"),
                 ('prime_autre', u"Autre prime"),
-                ('prime_total', u"Total des primes"),
+                ('prime_sous_total', u"Total des primes"),
                 ('charges_patronales', u"Charges patronales"),
-                ('charges_patronales_annee', u"Charge patronale %s" % \
-                        self.annee),
+                ('charges_autre', u"Autres charges patronales"),
+                ('charges_sous_total', u"Sous-total des charges patronales"),
                 ('masse_salariale', u"Masse salariale"),
                 ('masse_salariale_annee', u"Masse salariale %s" % self.annee),
                 ('masse_salariale_annee_euro', u"Masse salariale euro %s" % \
@@ -141,11 +150,12 @@ class MasseSalariale():
         for item in self.employes.values():
             dossiers = item['dossiers']
             remuns = item['remunerations']
-            #TODO, choisir le dossier primaire
-            if len(dossiers) > 1:
-                #TODO
-                pass
+
             dossier = list(dossiers)[0]
+            for d in dossiers:
+                if d.principal:
+                    dossier = list(dossiers)[0]
+
             regime = float(dossier.poste.regime_travail) / 100
 
             if dossier.poste.expatrie:
@@ -205,16 +215,19 @@ class MasseSalariale():
                     'transp': 0.0,
                     '13e': 0.0,
                     'autre_recurr': 0.0,
+                    'interim': 0.0,
             }
 
             primes = {
-                    'interim': 0.0,
                     'installation': 0.0,
                     'demenagement': 0.0,
                     'avion': 0.0,
                     'autre': 0.0,
                 }
-            charges = 0.0
+            charges = {
+                    'patronale': 0.0,
+                    'autre': 0.0,
+                    }
             for r in remuns:
                 montant = float(r.montant)
 
@@ -239,12 +252,12 @@ class MasseSalariale():
                 if r.type_id in TYPE_REMUN_13E:
                     indemnites['13e'] += montant
 
-                if r.type_id not in TYPE_REMUN_AUTRE_RECURR_NOT \
-                        and r.type.type_paiement != TYPE_PAIEMENT_PONCTUEL:
-                    indemnites['autre_recurr'] += montant
-
                 if r.type_id in TYPE_PRIME_INTERIM:
-                    primes['interim'] += montant
+                    indemnites['interim'] += montant
+
+                if r.type_id not in TYPE_REMUN_ALL_INDEMNITES \
+                        and r.type.nature_remuneration == TYPE_NATURE_INDEMN:
+                    indemnites['autre_recurr'] += montant
 
                 if r.type_id in TYPE_PRIME_INSTALLATION:
                     primes['installation'] += montant
@@ -255,12 +268,16 @@ class MasseSalariale():
                 if r.type_id in TYPE_PRIME_AVION:
                     primes['avion'] += montant
 
-                if r.type_id not in TYPE_REMUN_AUTRE_RECURR_NOT and \
+                if r.type_id not in TYPE_PRIME_ALL and \
                         r.type.nature_remuneration == TYPE_NATURE_PAIEMENT:
                     primes['autre'] += montant
 
-                if r.type.nature_remuneration == TYPE_NATURE_CHARGES:
-                    charges += montant
+                if r.type_id in TYPE_CHARGE_PATRONALE:
+                    charges['patronale'] += montant
+
+                if r.type_id not in TYPE_CHARGE_ALL and \
+                        r.type.nature_remuneration == TYPE_NATURE_CHARGES:
+                    charges['autre'] += montant
 
             total_indemnites = sum(indemnites.values())
 
@@ -277,7 +294,7 @@ class MasseSalariale():
                 date_delta = rapport_date_delta
 
             masse_salariale = (salaire_base + total_indemnites + \
-                            sum(primes.values()) + charges)
+                            sum(primes.values()) + sum(charges.values()))
             masse_salariale_euro = rh.Remuneration(montant=masse_salariale,
                         devise=remuns[0].devise)
             self.convertir(masse_salariale_euro)
@@ -345,10 +362,12 @@ class MasseSalariale():
                             (date_delta.days / rapport_date_delta.days),
                     'indemnite_13e': indemnites['13e'] * regime * \
                             (date_delta.days / rapport_date_delta.days),
+                    'prime_interim': indemnites['interim'] * regime * \
+                            (date_delta.days / rapport_date_delta.days),
                     'indemnite_autre': indemnites['autre_recurr'] * \
                             regime * \
                             (date_delta.days / rapport_date_delta.days),
-                    'indemnite_total': total_indemnites * regime * \
+                    'indemnite_sous_total': total_indemnites * regime * \
                             (date_delta.days / rapport_date_delta.days),
                     'total_brut': (
                                 total_indemnites + salaire_base +
@@ -356,8 +375,6 @@ class MasseSalariale():
                             ) * regime * (
                                 date_delta.days / rapport_date_delta.days
                             ),
-                    'prime_interim': primes['interim'] * regime * \
-                            (date_delta.days / rapport_date_delta.days),
                     'prime_installation': primes['installation'] * regime * \
                             (date_delta.days / rapport_date_delta.days),
                     'prime_demenagement': primes['demenagement'] * regime * \
@@ -366,11 +383,11 @@ class MasseSalariale():
                             (date_delta.days / rapport_date_delta.days),
                     'prime_autre': primes['autre'] * regime * \
                             (date_delta.days / rapport_date_delta.days),
-                    'prime_total': sum(primes.values()) * regime * \
-                            (date_delta.days / rapport_date_delta.days),
-                    'charges_patronales': charges,
-                    'charges_patronales_annee': charges * regime * \
+                    'prime_sous_total': sum(primes.values()) * regime * \
                             (date_delta.days / rapport_date_delta.days),
+                    'charges_patronales': charges['patronale'],
+                    'charges_autre': charges['autre'],
+                    'charges_sous_total': sum(charges.values()),
                     'masse_salariale': masse_salariale,
                     'masse_salariale_annee': masse_salariale * \
                             regime * (
index 8b2e155..07c68a8 100644 (file)
@@ -219,7 +219,8 @@ def rapports_masse_salariale(request):
             c['rapport'] = masse.rapport
             headers = masse.headers
             c['header_keys'] = [h[0] for h in masse.headers]
-            h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
+            h = SortHeaders(request, headers, order_field_type="ot",
+                    not_sortable=c['header_keys'], order_field="o")
             c['headers'] = list(h.headers())
 
     return render_to_response('rh/rapports/masse_salariale.html', c, RequestContext(request))