[#3059] Import des DAE d'embauche.
authorEric Mc Sween <eric.mcsween@auf.org>
Mon, 14 May 2012 14:12:26 +0000 (10:12 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Mon, 14 May 2012 14:12:26 +0000 (10:12 -0400)
project/dae/models.py
project/dae/templates/dae/embauches_finalisees.html
project/dae/urls.py
project/dae/views.py

index 1fccc03..6c6085b 100644 (file)
@@ -1,10 +1,14 @@
 # -=- encoding: utf-8 -=-
 
+import os
+from datetime import date, timedelta
+
 import reversion
 from auf.django.metadata.models import AUFMetadata
 from django.conf import settings
 from django.core.files.storage import FileSystemStorage
 from django.db import models
+from django.db.models import Q
 
 from project.dae.exporter import DossierCopier, PosteCopier
 from project.dae.managers import \
@@ -110,6 +114,76 @@ class Poste(PosteWorkflow, rh.Poste_):
         copieur = PosteCopier(verbosity=verbosity, dry_run=dry_run)
         return copieur.copy(self)
 
+    def importer_dans_rh(self):
+        poste_rh = self.id_rh or rh.Poste()
+        poste_rh.nom = self.nom
+        poste_rh.implantation = self.implantation
+        poste_rh.type_poste = self.type_poste
+        poste_rh.service = self.service
+        poste_rh.responsable = self.responsable
+        poste_rh.regime_travail = self.regime_travail
+        poste_rh.regime_travail_nb_heure_semaine = \
+                self.regime_travail_nb_heure_semaine
+        poste_rh.local = self.local
+        poste_rh.expatrie = self.expatrie
+        poste_rh.mise_a_disposition = self.mise_a_disposition
+        poste_rh.appel = self.appel
+        poste_rh.classement_min = self.classement_min
+        poste_rh.classement_max = self.classement_max
+        poste_rh.valeur_point_min = self.valeur_point_min
+        poste_rh.valeur_point_max = self.valeur_point_max
+        poste_rh.devise_min = self.devise_min
+        poste_rh.devise_max = self.devise_max
+        poste_rh.salaire_min = self.salaire_min
+        poste_rh.salaire_max = self.salaire_max
+        poste_rh.indemn_min = self.indemn_min
+        poste_rh.indemn_max = self.indemn_max
+        poste_rh.autre_min = self.autre_min
+        poste_rh.autre_max = self.autre_max
+        poste_rh.devise_comparaison = self.devise_comparaison
+        poste_rh.comp_locale_min = self.comp_locale_min
+        poste_rh.comp_locale_max = self.comp_locale_max
+        poste_rh.comp_universite_min = self.comp_universite_min
+        poste_rh.comp_universite_max = self.comp_universite_max
+        poste_rh.comp_fonctionpub_min = self.comp_fonctionpub_min
+        poste_rh.comp_fonctionpub_max = self.comp_fonctionpub_max
+        poste_rh.comp_ong_min = self.comp_ong_min
+        poste_rh.comp_ong_max = self.comp_ong_max
+        poste_rh.comp_autre_min = self.comp_autre_min
+        poste_rh.comp_autre_max = self.comp_autre_max
+        poste_rh.justification = self.justification
+        poste_rh.date_debut = self.date_debut
+        poste_rh.date_fin = self.date_fin
+        poste_rh.save()
+
+        for piece in self.dae_pieces.all():
+            piece_rh = poste_rh.rh_pieces.create(
+                poste=poste_rh,
+                nom=piece.nom
+            )
+            piece_rh.fichier.save(
+                os.path.basename(piece.fichier.name), piece.fichier
+            )
+
+        rh.PosteComparaison.objects.filter(poste=poste_rh).delete()
+        for comp in self.dae_comparaisons_internes.all():
+            poste_rh.rh_comparaisons_internes.create(
+                implantation=comp.implantation,
+                nom=comp.nom,
+                montant=comp.montant,
+                devise=comp.devise
+            )
+
+        rh.PosteFinancement.objects.filter(poste=poste_rh).delete()
+        for financement in self.dae_financements.all():
+            poste_rh.rh_financements.create(
+                type=financement.type,
+                pourcentage=financement.pourcentage,
+                commentaire=financement.commentaire
+            )
+
+        return poste_rh
+
     def get_employe(self):
         """
         Inspecte les modèles rh v1 pour trouver l'employé du dernier dossier.
@@ -342,6 +416,13 @@ class Employe(AUFMetadata):
     def __unicode__(self):
         return u'%s %s' % (self.prenom, self.nom.upper())
 
+    def importer_dans_rh(self):
+        return self.id_rh or rh.Employe.objects.create(
+            nom=self.nom,
+            prenom=self.prenom,
+            genre=self.genre
+        )
+
 
 ### DOSSIER
 
@@ -499,6 +580,86 @@ class Dossier(DossierWorkflow, rh.Dossier_):
         copieur = DossierCopier(verbosity=verbosity, dry_run=dry_run)
         return copieur.copy(self)
 
+    def importer_dans_rh(self):
+        today = date.today()
+        poste_rh = self.poste.importer_dans_rh()
+        employe_rh = self.employe.importer_dans_rh()
+        try:
+            dossier_rh = rh.Dossier.objects.get(
+                Q(date_debut=None) | Q(date_debut__lte=today),
+                Q(date_fin=None) | Q(date_fin__gte=today),
+                poste=poste_rh,
+                employe=employe_rh
+            )
+        except rh.Dossier.DoesNotExist:
+            dossier_rh = rh.Dossier(poste=poste_rh, employe=employe_rh)
+
+        dossier_rh.statut = self.statut
+        dossier_rh.organisme_bstg = self.organisme_bstg
+        dossier_rh.remplacement = self.remplacement
+        dossier_rh.remplacement_de = self.remplacement_de
+        dossier_rh.statut_residence = self.statut_residence
+        dossier_rh.classement = self.classement
+        dossier_rh.regime_travail = self.regime_travail
+        dossier_rh.regime_travail_nb_heure_semaine = \
+                self.regime_travail_nb_heure_semaine
+        dossier_rh.date_debut = self.date_debut
+        dossier_rh.date_fin = self.date_fin
+        dossier_rh.save()
+
+        rh.DossierComparaison.objects.filter(dossier=dossier_rh).delete()
+        for comp in self.dae_comparaisons.all():
+            dossier_rh.rh_comparaisons.create(
+                implantation=comp.implantation,
+                poste=comp.poste,
+                personne=comp.personne,
+                montant=comp.montant,
+                devise=comp.devise
+            )
+
+        if not dossier_rh.rh_contrats.filter(
+            type_contrat=self.type_contrat,
+            date_debut=self.contrat_date_debut,
+            date_fin=self.contrat_date_fin
+        ).exists():
+            dossier_rh.rh_contrats.create(
+                type_contrat=self.type_contrat,
+                date_debut=self.contrat_date_debut,
+                date_fin=self.contrat_date_fin,
+            )
+
+        for piece in self.dae_dossierpieces.all():
+            piece_rh = dossier_rh.rh_dossierpieces.create(
+                nom=piece.nom
+            )
+            piece_rh.fichier.save(
+                os.path.basename(piece.fichier.name), piece.fichier
+            )
+
+        # Fermer les rémunérations qui commencent avant le début du contrat
+        dossier_rh.rh_remunerations.filter(
+            Q(date_debut=None) | Q(date_debut__lt=self.contrat_date_debut),
+            Q(date_fin=None) | Q(date_fin__gte=self.contrat_date_debut)
+        ).update(date_fin=self.contrat_date_debut - timedelta(1))
+
+        # Effacer les rémunérations qui commencent à la date du contrat
+        dossier_rh.rh_remunerations \
+                .filter(date_debut=self.contrat_date_debut) \
+                .delete()
+
+        for remun in self.dae_remunerations.all():
+            dossier_rh.rh_remunerations.get_or_create(
+                type=remun.type,
+                type_revalorisation=remun.type_revalorisation,
+                montant=remun.montant,
+                devise=remun.devise,
+                commentaire=remun.commentaire,
+                date_debut=self.contrat_date_debut,
+                date_fin=self.contrat_date_fin
+            )
+
+        return dossier_rh
+
     def get_salaire_anterieur_euros(self):
         if self.devise_anterieur is None:
             return None
index eb0bb58..a981ef3 100644 (file)
@@ -29,6 +29,7 @@
       {% sort_header "personne" "Personne" %}
       {% sort_header "debut_contrat" "Début du contrat" %}
       {% sort_header "fin_contrat" "Fin du contrat" %}
+      <th></th>
     </tr>
   </thead>
   <tbody>
@@ -40,6 +41,7 @@
       <td><a href="{% url embauche_consulter dossier.id %}">{{ dossier.employe }}</a></td>
       <td>{{ dossier.contrat_date_debut|date:"d-m-Y" }}</td>
       <td>{{ dossier.contrat_date_fin|date:"d-m-Y" }}</td>
+      <td><a href="{% url embauche_importer dossier.id %}">Importer</a></td>
     </tr>
     {% endfor %}
   </tbody>
index cb09545..e7bf8d7 100644 (file)
@@ -20,6 +20,8 @@ urlpatterns = patterns(
     url(r'^embauche$', 'embauche_choisir_poste', name='embauche'),
     url(r'^embauche/consulter/(?P<dossier_id>.*)$', 'embauche_consulter',
         name='embauche_consulter'),
+    url(r'^embauche/importer/(?P<dossier_id>.*)$', 'embauche_importer',
+        name='embauche_importer'),
     url(r'^embauche/(?P<key>.*)/(?P<dossier_id>.*)$', 'embauche',
         name='embauche'),
     url(r'^embauche/(?P<key>.*)$', 'embauche', name='embauche'),
index 674c7fc..73c30a8 100644 (file)
@@ -276,6 +276,14 @@ def embauche_consulter(request, dossier_id):
 
 
 @dae_groupe_requis
+@dossier_dans_ma_region_ou_service
+def embauche_importer(request, dossier_id=None):
+    dossier_dae = get_object_or_404(dae.Dossier, id=dossier_id)
+    dossier_rh = dossier_dae.importer_dans_rh()
+    return redirect('admin:rh_dossier_change', dossier_rh.id)
+
+
+@dae_groupe_requis
 def embauche_choisir_poste(request):
     return render_to_response('dae/embauche-choisir-poste.html', {
         'form': ChoosePosteForm(request=request)