import datetime
import csv
import StringIO
+import itertools
from django.db.models import Q
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"
('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" % \
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:
'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)
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
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())
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)
(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 +
) * 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 * \
(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 * (