[#2653] Importation des responsables d'implantation
[auf_rh_dae.git] / project / legacy / management / commands / rh_import_legacy.py
index b766fcb..b8c0fcf 100644 (file)
@@ -1,6 +1,6 @@
 # coding: utf-8
 
-from datetime import datetime
+from datetime import datetime, date
 from decimal import Decimal
 
 from django.contrib.auth.models import User
@@ -11,6 +11,14 @@ from django.db.models import Q, Max
 from project.legacy import models as legacy
 from project.rh import models as rh
 
+def clean_date(date):
+    if date == '2003-06-31': # date inexistante (dossier 791-1)
+        return '2003-06-30'
+    elif date:
+        return date
+    else:
+        return None
+
 
 class Command(BaseCommand):
     help = 'Importe les données du système RH legacy'
@@ -46,6 +54,8 @@ class Command(BaseCommand):
         sync_dossier()
         self.stdout.write("Import de rh_ayantdroit...\n")
         sync_ayantdroit()
+        self.stdout.write("Setup des devises dans rh.Poste...\n")
+        sync_devises()
 
 
 def sync_classement():
@@ -135,16 +145,27 @@ def sync_poste():
     cursor.execute('TRUNCATE rh_poste')
     for poste in legacy.ImplantationPostes.objects.select_related('type_poste'):
 
+        #legacy.Fiches.objects.filter(prenom='Odette')[0].dossiers.all()[0].ids_direction_service
+
         # Aller chercher certaines informations dans le dernier dossier
         # associé à ce poste
         dossiers = legacy.Dossiers.objects.filter(
             Q(poste_1=poste.id_implantation_postes) | Q(poste_2=poste.id_implantation_postes)
         ).order_by('-id_dossier')
-        poste_du_responsable = 149
-        service = 1
         complement = ''
+
+        if dossiers.count() == 0:
+            service = None
+            poste_du_responsable = None
+            date_debut = None
+            date_fin = None
+
         if dossiers.count() > 0:
-            dossier = dossiers[0]
+
+            for d in dossiers:
+                if d.ids_direction_service not in (None, ''):
+                    dossier = d
+                    break
 
             # Déterminer le service
             services = dossier.ids_direction_service
@@ -158,15 +179,18 @@ def sync_poste():
             # Déterminer le poste du responsable
             try:
                 responsable = dossier.responsable
-            except legacy.Fiches.DoesNotExist:
-                pass
-            else:
                 dossiers_du_responsable = responsable.dossiers.order_by('-id_dossier')
                 if dossiers_du_responsable.count() > 0:
                     poste_du_responsable = dossiers_du_responsable[0].poste_1
+            except:
+                poste_du_responsable = None
+
+            # initialiser les dates du poste avec les dates du dossier
+            date_debut = clean_date(dossier.date_debut_mandat)
+            date_fin = clean_date(dossier.date_fin_mandat)
 
         # Créer le poste
-        rh.Poste.objects.create(
+        rh_poste = rh.Poste.objects.create(
             id=poste.id_implantation_postes,
             nom=poste.type_poste.titre_poste_m + complement,
             nom_feminin=poste.type_poste.titre_poste_f + complement,
@@ -176,8 +200,15 @@ def sync_poste():
             service_id=service,
             supprime=False,
             responsable_id=poste_du_responsable,
+            date_debut=date_debut,
+            date_fin=date_fin,
         )
 
+        if service is None and poste.actif in ('0', 0, False):
+            rh_poste.date_fin = rh_poste.date_modification
+            rh_poste.save()
+
+
 def sync_organismebstg():
     connection.cursor().execute('TRUNCATE rh_organismebstg')
     for organisme in legacy.OrganismesBstg.objects.all():
@@ -290,14 +321,6 @@ def sync_typeremuneration():
 
 def sync_dossier():
 
-    def clean_date(date):
-        if date == '2003-06-31': # date inexistante (dossier 791-1)
-            return '2003-06-30'
-        elif date:
-            return date
-        else:
-            return None
-
     taux_cache = {}
     def get_taux(annee, devise):
         taux = taux_cache.get((annee, devise))
@@ -312,12 +335,14 @@ def sync_dossier():
     cursor.execute('TRUNCATE rh_dossier')
     cursor.execute('TRUNCATE rh_remuneration')
     cursor.execute('TRUNCATE rh_dossiercommentaire')
+    cursor.execute('TRUNCATE rh_responsableimplantation')
     odette = User.objects.get(username='odette.tremblay')
     type_contrat_inconnu = rh.TypeContrat.objects.create(
         nom='Inconnu',
         nom_long='Inconnu',
     )
-    dossiers = legacy.Dossiers.objects.annotate(timestamp_modif=Max('historique__stamp'))
+    dossiers = legacy.Dossiers.objects.annotate(timestamp_modif=Max('historique__stamp')) \
+            .order_by('no_dossier')
     for dossier in dossiers:
         date_modification = datetime.fromtimestamp(dossier.timestamp_modif) \
                 if dossier.timestamp_modif else None
@@ -335,12 +360,32 @@ def sync_dossier():
             remplacement=False,
             supprime=False
         )
+
+        # Commentaires
         if dossier.remarque:
             rh.DossierCommentaire.objects.create(
                 dossier=dossier1,
                 texte=dossier.remarque,
                 owner=odette
             )
+
+        # Responsables d'implantation
+        today = date.today().isoformat()
+        if not dossier.date_fin_mandat or dossier.date_fin_mandat >= today:
+            if dossier.responsable_implantation_1:
+                responsable, created = rh.ResponsableImplantation.objects.get_or_create(
+                    implantation_id=dossier.id_implantation_1
+                )
+                responsable.employe_id = dossier.employe_id
+                responsable.save()
+            if dossier.responsable_implantation_2:
+                responsable, created = rh.ResponsableImplantation.objects.get_or_create(
+                    implantation_id=dossier.id_implantation_2
+                )
+                responsable.employe_id = dossier.employe_id
+                responsable.save()
+
+        # Contrats
         rh.Contrat.objects.create(
             dossier=dossier1,
             type_contrat_id=dossier.id_type_contrat or type_contrat_inconnu.id,
@@ -349,7 +394,7 @@ def sync_dossier():
             supprime=False
         )
 
-
+        # Rémunération
         remuns_precedentes = {}
         charges_precedentes = None
         pourcentage_charges = 0
@@ -431,7 +476,7 @@ def sync_dossier():
                             dossier=dossier1,
                             type_id=17,
                             type_revalorisation_id=None,
-                            montant=charges,
+                            montant=Decimal(str(charges)),
                             devise=devise_charges,
                             supprime=False,
                             date_debut=date_debut,
@@ -485,3 +530,14 @@ def sync_ayantdroit():
                 texte=ad.commentaire_ayant_droit,
                 owner=odette
             )
+
+def sync_devises():
+    for p in rh.Poste.objects.all():
+        if p.implantation is not None:
+            qs = rh.ValeurPoint.objects.filter(implantation=p.implantation).order_by('-id')
+            if qs.exists():
+                point = qs[0]
+                p.devise_min = point.devise
+                p.devise_max = point.devise
+                p.devise_comparaison = point.devise
+                p.save()