feature complete.. now need a bit of testing
[auf_rh_dae.git] / project / dae / views.py
index c1bfa11..6914fe8 100644 (file)
@@ -1,6 +1,7 @@
 # -*- encoding: utf-8 -*-
 
 from datetime import date, datetime
+from dateutil.relativedelta import relativedelta
 
 from auf.django.permissions.decorators import get_object
 from django.contrib import messages
@@ -102,6 +103,7 @@ def poste_consulter(request, key):
     comparaisons_internes = \
             poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
     return render(request, 'dae/poste_consulter.html', {
+        'devises': devises(),
         'poste': poste,
         'validationForm': validationForm,
         'comparaisons_internes': comparaisons_internes,
@@ -231,6 +233,31 @@ def poste(request, key=None):
                 comparaison.poste = poste
                 comparaison.save()
 
+            for comparaison in zip(
+                comparaisons,
+                comparaisons_formset.forms):
+                dossier = rh.Dossier.objects.get(
+                    id=comparaison[1].cleaned_data['cmp_poste'])
+
+                # Get all remunerations for a period of 1 year,
+                # going back from either: today (if dossier has not
+                # yet ended), or from dossier's date_fin.
+                cmp_date = min(dossier.date_fin or date.today(), date.today())
+                for remuneration in _filter_remunerations(
+                    dossier.remunerations().order_by('-date_debut'),
+                    only_traitement=False,
+                    ):
+                    dae.PosteComparaisonRemuneration.objects.create(
+                        poste_comparaison = comparaison[0],
+                        type=remuneration.type,
+                        type_revalorisation=remuneration.type_revalorisation,
+                        montant=remuneration.montant,
+                        devise=remuneration.devise,
+                        commentaire=remuneration.commentaire,
+                        date_debut=remuneration.date_debut,
+                        date_fin=remuneration.date_fin,
+                        )
+
             # dans le cas d'une modification de poste de RH, on recopie les PJ
             if poste_rh is not None:
                 for piece in poste_rh.rh_pieces.all():
@@ -356,14 +383,13 @@ def embauche_consulter(request, dossier_id):
                 request.user
             )
     comparaisons = dossier.dae_comparaisons.ma_region_ou_service(request.user)
-    remunForm = ReadOnlyRemunFormSet(instance=dossier)
+
     return render(request, 'dae/embauche_consulter.html', {
         'dossier': dossier,
         'devises': devises(),
         'validationForm': validationForm,
         'comparaisons_internes': comparaisons_internes,
         'comparaisons': comparaisons,
-        'remunForm': remunForm,
         'importer': request.user.is_superuser,
     })
 
@@ -474,6 +500,31 @@ def embauche(request, key=None, dossier_id=None):
                 comparaison.dossier = dossier
                 comparaison.save()
 
+            for comparaison in zip(
+                comparaisons,
+                comparaisons_formset.forms):
+                dossier = rh.Dossier.objects.get(
+                    id=comparaison[1].cleaned_data['cmp_dossier'])
+
+                # Get all remunerations for a period of 1 year,
+                # going back from either: today (if dossier has not
+                # yet ended), or from dossier's date_fin.
+                cmp_date = min(dossier.date_fin or date.today(), date.today())
+                for remuneration in _filter_remunerations(
+                    dossier.remunerations().order_by('-date_debut'),
+                    only_traitement=False,
+                    ):
+                    dae.DossierComparaisonRemuneration.objects.create(
+                        dossier_comparaison = comparaison[0],
+                        type=remuneration.type,
+                        type_revalorisation=remuneration.type_revalorisation,
+                        montant=remuneration.montant,
+                        devise=remuneration.devise,
+                        commentaire=remuneration.commentaire,
+                        date_debut=remuneration.date_debut,
+                        date_fin=remuneration.date_fin,
+                        )
+
             messages.success(
                 request, "Le dossier %s a été sauvegardé." % dossier
             )
@@ -863,23 +914,33 @@ def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
     return dossier
 
 
-def _get_salaire_traitement(dossier):
+def _filter_remunerations(remun_qs, only_traitement=True):
     """
     Type de remun traitement derniers commencant a la meme date
     """
-    data = {}
     # Toutes les rémunérations d'un dossier
-    remunerations = [
-        r for r in dossier.remunerations().order_by('-date_debut')
-        if r.type.nature_remuneration == "Traitement"
-    ]
+    remunerations = remun_qs
 
+    if only_traitement:
+        remunerations = [
+            r for r in remun_qs
+            if r.type.nature_remuneration == "Traitement"
+            ]
+    
     # On prend les dernières avec le postulat que les rémun à la même date
     # constituent le dernier salaire
     if len(remunerations) > 0:
         date_debut = remunerations[0].date_debut
-    remunerations = [r for r in remunerations if r.date_debut == date_debut]
 
+    return [r for r in remunerations if r.date_debut == date_debut]
+    
+
+
+def _get_salaire_traitement(dossier):
+    data = {}
+
+    remunerations = _filter_remunerations(dossier.remunerations().order_by('-date_debut'))
+    
     montant = 0.0
     montant_euros = 0.0
     devise = None
@@ -912,6 +973,7 @@ def dossier_resume(request, dossier_id=None):
         data['statut'] = dossier.statut.id
     data['implantation'] = dossier.poste.implantation.id
     data['poste'] = dossier.poste.nom
+    data['d_id'] = dossier.id
     data.update(_get_salaire_traitement(dossier))
     return HttpResponse(dumps(data))
 
@@ -933,7 +995,9 @@ def poste_resume(request, dossier_id=None):
     data['poste'] = dossier.poste.nom
     data['statut'] = dossier.statut_id
     data['classement'] = dossier.classement_id
+    data['d_id'] = dossier.id
     data.update(_get_salaire_traitement(dossier))
+
     return HttpResponse(dumps(data))