Masse salariale, écriture dans fichier CSV
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 15 Mar 2012 16:00:31 +0000 (11:00 -0500)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Thu, 15 Mar 2012 16:00:31 +0000 (11:00 -0500)
project/rh/masse_salariale.py

index 9e1ba89..2812b70 100644 (file)
@@ -1,11 +1,12 @@
 # -*- encoding: utf-8 -*-
 import time
 import datetime
+import csv
+import StringIO
 
 from django.db.models import Q
 
 from datamaster_modeles import models as ref
-
 import rh.models as rh
 
 
@@ -26,7 +27,9 @@ TYPE_PRIME_INTERIM = (19,)
 TYPE_PRIME_INSTALLATION = (13,)
 TYPE_PRIME_DEMENAG = (15,)
 TYPE_PRIME_AVION = (14,)
-TYPE_NATURE_PAIEMENT = u"Accessoire" 
+TYPE_NATURE_PAIEMENT = u"Accessoire"
+TYPE_NATURE_CHARGES = u"Charges"
+
 
 class MasseSalariale():
     """ Rapport de la masse salariale. """
@@ -51,7 +54,9 @@ class MasseSalariale():
         remunerations = rh.Remuneration.objects.filter(q_range) \
                 .filter(q_range_d) \
                 .exclude(supprime=True) \
-                .select_related("dossier", "dossier_employe", "dossier_poste", "type")
+                .select_related(
+                        "dossier", "dossier_employe", "dossier_poste", "type"
+                        )
 
         employes = {}
         for r in remunerations:
@@ -143,6 +148,7 @@ class MasseSalariale():
                     'avion': 0.0,
                     'autre': 0.0,
                 }
+            charges = 0.0
             for r in remuns:
                 montant = float(r.montant)
 
@@ -187,6 +193,9 @@ class MasseSalariale():
                         r.type.nature_remuneration == TYPE_NATURE_PAIEMENT:
                     primes['autre'] += montant
 
+                if r.type.nature_remuneration == TYPE_NATURE_CHARGES:
+                    charges += montant
+
             total_indemnites = sum(indemnites.values())
 
             #Calcul du nombre de jours pour ce dossier.
@@ -201,6 +210,9 @@ class MasseSalariale():
             else:
                 date_delta = rapport_date_delta
 
+            masse_salariale = (salaire_base + total_indemnites + \
+                            sum(primes.values()) + charges)
+
             item_rapport = {
                     'bureau': dossier.poste.implantation.region.code,
                     'pays': pays,
@@ -279,7 +291,16 @@ class MasseSalariale():
                             (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_%s' % self.annee: charges * regime * \
+                            (date_delta.days / rapport_date_delta.days),
+                    'masse_salariale': masse_salariale,
+                    'masse_salariale_%s' % self.annee: masse_salariale * \
+                            regime * (
+                                    date_delta.days / rapport_date_delta.days
+                            ),
+
+            }
 
             self.rapport.append(item_rapport)
 
@@ -338,3 +359,10 @@ class MasseSalariale():
             )[0]
             self.taux_change[devise.code] = t
         return self.taux_change[devise.code]
+
+    def csv(self):
+        self.csv_handle = StringIO.StringIO()
+        csv_writer = csv.writer(self.csv_handle)
+        csv_writer.writerow(self.rapport[0].keys())
+        csv_writer.writerow([row.values() for row in self.rapport])
+