[#2653] Importation des responsables d'implantation
[auf_rh_dae.git] / project / legacy / management / commands / rh_import_legacy.py
index c44b1c1..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():
@@ -59,7 +69,7 @@ def sync_classement():
             coefficient=classement.coefficient,
             commentaire=classement.commentaire,
             date_modification=classement.date_modif,
-            actif=classement.actif
+            #actif=classement.actif
         )
 
 def sync_employe():
@@ -86,8 +96,8 @@ def sync_employe():
             pays_id=fiche.pays_iso2 if fiche.pays_iso2 != '-1' else None,
             date_creation=fiche.date_ouverture,
             date_modification=fiche.date_maj,
-            actif=True,
-            supprime=False
+            supprime=False,
+            nb_postes=None, # meta
         )
         if fiche.remarque:
             rh.EmployeCommentaire.objects.create(
@@ -103,7 +113,7 @@ def sync_familleemploi():
         rh.FamilleEmploi.objects.create(
             id=famille.id_famille_emploi,
             nom=famille.famille_emploi,
-            actif=famille.actif
+            #actif=famille.actif
         )
 
 def sync_typeposte():
@@ -117,7 +127,7 @@ def sync_typeposte():
             is_responsable=bool(int(type.poste_responsable)),
             famille_emploi_id=type.id_famille_emploi,
             date_modification = type.datemaj,
-            actif=bool(int(type.actif))
+            #actif=bool(int(type.actif))
         )
 
 def sync_service():
@@ -127,7 +137,7 @@ def sync_service():
         rh.Service.objects.create(
             id=service.id_direction_service,
             nom=service.direction_service,
-            actif=bool(service.actif)
+            #actif=bool(service.actif)
         )
 
 def sync_poste():
@@ -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,27 +179,36 @@ 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,
             implantation_id=poste.id_implantation,
             type_poste_id=poste.type_poste_id,
             date_modification=poste.date_maj,
-            actif=poste.actif,
             service_id=service,
             supprime=False,
-            responsable_id=poste_du_responsable
+            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():
@@ -186,7 +216,7 @@ def sync_organismebstg():
             id=organisme.id_bstg,
             nom=organisme.organisme_nom,
             type=organisme.bstg_type,
-            actif=bool(organisme.actif)
+            #actif=bool(organisme.actif)
         )
 
 def sync_statut():
@@ -196,7 +226,7 @@ def sync_statut():
             id=statut.id_statut,
             code=statut.statut_contractuel,
             nom=statut.description_statut_contractuel,
-            actif=bool(statut.actif)
+            #actif=bool(statut.actif)
         )
 
 def sync_tauxchange():
@@ -237,7 +267,6 @@ def sync_tauxchange():
             devise=devise,
             annee=taux.annee,
             taux=taux.taux_annuel,
-            actif=True
         )
 
 def sync_valeurpoint():
@@ -245,19 +274,18 @@ def sync_valeurpoint():
     for vp in legacy.ValeurPoint.objects.all():
 
         # Trouver la devise associée à cette implantation
+        annee = vp.date_actif[:4]
         try:
-            taux = legacy.TauxChangeAnnuel.objects.get(annee='2011', id_implantation=vp.id_implantation)
-        except legacy.TauxChangeAnnuel.DoesNotExist:
-            devise = None
-        else:
-            devise = rh.Devise.objects.get(code=taux.code_devise)
+            taux = legacy.TauxChangeAnnuel.objects.get(annee=annee, id_implantation=vp.id_implantation)
+        except:
+            continue
+        devise = rh.Devise.objects.get(code=taux.code_devise)
 
         rh.ValeurPoint.objects.create(
             id=vp.id_valeur_point,
             valeur=vp.valeur_point,
             implantation_id=vp.id_implantation,
             annee=vp.date_actif[:4],
-            actif=True,
             devise=devise
         )
 
@@ -268,7 +296,7 @@ def sync_typecontrat():
             id=type.id_type_contrat,
             nom=type.nom_contrat,
             nom_long=type.description_contrat,
-            actif=bool(type.actif_contrat)
+            #actif=bool(type.actif_contrat)
         )
 
 def sync_typerevalorisation():
@@ -277,7 +305,7 @@ def sync_typerevalorisation():
         rh.TypeRevalorisation.objects.create(
             id=type.id_type_revalorisation,
             nom=type.type_revalorisation,
-            actif=bool(type.actif)
+            #actif=bool(type.actif)
         )
 
 def sync_typeremuneration():
@@ -288,19 +316,11 @@ def sync_typeremuneration():
             nom=type.type_remuneration,
             type_paiement=type.type_paiement,
             nature_remuneration=type.nature_remuneration,
-            actif=bool(type.actif)
+            #actif=bool(type.actif)
         )
 
 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))
@@ -315,13 +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',
-        actif=False
     )
-    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
@@ -337,25 +358,43 @@ def sync_dossier():
             date_fin=clean_date(dossier.date_fin_mandat),
             date_modification=date_modification,
             remplacement=False,
-            actif=True,
             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,
             date_debut=clean_date(dossier.date_debut_contrat),
             date_fin=clean_date(dossier.date_fin_contrat),
-            actif=True,
             supprime=False
         )
 
-
+        # Rémunération
         remuns_precedentes = {}
         charges_precedentes = None
         pourcentage_charges = 0
@@ -386,7 +425,6 @@ def sync_dossier():
                 devise, created = rh.Devise.objects.get_or_create(code=remun.code_devise)
 
                 rh_remun = rh.Remuneration.objects.create(
-                    actif=True,
                     dossier=dossier1,
                     type_id=remun.type_remuneration_id,
                     type_revalorisation_id=remun.id_type_revalorisation,
@@ -435,11 +473,10 @@ def sync_dossier():
                        (not charges_precedentes or charges_precedentes.montant != charges or
                         str(charges_precedentes.date_debut) == str(date_debut)):
                         charges_precedentes = rh.Remuneration.objects.create(
-                            actif=True,
                             dossier=dossier1,
                             type_id=17,
                             type_revalorisation_id=None,
-                            montant=charges,
+                            montant=Decimal(str(charges)),
                             devise=devise_charges,
                             supprime=False,
                             date_debut=date_debut,
@@ -459,7 +496,6 @@ def sync_dossier():
                 date_debut=clean_date(dossier.date_debut_mandat),
                 date_fin=clean_date(dossier.date_fin_mandat),
                 remplacement=False,
-                actif=True,
                 supprime=False
             )
             if dossier.remarque:
@@ -473,7 +509,6 @@ def sync_dossier():
                 type_contrat_id=dossier.id_type_contrat or type_contrat_inconnu.id,
                 date_debut=clean_date(dossier.date_debut_contrat),
                 date_fin=clean_date(dossier.date_fin_contrat),
-                actif=True,
                 supprime=False
             )
 
@@ -487,7 +522,7 @@ def sync_ayantdroit():
             prenom=ad.prenom_ayant_droit,
             employe_id=ad.no_employe,
             lien_parente=None if ad.lien_parente == 'Autre' else ad.lien_parente,
-            actif=bool(ad.actif)
+            #actif=bool(ad.actif)
         )
         if ad.commentaire_ayant_droit:
             rh.AyantDroitCommentaire.objects.create(
@@ -495,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()