Merge branch 'master' into test
authorEric Mc Sween <eric.mcsween@auf.org>
Mon, 14 May 2012 20:46:09 +0000 (16:46 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Mon, 14 May 2012 20:46:09 +0000 (16:46 -0400)
15 files changed:
project/dae/admin.py
project/dae/exporter.py [deleted file]
project/dae/forms.py
project/dae/management/commands/dae.py [deleted file]
project/dae/managers.py
project/dae/migrations/0076_auto__add_field_dossier_dossier_rh.py [new file with mode: 0644]
project/dae/models.py
project/dae/templates/dae/embauche_importer.html [new file with mode: 0644]
project/dae/templates/dae/embauches_finalisees.html
project/dae/urls.py
project/dae/views.py
project/dashboard.py
project/rh/admin.py
project/rh/templates/admin/rh/dossier/change_list.html
project/templates/menu.html

index 7492167..414202a 100644 (file)
@@ -1,16 +1,12 @@
 # -*- encoding: utf-8 -*-
 
+from auf.django.workflow.models import WorkflowCommentaire
 from django import forms
-
-from django.core.urlresolvers import reverse
-from django.core.mail import mail_admins
 from django.contrib import admin
-from django.contrib import messages
-from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
-from auf.django.workflow.models import WorkflowCommentaire
-from models import Poste, Dossier, DossierFinalise, PosteFinalise
-from rh.decorators import in_drh_or_admin
+
+from project.dae.models import Poste, Dossier
+
 
 class PosteAdmin(VersionAdmin):
     list_display = ('nom', 'implantation', 'etat', )
@@ -107,6 +103,7 @@ class StatutAdmin(VersionAdmin):
     _etat.short_description = "État"
     _etat.admin_order_field = "etat"
 
+
 class DossierStatutAdmin(StatutAdmin):
     search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
     list_display = ('_poste', '_implantation', 'employe', '_etat', )
@@ -121,6 +118,7 @@ class DossierStatutAdmin(StatutAdmin):
     _implantation.short_description = u"Implantation"
     _implantation.admin_order_field = "poste__implantation"
 
+
 class PosteStatutAdmin(StatutAdmin):
     search_fields = ('nom', )
     list_display = ('nom', 'implantation', )
@@ -128,124 +126,7 @@ class PosteStatutAdmin(StatutAdmin):
     form = StatutPosteForm
 
 
-class ImportAdmin(admin.ModelAdmin,):
-
-    def _etat(self, obj):
-        return obj.get_etat_display()
-    _etat.short_description = u"État"
-    _etat.admin_order_field = "etat"
-
-    def has_delete_permission(self, request, obj=None):
-        return False
-
-    def has_add_permission(self, request):
-        return False
-
-    def has_change_permission(self, request, obj=None):
-        return in_drh_or_admin(request.user)
-
-    def get_actions(self, request):
-        actions = super(ImportAdmin, self).get_actions(request)
-        del actions['delete_selected']
-        return actions
-
-
-class ImportDossierAdmin(ImportAdmin):
-    search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
-    list_display = ('_poste', '_implantation', '_employe', '_dae', '_etat')
-    list_filter = ('poste__implantation', 'etat', )
-    actions = ['importer_dans_RH', ]
-
-    def _employe(self, obj):
-        return obj.employe
-
-    def _poste(self, obj):
-        rh = obj.poste.rh_importation()
-        if rh is not None:
-            extra = u"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
-                reverse('admin:rh_poste_change', args=(rh.id,))
-        else:
-            extra = u""
-
-        return u"%s%s" % (obj.poste.nom, extra)
-    _poste.allow_tags = True
-
-    def _implantation(self, obj):
-        return obj.poste.implantation
-    _implantation.short_description = u"Implantation"
-    _implantation.admin_order_field = "poste__implantation"
-
-    def _dae(self, obj):
-        url = reverse('embauche_consulter', args=(obj.id, ))
-        return "<a href='%s'>voir la DAE</a>" % url
-    _dae.allow_tags = True
-
-    def importer_dans_RH(self, request, data):
-        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
-        if len(selected) > 1:
-            messages.add_message(request, messages.ERROR,
-                    u"Un seul dossier ne peut être importé à la fois")
-            url = reverse('admin:dae_dossierfinalise_changelist')
-            return redirect(url)
-
-        dae = [d for d in Dossier.objects.filter(id__in=selected)]
-        for d in dae:
-            try:
-                d.importer(dry_run=True)
-                copie = d.importer()
-                messages.add_message(request, messages.SUCCESS,
-                    u"%s importé dans RH" % d)
-                url = reverse('admin:rh_dossier_change', args=(copie.id, ))
-            except Exception, e:
-                mail_admins('DAE import', unicode(e))
-                messages.add_message(request, messages.ERROR, u"%s ne peut pas\
-                être importé" % d)
-                url = reverse('admin:dae_dossierfinalise_changelist')
-            return redirect(url)
-
-
-class ImportPosteAdmin(ImportAdmin):
-    search_fields = ('poste__nom', )
-    list_display = ('nom', '_implantation', '_dae', '_etat',)
-    list_filter = ('implantation',)
-    actions = ['importer_dans_RH', ]
-
-    def _implantation(self, obj):
-        return obj.implantation
-    _implantation.short_description = u"Implantation"
-    _implantation.admin_order_field = "implantation"
-
-    def _dae(self, obj):
-        url = reverse('poste_consulter', args=("dae-%s" % obj.id, ))
-        return "<a href='%s'>voir le poste dans DAE</a>" % url
-    _dae.allow_tags = True
-
-    def importer_dans_RH(self, request, data):
-        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
-        if len(selected) > 1:
-            messages.add_message(request, messages.ERROR,
-                    u"Un seul poste ne peut être importé à la fois")
-            url = reverse('admin:dae_postefinalise_changelist')
-            return redirect(url)
-        dae = [d for d in Poste.objects.filter(id__in=selected)]
-        for p in dae:
-            try:
-                p.importer(dry_run=True)
-                copie = p.importer()
-                messages.add_message(request, messages.SUCCESS,
-                    u"%s importé dans RH" % d)
-                url = reverse('admin:rh_poste_change', args=(copie.id, ))
-            except Exception, e:
-                mail_admins('DAE import', unicode(e))
-                messages.add_message(request, messages.ERROR, u"%s ne peut pas\
-                être importé" % p)
-                url = reverse('admin:dae_postefinalise_changelist')
-            return redirect(url)
-
-
 admin.site.register(Poste, PosteAdmin)
 admin.site.register(Dossier, DossierAdmin)
 admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
 admin.site.register(ProxyPosteStatut, PosteStatutAdmin)
-admin.site.register(DossierFinalise, ImportDossierAdmin)
-admin.site.register(PosteFinalise, ImportPosteAdmin)
diff --git a/project/dae/exporter.py b/project/dae/exporter.py
deleted file mode 100644 (file)
index 5aafdf8..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import sys
-import codecs
-import os
-import  shutil
-
-from django.conf import settings
-from project.rh import models as rh
-import models as dae
-
-SKIP = "** SKIP **"
-
-class SuperCopier(object):
-    """
-    Classe abstraite pour faire de la copie profonde sur des objets en BD.
-    Elle prévoit des hooks pour traiter des propriétés en particulier.
-    """
-    dry_run = True
-    verbosity = 0   
-    stdout = codecs.getwriter('utf8')(sys.stdout)
-
-    def __init__(self, dry_run=True, verbosity=0):
-        self.verbosity = verbosity
-        self.dry_run = dry_run
-
-    def out(self, txt, level=0):
-        if self.verbosity >= level:
-            self.stdout.write(txt)
-
-    def clean_id(self, source, copy, parent, field, value):
-        self.out(SKIP, 2)
-        return []
-
-    def parent(self, parent, child):
-        if not self.dry_run:
-            parent.save()
-        klass = parent.__class__.__name__.lower()
-        k = "%s_id" % klass
-        setattr(child, k, parent.id)
-
-    def duplicate(self, obj, parent=None, level=0):
-        klass = getattr(rh, obj.__class__.__name__)
-        copy = klass()
-    
-        indent = " "*level*4
-        self.out(u"\n%s [%s] %s" % (indent, str(obj.__class__),
-            obj), 1)
-        
-        for f in obj._meta.fields:
-            value = getattr(obj, f.name)
-
-            self.out(u"\n%s * %s: %s " % (indent, f.name, value), 2)
-
-            cleanup_fct = "clean_%s" % f.name
-            if hasattr(self, cleanup_fct):
-                cleaner = getattr(self, cleanup_fct)
-                cleaner(obj, copy, parent, f, value)
-            else:
-                setattr(copy, f.name, value)
-
-        for obj_composition in obj._meta._related_objects_cache:
-            app_label, dummy = obj_composition.name.split(':')
-            field_name = obj_composition.field.rel.related_name
-            if field_name == '+':
-                continue
-            self.out(u"\n%s + [%s] %s " % (indent, app_label, field_name), 1)
-            try:
-                cleanup_fct = "clean_%s" % field_name
-                if hasattr(self, cleanup_fct):
-                    cleaner = getattr(self, cleanup_fct)
-                    children = cleaner(obj, copy, parent, f, value)
-                else:
-                    children = getattr(obj, field_name).all()
-            except Exception, e:
-                # no reverse relation
-                self.out(" %s %s" % (field_name, str(e)), 1)
-                continue
-
-            for child in children:
-                child_copy = self.duplicate(child, parent=copy, level=level+1,)
-                parentship_fct = "parent_%s" % (field_name)
-                if hasattr(self,parentship_fct):
-                    parentship = getattr(self, parentship_fct)
-                else:
-                    parentship = getattr(self, "parent")
-                parentship(copy, child_copy)
-                if not self.dry_run:
-                    child_copy.save()
-    
-        return copy
-
-    def copy(self, obj):
-        return self.duplicate(obj)
-
-
-class PosteCopier(SuperCopier):
-
-    def copy(self, obj):
-        copy = super(PosteCopier, self).copy(obj)
-        if not self.dry_run:
-            dae.ImportPoste(dae=obj, rh=copy).save()
-        return copy
-
-    def clean_rh_dossiers(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_rh_comparaisons_internes(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_rh_financements(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_rh_pieces(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_dae_dossiers(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_poste(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_fichier(self, source, copy, parent, field, value):
-        if not self.dry_run and parent.id is None:
-            parent.save()
-        filename = value.path.split('/')[-1]
-        copy.poste_id = parent.id
-        new_value = rh.poste_piece_dispatch(copy, filename)
-
-        app, model, id, f = new_value.split('/')
-        app_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app)
-        model_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model)
-        id_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model, id)
-        if not os.path.exists(app_path):
-            os.mkdir(app_path)
-        if not os.path.exists(model_path):
-            os.mkdir(model_path)
-        if not os.path.exists(id_path):
-            os.mkdir(id_path)
-        src = value.path
-        dst = os.path.join(settings.PRIVE_MEDIA_ROOT, new_value)
-        shutil.copy(src, dst)
-        setattr(copy, field.name, new_value)
-
-
-class DossierCopier(SuperCopier):
-
-    def copy(self, obj):
-        copy = super(DossierCopier, self).copy(obj)
-        if not self.dry_run:
-            # update des dates partout
-            date_debut = obj.contrat_date_debut
-            date_fin = obj.contrat_date_fin
-            copy.date_debut = date_debut
-            copy.date_fin = date_fin
-            copy.save()
-            for r in copy.rh_remunerations.all():
-                r.date_debut = date_debut
-                r.date_fin = date_fin
-                r.save()
-            # log d'import    
-            dae.ImportDossier(dae=obj, rh=copy).save()
-        return copy
-
-    def clean_rh_contrats(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_rh_dossierpieces(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_rh_comparaisons(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-    
-    def clean_rh_remunerations(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-    def clean_dossier(self, source, copy, parent, field, value):
-        self.out(SKIP, 1)
-        return []
-
-
-    def clean_employe(self, source, copy, parent, field, value):
-        if source.employe.id_rh is not None:
-            copy.employe = source.employe.id_rh
-        else:
-            nouvel_employe = rh.Employe()
-            nouvel_employe.nom = source.employe.nom
-            nouvel_employe.prenom = source.employe.prenom
-            nouvel_employe.genre = source.employe.genre
-            nouvel_employe.save()
-            copy.employe = nouvel_employe
-
-    def clean_poste(self, source, copy, parent, field, value):
-        # poste comparaison a un champs nommé poste
-        if isinstance(value, unicode):
-            setattr(copy, field.name, value)
-            return
-
-        if dae.ImportPoste.objects.filter(dae=value).exists():
-            poste = dae.ImportPoste.objects.get(dae=value).rh
-        else:
-            copier = PosteCopier(verbosity=self.verbosity,
-                    dry_run=self.dry_run)
-            poste = copier.copy(value)
-        copy.poste_id = poste.id
-
-    def clean_fichier(self, source, copy, parent, field, value):
-        if not self.dry_run and parent.id is None:
-            parent.save()
-        filename = value.path.split('/')[-1]
-        copy.dossier_id = parent.id
-
-        ct = copy.__class__.__name__.lower()
-        if ct == 'contrat':
-            new_value = rh.contrat_dispatch(copy, filename)
-        elif ct == 'dossierpiece':
-            new_value = rh.dossier_piece_dispatch(copy, filename)
-        else:
-            raise Exception('fichier %s à mapper!' % ct)
-        
-        app, model, id, f = new_value.split('/')
-        app_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app)
-        model_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model)
-        id_path = os.path.join(settings.PRIVE_MEDIA_ROOT, app, model, id)
-        if not os.path.exists(app_path):
-            os.mkdir(app_path)
-        if not os.path.exists(model_path):
-            os.mkdir(model_path)
-        if not os.path.exists(id_path):
-            os.mkdir(id_path)
-        src = value.path
-        dst = os.path.join(settings.PRIVE_MEDIA_ROOT, new_value)
-        shutil.copy(src, dst)
-        setattr(copy, field.name, new_value)
index a18132d..2252e17 100644 (file)
@@ -1,32 +1,40 @@
 # -*- encoding: utf-8 -*-
 
 import datetime
-from django.db.models import Q, Max
-from django import forms
-from django.forms.models import inlineformset_factory, modelformset_factory
-from django.contrib.admin import widgets as admin_widgets
-from ajax_select.fields import AutoCompleteSelectField
+
 from auf.django.workflow.forms import WorkflowFormMixin
 from auf.django.references import models as ref
-from dae import models as dae
-from utils import get_employe_from_user, is_user_dans_services_centraux
-from rh import models as rh
-from workflow import grp_drh, POSTE_ETATS_BOUTONS, DOSSIER_ETAT_FINALISE, POSTE_ETAT_FINALISE
+from ajax_select.fields import AutoCompleteSelectField
+from django import forms
+from django.contrib.admin import widgets as admin_widgets
+from django.db.models import Q, Max
+from django.forms.models import inlineformset_factory, modelformset_factory
+
+from project.dae import models as dae
+from project.dae.utils import \
+        get_employe_from_user, is_user_dans_services_centraux
+from project.rh import models as rh
+from project.dae.workflow import \
+        grp_drh, POSTE_ETATS_BOUTONS, DOSSIER_ETAT_FINALISE, \
+        POSTE_ETAT_FINALISE
+
 
 def _implantation_choices(obj, request):
     # TRAITEMENT NORMAL
     employe = get_employe_from_user(request.user)
     # SERVICE
     if is_user_dans_services_centraux(request.user):
-        q = Q(**{ 'id' : employe.implantation_id })
+        q = Q(**{'id': employe.implantation_id})
     # REGION
     else:
-        q = Q(**{ 'region' : employe.implantation.region })
+        q = Q(**{'region': employe.implantation.region})
 
     # TRAITEMENT DRH
     if grp_drh in request.user.groups.all():
         q = Q()
-    return [('', '----------')] + [(i.id, unicode(i), )for i in ref.Implantation.objects.filter(q)]
+    return [('', '----------')] + \
+            [(i.id, unicode(i), )for i in ref.Implantation.objects.filter(q)]
+
 
 def _employe_choices(obj, request):
     # TRAITEMENT NORMAL
@@ -37,55 +45,91 @@ def _employe_choices(obj, request):
         q_rh_region_service = Q(poste__implantation=employe.implantation)
     # REGION
     else:
-        q_dae_region_service = Q(poste__implantation__region=employe.implantation.region)
-        q_rh_region_service = Q(poste__implantation__region=employe.implantation.region)
+        q_dae_region_service = Q(
+            poste__implantation__region=employe.implantation.region
+        )
+        q_rh_region_service = Q(
+            poste__implantation__region=employe.implantation.region
+        )
     # TRAITEMENT DRH
     if grp_drh in request.user.groups.all():
         q_dae_region_service = Q()
         q_rh_region_service = Q()
 
-    # On filtre les employes avec les droits régionaux et on s'assure que c'est bien le dernier dossier en date pour sortir l'employe
-    # On retient un employé qui travaille présentement dans la même région que le user connecté.
-    dossiers_regionaux_ids = [d.id for d in dae.Dossier.objects.filter(q_dae_region_service)]
-    employes_ids = [d['employe'] for d in dae.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
+    # On filtre les employes avec les droits régionaux et on s'assure que
+    # c'est bien le dernier dossier en date pour sortir l'employe. On retient
+    # un employé qui travaille présentement dans la même région que le user
+    # connecté.
+    dossiers_regionaux_ids = [
+        d.id for d in dae.Dossier.objects.filter(q_dae_region_service)
+    ]
+    employes_ids = [
+        d['employe']
+        for d in dae.Dossier.objects
+        .values('employe')
+        .annotate(dernier_dossier=Max('id'))
+        if d['dernier_dossier'] in dossiers_regionaux_ids
+    ]
     dae_employe = dae.Employe.objects.filter(id__in=employes_ids)
     dae_ = dae_employe.filter(id_rh__isnull=True)
     copies = dae_employe.filter(Q(id_rh__isnull=False))
     id_copies = [p.id_rh_id for p in copies.all()]
 
-    dossiers_regionaux_ids = [d.id for d in rh.Dossier.objects.filter(q_rh_region_service)]
-    employes_ids = [d['employe'] for d in rh.Dossier.objects.values('employe').annotate(dernier_dossier=Max('id')) if d['dernier_dossier'] in dossiers_regionaux_ids]
-    rhv1 = rh.Employe.objects.filter(id__in=employes_ids).exclude(id__in=id_copies)
-
-    # On ajoute les nouveaux Employés DAE qui ont été crées, mais qui n'ont pas de Dossier associés
+    dossiers_regionaux_ids = [
+        d.id for d in rh.Dossier.objects.filter(q_rh_region_service)
+    ]
+    employes_ids = [
+        d['employe']
+        for d in rh.Dossier.objects
+        .values('employe')
+        .annotate(dernier_dossier=Max('id'))
+        if d['dernier_dossier'] in dossiers_regionaux_ids
+    ]
+    rhv1 = rh.Employe.objects \
+            .filter(id__in=employes_ids) \
+            .exclude(id__in=id_copies)
+
+    # On ajoute les nouveaux Employés DAE qui ont été crées, mais qui n'ont
+    # pas de Dossier associés
     employes_avec_dae = [d.employe_id for d in dae.Dossier.objects.all()]
     employes_orphelins = dae.Employe.objects.exclude(id__in=employes_avec_dae)
 
-
     def option_label(employe):
         return "%s %s" % (employe.nom.upper(), employe.prenom.title())
 
     return [('', 'Nouvel employé')] + \
-           sorted([('dae-%s' % p.id, option_label(p)) for p in dae_ | copies | employes_orphelins] +
-                  [('rh-%s' % p.id, option_label(p)) for p in rhv1],
-                  key=lambda t: t[1])
+           sorted(
+               [('dae-%s' % p.id, option_label(p))
+                for p in dae_ | copies | employes_orphelins] +
+               [('rh-%s' % p.id, option_label(p)) for p in rhv1],
+               key=lambda t: t[1]
+           )
+
 
 def label_poste_display(poste):
     """Formate un visuel pour un poste dans une liste déroulante"""
     annee = ""
     if poste.date_debut:
         annee = poste.date_debut.year
-    label = u"%s %s - %s [%s]" %(annee, poste.type_poste, poste.type_poste.famille_emploi.nom, poste.id)
+    label = u"%s %s - %s [%s]" % (
+        annee, poste.type_poste, poste.type_poste.famille_emploi.nom,
+        poste.id
+    )
     return label
 
 PostePieceForm = inlineformset_factory(dae.Poste, dae.PostePiece)
 DossierPieceForm = inlineformset_factory(dae.Dossier, dae.DossierPiece)
-FinancementForm = inlineformset_factory(dae.Poste, dae.PosteFinancement, extra=2)
+FinancementForm = inlineformset_factory(
+    dae.Poste, dae.PosteFinancement, extra=2
+)
+
 
 class DossierComparaisonForm(forms.ModelForm):
 
     recherche = AutoCompleteSelectField('dossiers', required=False)
-    poste = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'size':'60'}))
+    poste = forms.CharField(
+        max_length=255, widget=forms.TextInput(attrs={'size': '60'})
+    )
 
     class Meta:
         model = dae.DossierComparaison
@@ -95,6 +139,7 @@ DossierComparaisonFormSet = modelformset_factory(
     dae.DossierComparaison, extra=3, max_num=3, form=DossierComparaisonForm
 )
 
+
 class PosteComparaisonForm(forms.ModelForm):
 
     recherche = AutoCompleteSelectField('dae_postes', required=False)
@@ -107,6 +152,7 @@ PosteComparaisonFormSet = modelformset_factory(
     dae.PosteComparaison, extra=3, max_num=3, form=PosteComparaisonForm
 )
 
+
 class FlexibleRemunForm(forms.ModelForm):
 
     montant_mensuel = forms.DecimalField(required=False)
@@ -119,10 +165,15 @@ class FlexibleRemunForm(forms.ModelForm):
         devise = self.cleaned_data['devise']
         if devise.code == 'EUR':
             return devise
-        implantation = ref.Implantation.objects.get(id=self.data['implantation'])
+        implantation = ref.Implantation.objects.get(
+            id=self.data['implantation']
+        )
         liste_taux = devise.tauxchange_set.order_by('-annee')
         if len(liste_taux) == 0:
-            raise forms.ValidationError(u"La devise %s n'a pas de taux pour l'implantation %s" % (devise, implantation))
+            raise forms.ValidationError(
+                u"La devise %s n'a pas de taux pour l'implantation %s" %
+                (devise, implantation)
+            )
         else:
             return devise
 
@@ -130,13 +181,16 @@ RemunForm = inlineformset_factory(
     dae.Dossier, dae.Remuneration, extra=5, form=FlexibleRemunForm
 )
 
+
 class PosteForm(forms.ModelForm):
     """ Formulaire des postes. """
 
     # On ne propose que les services actifs
-    service = forms.ModelChoiceField(queryset=rh.Service.objects.all(), required=True)
+    service = forms.ModelChoiceField(
+        queryset=rh.Service.objects.all(), required=True
+    )
 
-    responsable=AutoCompleteSelectField('responsables', required=True)
+    responsable = AutoCompleteSelectField('responsables', required=True)
     #responsable = forms.ModelChoiceField(
     #        queryset=rh.Poste.objects.select_related(depth=1))
 
@@ -144,9 +198,12 @@ class PosteForm(forms.ModelForm):
     poste = forms.ChoiceField(label="Nouveau poste ou évolution du poste",
                               choices=(), required=False)
 
-    valeur_point_min  = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all(), required=False)
-    valeur_point_max = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all(), required=False)
-
+    valeur_point_min = forms.ModelChoiceField(
+        queryset=rh.ValeurPoint.actuelles.all(), required=False
+    )
+    valeur_point_max = forms.ModelChoiceField(
+        queryset=rh.ValeurPoint.actuelles.all(), required=False
+    )
 
     class Meta:
         model = dae.Poste
@@ -195,7 +252,8 @@ class PosteForm(forms.ModelForm):
         request = kwargs.pop('request')
         super(PosteForm, self).__init__(*args, **kwargs)
         self.fields['poste'].choices = self._poste_choices(request)
-        self.fields['implantation'].choices = _implantation_choices(self, request)
+        self.fields['implantation'].choices = \
+                _implantation_choices(self, request)
 
         # Quand le dae.Poste n'existe pas, on recherche dans les dossiers rhv1
         if self.instance and self.instance.id is None:
@@ -203,7 +261,6 @@ class PosteForm(forms.ModelForm):
             if len(dossiers) > 0:
                 self.initial['service'] = dossiers[0].poste.service
 
-
     def _poste_choices(self, request):
         """ Menu déroulant pour les postes.
 
@@ -211,9 +268,13 @@ class PosteForm(forms.ModelForm):
         d'équivalent dans dae.
 
         """
-        copies = dae.Poste.objects.ma_region_ou_service(request.user).exclude(id_rh__isnull=True).filter(etat=POSTE_ETAT_FINALISE)
+        copies = dae.Poste.objects \
+                .ma_region_ou_service(request.user) \
+                .exclude(id_rh__isnull=True) \
+                .filter(etat=POSTE_ETAT_FINALISE)
         id_copies = [p.id_rh_id for p in copies.all()]
-        rhv1 = rh.Poste.objects.ma_region_ou_service(request.user).exclude(id__in=id_copies)
+        rhv1 = rh.Poste.objects.ma_region_ou_service(request.user) \
+                .exclude(id__in=id_copies)
         # Optimisation de la requête
         rhv1 = rhv1.select_related(depth=1)
 
@@ -225,17 +286,18 @@ class PosteForm(forms.ModelForm):
         """
         Validation conditionnelles de certains champs.
         """
-        cleaned_data  = self.cleaned_data
+        cleaned_data = self.cleaned_data
 
-        if cleaned_data.get("local") is False and cleaned_data.get("expatrie") is False:
-            msg = "Le poste doit au moins être ouvert localement ou aux expatriés"
+        if cleaned_data.get("local") is False \
+           and cleaned_data.get("expatrie") is False:
+            msg = "Le poste doit au moins être ouvert localement " \
+                    "ou aux expatriés"
             self._errors["local"] = self.error_class([msg])
             self._errors["expatrie"] = ''
             raise forms.ValidationError(msg)
 
         return cleaned_data
 
-
     def save(self, *args, **kwargs):
         kwargs2 = kwargs.copy()
         kwargs2['commit'] = False
@@ -262,8 +324,10 @@ class ChoosePosteForm(forms.ModelForm):
 
     def _poste_choices(self, request):
         """ Menu déroulant pour les postes. """
-        dae_ = dae.Poste.objects.ma_region_ou_service(request.user).filter(id_rh__isnull=True)
-        copies = dae.Poste.objects.ma_region_ou_service(request.user).exclude(id_rh__isnull=True)
+        dae_ = dae.Poste.objects.ma_region_ou_service(request.user) \
+                .filter(id_rh__isnull=True)
+        copies = dae.Poste.objects.ma_region_ou_service(request.user) \
+                .exclude(id_rh__isnull=True)
 
         return [('', '----------')] + \
                sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies],
@@ -289,7 +353,7 @@ class EmployeForm(forms.ModelForm):
 class DossierForm(forms.ModelForm):
     """ Formulaire des dossiers. """
     class Meta:
-        exclude= ('etat', 'employe', 'poste', 'date_debut', )
+        exclude = ('etat', 'employe', 'poste', 'date_debut',)
         model = dae.Dossier
         widgets = dict(statut_residence=forms.RadioSelect(),
                        contrat_date_debut=admin_widgets.AdminDateWidget(),
@@ -305,8 +369,10 @@ class DossierForm(forms.ModelForm):
 
 WF_HELP_TEXT = ""
 
+
 class PosteWorkflowForm(WorkflowFormMixin):
     bouton_libelles = POSTE_ETATS_BOUTONS
+
     class Meta:
         fields = ('etat', )
         model = dae.Poste
@@ -317,7 +383,8 @@ class PosteWorkflowForm(WorkflowFormMixin):
 
 
 class DossierWorkflowForm(WorkflowFormMixin):
-    bouton_libelles = POSTE_ETATS_BOUTONS # meme workflow que poste...
+    bouton_libelles = POSTE_ETATS_BOUTONS  # meme workflow que poste...
+
     class Meta:
         fields = ('etat', )
         model = dae.Dossier
@@ -334,38 +401,16 @@ class DossierWorkflowForm(WorkflowFormMixin):
             poste.etat = self.instance.etat
             poste.save()
 
+
 class ContratForm(forms.ModelForm):
 
     class Meta:
         fields = ('type_contrat', 'fichier', )
         model = dae.Contrat
 
+
 class DAENumeriseeForm(forms.ModelForm):
 
     class Meta:
         model = dae.Dossier
         fields = ('dae_numerisee',)
-
-class DAEImportableForm(forms.Form):
-    qs_poste = dae.Poste.objects.filter(etat=POSTE_ETAT_FINALISE)
-    qs_dossier = dae.Dossier.objects.filter(etat=DOSSIER_ETAT_FINALISE)
-    poste = forms.ModelChoiceField(queryset=qs_poste, label="Poste finalisé", required=False)
-    dossier = forms.ModelChoiceField(queryset=qs_dossier, label="DAE finalisée", required=False)
-
-    def clean_poste(self):
-        poste = self.cleaned_data['poste']
-        if poste is not None and poste.est_importe():
-            raise forms.ValidationError("Ce poste a déjà été importé")
-        return poste
-
-    def clean_dossier(self):
-        dossier = self.cleaned_data['dossier']
-        if dossier is not None and not dossier.poste.est_importe():
-            raise forms.ValidationError("Le poste de ce dossier doit être importé avant de pouvoir importer le dossier.")
-        return dossier
-
-    def importer_poste(self):
-        poste = self.cleaned_data['poste']
-        if poste is not None and not poste.est_importe():
-            poste.importer()
-        
diff --git a/project/dae/management/commands/dae.py b/project/dae/management/commands/dae.py
deleted file mode 100644 (file)
index 0c2b404..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from django.core.management.base import BaseCommand
-
-from project.dae import  models as dae
-
-class Command(BaseCommand):
-
-    
-    def handle(self, *args, **options):
-
-        if len(args) < 2:
-            print len(args)
-            self.stdout.write("dae <modele> <id> <run>\n")
-            return
-
-        classname = args[0]
-        klass = getattr(dae, classname, None)
-        if klass is None:
-            self.stdout.write("Le modèle %s n'existe pas dans DAE.\n" % classname)
-
-        id = int(args[1])
-        try:
-            obj = klass.objects.get(id=id)
-        except:
-            self.stdout.write("L'id %s n'existe pas pour le modèle %s dans DAE.\n" % \
-                    (id, classname))
-            return
-
-
-        copy = obj.importer()
-        self.stdout.write(u"\n[%s] DAE:%s => RH:%s\n" %
-                (obj.__class__.__name__, obj.id, copy.id))
-        
index 0c2a0bc..c639906 100644 (file)
@@ -53,31 +53,3 @@ class PosteComparaisonManager(RHPosteComparaisonManager, TodoManagerMixin):
 
 class DossierComparaisonManager(RHDossierComparaisonManager, TodoManagerMixin):
     pass
-
-class DossierFinaliseManager(models.Manager):
-    """
-    Dossiers finalisés, qui ne sont pas encore importés
-    """
-    def get_query_set(self):
-        from dae.models import ImportDossier
-        dae_importees = [str(i.dae_id) for i in ImportDossier.objects.all()]
-        qs = super(DossierFinaliseManager, self).get_query_set().all()
-        if len(dae_importees) > 0:
-            qs = qs.extra(where=['dae_dossier.id NOT IN (%s)' % ", ".join(dae_importees)])
-        return qs
-
-
-class PosteFinaliseManager(models.Manager):
-    """
-    Dossiers finalisés, qui ne sont pas encore importés
-    """
-    def get_query_set(self):
-        from dae.models import ImportPoste
-        dae_importees = [str(i.dae_id) for i in ImportPoste.objects.all()]
-
-        qs = super(PosteFinaliseManager, self).get_query_set().all()
-        if len(dae_importees) > 0:
-            qs = qs.extra(where=['dae_poste.id NOT IN (%s)' % ", ".join(dae_importees)])
-        return qs
-
-
diff --git a/project/dae/migrations/0076_auto__add_field_dossier_dossier_rh.py b/project/dae/migrations/0076_auto__add_field_dossier_dossier_rh.py
new file mode 100644 (file)
index 0000000..e1c3418
--- /dev/null
@@ -0,0 +1,600 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+    
+    def forwards(self, orm):
+        
+        # Adding field 'Dossier.dossier_rh'
+        db.add_column('dae_dossier', 'dossier_rh', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dossiers_dae', null=True, to=orm['rh.Dossier']), keep_default=False)
+    
+    
+    def backwards(self, orm):
+        
+        # Deleting field 'Dossier.dossier_rh'
+        db.delete_column('dae_dossier', 'dossier_rh_id')
+    
+    
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'dae.contrat': {
+            'Meta': {'object_name': 'Contrat'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_contrats'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type_contrat'", 'to': "orm['rh.TypeContrat']"}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'dae.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement'", 'to': "orm['rh.Classement']"}),
+            'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+            'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+            'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'dae_numerisee': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh.Devise']"}),
+            'devise_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'devise_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'dossier_rh': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dossiers_dae'", 'null': 'True', 'to': "orm['rh.Dossier']"}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossiers'", 'db_column': "'employe'", 'to': "orm['dae.Employe']"}),
+            'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Employe']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'organisme_bstg'", 'to': "orm['rh.OrganismeBstg']"}),
+            'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossiers'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['dae.Dossier']"}),
+            'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '13', 'decimal_places': '2'}),
+            'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10', 'null': 'True'}),
+            'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.TypeContrat']"}),
+            'type_contrat_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.TypeContrat']"}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'dae.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_comparaisons'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['managedref.Implantation']"}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"})
+        },
+        'dae.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_dossierpieces'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Employe']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'dae.importdossier': {
+            'Meta': {'object_name': 'ImportDossier'},
+            'dae': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.Dossier']"})
+        },
+        'dae.importposte': {
+            'Meta': {'object_name': 'ImportPoste'},
+            'dae': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Poste']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh.Poste']"})
+        },
+        'dae.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10', 'null': 'True'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_max'", 'to': "orm['rh.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_min'", 'to': "orm['rh.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'devise_comparaison'", 'to': "orm['rh.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_max'", 'to': "orm['rh.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_min'", 'to': "orm['rh.Devise']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'expatrie': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Poste']"}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+            'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '13', 'decimal_places': '2'}),
+            'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'local': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'service'", 'to': "orm['rh.Service']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'type_poste'", 'to': "orm['rh.TypePoste']"}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_max'", 'to': "orm['rh.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_min'", 'to': "orm['rh.ValeurPoint']"})
+        },
+        'dae.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Classement']"}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['managedref.Implantation']"}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_comparaisons_internes'", 'to': "orm['dae.Poste']"}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'dae.postefinancement': {
+            'Meta': {'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_financements'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'dae.postepiece': {
+            'Meta': {'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_pieces'", 'db_column': "'poste'", 'to': "orm['dae.Poste']"})
+        },
+        'dae.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dae_remunerations'", 'db_column': "'dossier'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh.TypeRemuneration']"}),
+            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'type_revalorisation'", 'to': "orm['rh.TypeRevalorisation']"}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'managedref.bureau': {
+            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Implantation']", 'db_column': "'implantation'"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_court': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"})
+        },
+        'managedref.implantation': {
+            'Meta': {'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['managedref.Pays']"}),
+            'adresse_physique_precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_precision_avant': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_region': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_ville': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'adresse_postale_boite_postale': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_postale_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_postale'", 'to_field': "'code'", 'db_column': "'adresse_postale_pays'", 'to': "orm['managedref.Pays']"}),
+            'adresse_postale_precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_precision_avant': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_region': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'adresse_postale_ville': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'bureau_rattachement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Implantation']", 'db_column': "'bureau_rattachement'"}),
+            'code_meteo': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'courriel': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'courriel_interne': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'date_extension': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fermeture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_inauguration': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_ouverture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'fax': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'fax_interne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'fuseau_horaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'hebergement_convention': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'hebergement_convention_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'hebergement_etablissement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'modif_date': ('django.db.models.fields.DateField', [], {}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_court': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"}),
+            'remarque': ('django.db.models.fields.TextField', [], {}),
+            'responsable_implantation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.IntegerField', [], {}),
+            'telephone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'telephone_interne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'blank': 'True'})
+        },
+        'managedref.pays': {
+            'Meta': {'object_name': 'Pays', 'db_table': "u'ref_pays'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
+            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Bureau']", 'to_field': "'code'", 'null': 'True', 'db_column': "'code_bureau'", 'blank': 'True'}),
+            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'monnaie': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nord_sud': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['managedref.Region']", 'db_column': "'region'"})
+        },
+        'managedref.region': {
+            'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'gere_region'", 'null': 'True', 'db_column': "'implantation_bureau'", 'to': "orm['managedref.Implantation']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
+        },
+        'references.implantation': {
+            'Meta': {'managed': 'False', 'object_name': 'Implantation', 'db_table': "u'ref_implantation'", '_ormbases': ['managedref.Implantation']}
+        },
+        'references.pays': {
+            'Meta': {'managed': 'False', 'object_name': 'Pays', 'db_table': "u'ref_pays'", '_ormbases': ['managedref.Pays']}
+        },
+        'rh.classement': {
+            'Meta': {'object_name': 'Classement'},
+            'coefficient': ('django.db.models.fields.FloatField', [], {'default': '0', 'null': 'True'}),
+            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'degre': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'echelon': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.devise': {
+            'Meta': {'object_name': 'Devise'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement'", 'to': "orm['rh.Classement']"}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'organisme_bstg'", 'to': "orm['rh.OrganismeBstg']"}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'principal': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Dossier']"}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10', 'null': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'adresse': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'code_postal': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+            'nb_postes': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'province': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'situation_famille': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'tel_cellulaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'tel_domicile': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+            'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+        },
+        'rh.familleemploi': {
+            'Meta': {'object_name': 'FamilleEmploi'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.organismebstg': {
+            'Meta': {'object_name': 'OrganismeBstg'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'organismes_bstg'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10', 'null': 'True'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_max'", 'to': "orm['rh.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_min'", 'to': "orm['rh.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'devise_comparaison'", 'to': "orm['rh.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_max'", 'to': "orm['rh.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_min'", 'to': "orm['rh.Devise']"}),
+            'expatrie': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+            'indemn_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'local': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'service'", 'to': "orm['rh.Service']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'type_poste'", 'to': "orm['rh.TypePoste']"}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+            'vacant': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_max'", 'to': "orm['rh.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_min'", 'to': "orm['rh.ValeurPoint']"})
+        },
+        'rh.service': {
+            'Meta': {'object_name': 'Service'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.statut': {
+            'Meta': {'object_name': 'Statut'},
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.typecontrat': {
+            'Meta': {'object_name': 'TypeContrat'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.typeposte': {
+            'Meta': {'object_name': 'TypePoste'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'famille_emploi'", 'to': "orm['rh.FamilleEmploi']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.typeremuneration': {
+            'Meta': {'object_name': 'TypeRemuneration'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.typerevalorisation': {
+            'Meta': {'object_name': 'TypeRevalorisation'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"})
+        },
+        'rh.valeurpoint': {
+            'Meta': {'object_name': 'ValeurPoint'},
+            'annee': ('django.db.models.fields.IntegerField', [], {}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_valeur_point'", 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'user_creation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_creation'", 'to': "orm['auth.User']"}),
+            'user_modification': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'user_modification'", 'to': "orm['auth.User']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {'null': 'True'})
+        },
+        'workflow.workflowcommentaire': {
+            'Meta': {'object_name': 'WorkflowCommentaire'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+    
+    complete_apps = ['dae']
index ad18708..b9b121e 100644 (file)
@@ -1,17 +1,26 @@
 # -=- 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
-import reversion
+from django.db.models import Q
+
+from project.dae.managers import PosteManager, DossierManager
+from project.dae.workflow import PosteWorkflow, DossierWorkflow
+from project.dae.workflow import \
+        DOSSIER_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION, \
+        DOSSIER_ETAT_FINALISE
+
+# XXX: Saloperie, il faut importer rh.models à partir d'un autre namespace
+# à cause du hack app_context() dans project.rh.models. Très fragile. Il
+# faut régler ça aussi vite que possible.
 from rh import models as rh
-from workflow import PosteWorkflow, DossierWorkflow
-from workflow import DOSSIER_ETAT_DRH_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION, \
-                     DOSSIER_ETAT_FINALISE
-from auf.django.metadata.models import AUFMetadata
-from managers import *
 from rh.models import HELP_TEXT_DATE
-from exporter import DossierCopier, PosteCopier
 
 # Upload de fichiers
 UPLOAD_STORAGE = FileSystemStorage(settings.PRIVE_MEDIA_ROOT)
@@ -31,25 +40,40 @@ POSTE_ACTION = (
 
 
 class DeviseException(Exception):
-  silent_variable_failure = True
+    silent_variable_failure = True
 
 
 class Poste(PosteWorkflow, rh.Poste_):
 
-    type_intervention = models.CharField(max_length=1, choices=POSTE_ACTION, default='N')
+    type_intervention = models.CharField(
+        max_length=1, choices=POSTE_ACTION, default='N'
+    )
 
     # Modèle existant
-    id_rh = models.ForeignKey(rh.Poste, null=True, related_name='+',
-                            editable=False,
-                            verbose_name=u"Mise à jour du poste")
+    id_rh = models.ForeignKey(
+        rh.Poste, null=True, related_name='postes_dae', editable=False,
+        verbose_name=u"Mise à jour du poste"
+    )
 
     # Rémunération
-    indemn_expat_min = models.DecimalField(max_digits=13, decimal_places=2, default=0)
-    indemn_expat_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
-    indemn_fct_min = models.DecimalField(max_digits=12, decimal_places=2, default=0)
-    indemn_fct_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
-    charges_patronales_min = models.DecimalField(max_digits=12, decimal_places=2, default=0)
-    charges_patronales_max = models.DecimalField(max_digits=12, decimal_places=2, default=0)
+    indemn_expat_min = models.DecimalField(
+        max_digits=13, decimal_places=2, default=0
+    )
+    indemn_expat_max = models.DecimalField(
+        max_digits=12, decimal_places=2, default=0
+    )
+    indemn_fct_min = models.DecimalField(
+        max_digits=12, decimal_places=2, default=0
+    )
+    indemn_fct_max = models.DecimalField(
+        max_digits=12, decimal_places=2, default=0
+    )
+    charges_patronales_min = models.DecimalField(
+        max_digits=12, decimal_places=2, default=0
+    )
+    charges_patronales_max = models.DecimalField(
+        max_digits=12, decimal_places=2, default=0
+    )
 
     # Managers
     objects = PosteManager()
@@ -78,15 +102,86 @@ class Poste(PosteWorkflow, rh.Poste_):
             return []
         return self.id_rh.rh_dossiers.all()
 
-    def rh_importation(self):
-        if ImportPoste.objects.filter(dae=self).exists():
-            return ImportPoste.objects.get(dae=self).rh
-        else:
-            return None
+    def dans_rh(self):
+        """
+        Retourne le poste RH s'il existe.
+        """
+        return self.id_rh
 
-    def importer(self, verbosity=0, dry_run=False):
-        copieur = PosteCopier(verbosity=verbosity, dry_run=dry_run)
-        return copieur.copy(self)
+    def importer_dans_rh(self):
+        """
+        Importe le poste DAE dans un poste RH existant ou nouveau.
+        """
+        poste_rh = self.dans_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
+            )
+
+        self.id_rh = poste_rh
+        self.save()
+        return poste_rh
 
     def get_employe(self):
         """
@@ -106,7 +201,7 @@ class Poste(PosteWorkflow, rh.Poste_):
             implantation_devise = rh.TauxChange.objects \
                             .filter(implantation=self.implantation)[0].devise
         except:
-            implantation_devise = 5 # EUR
+            implantation_devise = 5  # EUR
         return implantation_devise
 
     #####################
@@ -114,17 +209,21 @@ class Poste(PosteWorkflow, rh.Poste_):
     #####################
 
     def get_couts_minimum(self):
-        return self.salaire_min + self.indemn_expat_min + self.indemn_fct_min + self.charges_patronales_min + self.autre_min
+        return self.salaire_min + self.indemn_expat_min + \
+                self.indemn_fct_min + self.charges_patronales_min + \
+                self.autre_min
 
     def get_salaire_minimum(self):
         return self.get_couts_minimum() - self.charges_patronales_min
 
     def get_taux_minimum(self):
         if self.devise_min.code == 'EUR':
-          return 1
+            return 1
         liste_taux = self.devise_min.tauxchange_set.order_by('-annee')
         if len(liste_taux) == 0:
-            raise DeviseException(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise_min, self.implantation))
+            raise DeviseException(
+                u"La devise %s n'a pas de taux pour l'implantation %s" %
+                (self.devise_min, self.implantation))
         else:
             return liste_taux[0].taux
 
@@ -135,17 +234,22 @@ class Poste(PosteWorkflow, rh.Poste_):
         return float(self.get_salaire_minimum()) * self.get_taux_minimum()
 
     def get_couts_maximum(self):
-        return self.salaire_max + self.indemn_expat_max + self.indemn_fct_max + self.charges_patronales_max + self.autre_max
+        return self.salaire_max + self.indemn_expat_max + \
+                self.indemn_fct_max + self.charges_patronales_max + \
+                self.autre_max
 
     def get_salaire_maximum(self):
         return self.get_couts_maximum() - self.charges_patronales_max
 
     def get_taux_maximum(self):
         if self.devise_max.code == 'EUR':
-          return 1
+            return 1
         liste_taux = self.devise_max.tauxchange_set.order_by('-annee')
         if len(liste_taux) == 0:
-            raise DeviseException(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise_max, self.implantation))
+            raise DeviseException(
+                u"La devise %s n'a pas de taux pour l'implantation %s" %
+                (self.devise_max, self.implantation)
+            )
         else:
             return liste_taux[0].taux
 
@@ -191,15 +295,11 @@ class Poste(PosteWorkflow, rh.Poste_):
         except DeviseException, e:
             return e
 
-
-    ######################
     # Comparaison de poste
-    ######################
-
     def est_comparable(self):
         """
-        Si on a au moins une valeur de saisie dans les comparaisons, alors le poste
-        est comparable.
+        Si on a au moins une valeur de saisie dans les comparaisons, alors
+        le poste est comparable.
         """
         if self.comp_universite_min is None and \
            self.comp_fonctionpub_min is None and \
@@ -215,10 +315,10 @@ class Poste(PosteWorkflow, rh.Poste_):
         else:
             return True
 
-
     def get_taux_comparaison(self):
         try:
-            return rh.TauxChange.objects.filter(devise=self.devise_comparaison)[0].taux
+            return rh.TauxChange.objects \
+                    .filter(devise=self.devise_comparaison)[0].taux
         except:
             return 1
 
@@ -252,7 +352,6 @@ class Poste(PosteWorkflow, rh.Poste_):
     def get_comp_autre_max_euros(self):
         return (float)(self.comp_autre_max) * self.get_taux_comparaison()
 
-
     def __unicode__(self):
         """
         Cette fonction est consommatrice SQL car elle cherche les dossiers
@@ -265,27 +364,34 @@ class Poste(PosteWorkflow, rh.Poste_):
         )
         return u'%s - %s (%s)' % data
 
-
 # Tester l'enregistrement car les models.py sont importés au complet
 if not reversion.is_registered(Poste):
     reversion.register(Poste)
 
-
 POSTE_FINANCEMENT_CHOICES = (
     ('A', 'A - Frais de personnel'),
     ('B', 'B - Projet(s)-Titre(s)'),
     ('C', 'C - Autre')
 )
 
+
 class PosteFinancement(rh.PosteFinancement_):
     pass
 
+
 class PostePiece(rh.PostePiece_):
     pass
 
+
 class PosteComparaison(rh.PosteComparaison_):
-    statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name=u'Statut', null=True, blank=True, )
-    classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name=u'Classement', null=True, blank=True, )
+    statut = models.ForeignKey(
+        rh.Statut, related_name='+', verbose_name=u'Statut', null=True,
+        blank=True
+    )
+    classement = models.ForeignKey(
+        rh.Classement, related_name='+', verbose_name=u'Classement',
+        null=True, blank=True
+    )
 
 ### EMPLOYÉ/PERSONNE
 
@@ -296,6 +402,7 @@ GENRE_CHOICES = (
     ('f', 'Femme'),
 )
 
+
 class Employe(AUFMetadata):
 
     # Modèle existant
@@ -308,6 +415,25 @@ class Employe(AUFMetadata):
     def __unicode__(self):
         return u'%s %s' % (self.prenom, self.nom.upper())
 
+    def dans_rh(self):
+        """
+        Retourne l'employé RH associé à cet employé DAE.
+        """
+        return self.id_rh
+
+    def importer_dans_rh(self):
+        """
+        Importe l'employé DAE dans un employé RH existant ou nouveau.
+        """
+        employe_rh = self.dans_rh() or rh.Employe.objects.create(
+            nom=self.nom,
+            prenom=self.prenom,
+            genre=self.genre
+        )
+        self.id_rh = employe_rh
+        self.save()
+        return employe_rh
+
 
 ### DOSSIER
 
@@ -322,17 +448,26 @@ COMPTE_COMPTA_CHOICES = (
     ('aucun', 'Aucun'),
 )
 
+
 class Dossier(DossierWorkflow, rh.Dossier_):
-    poste = models.ForeignKey('Poste', db_column='poste', related_name='%(app_label)s_dossiers')
-    employe = models.ForeignKey('Employe', db_column='employe', 
-                            related_name='%(app_label)s_dossiers',
-                            verbose_name=u"Employé")
+    poste = models.ForeignKey(
+        'Poste', db_column='poste', related_name='%(app_label)s_dossiers'
+    )
+    employe = models.ForeignKey(
+        'Employe', db_column='employe',
+        related_name='%(app_label)s_dossiers', verbose_name=u"Employé"
+    )
     organisme_bstg_autre = models.CharField(max_length=255,
         verbose_name=u"Autre organisme",
         help_text="indiquer l'organisme ici s'il n'est pas dans la liste",
         null=True,
         blank=True,)
 
+    # Lien avec le dossier
+    dossier_rh = models.ForeignKey(
+        rh.Dossier, related_name='dossiers_dae', null=True, blank=True
+    )
+
     # Données antérieures de l'employé
     statut_anterieur = models.ForeignKey(
             rh.Statut, related_name='+', null=True, blank=True,
@@ -343,11 +478,13 @@ class Dossier(DossierWorkflow, rh.Dossier_):
     salaire_anterieur = models.DecimalField(
             max_digits=12, decimal_places=2, null=True, default=None,
             blank=True, verbose_name=u'Salaire précédent')
-    devise_anterieur = models.ForeignKey(rh.Devise, related_name='+', 
-            null=True, blank=True)
-    type_contrat_anterieur = models.ForeignKey(rh.TypeContrat, 
-            related_name='+', null=True, blank=True, 
-            verbose_name=u'Type contrat antérieur', )
+    devise_anterieur = models.ForeignKey(
+        rh.Devise, related_name='+', null=True, blank=True
+    )
+    type_contrat_anterieur = models.ForeignKey(
+        rh.TypeContrat, related_name='+', null=True, blank=True,
+        verbose_name=u'Type contrat antérieur'
+    )
 
     # Données du titulaire précédent
     employe_anterieur = models.ForeignKey(
@@ -362,7 +499,9 @@ class Dossier(DossierWorkflow, rh.Dossier_):
     salaire_titulaire_anterieur = models.DecimalField(
             max_digits=12, decimal_places=2, default=None, null=True,
             blank=True, verbose_name=u'Salaire titulaire précédent')
-    devise_titulaire_anterieur = models.ForeignKey(rh.Devise, related_name='+', null=True, blank=True)
+    devise_titulaire_anterieur = models.ForeignKey(
+        rh.Devise, related_name='+', null=True, blank=True
+    )
 
     # Rémunération
     salaire = models.DecimalField(max_digits=13, decimal_places=2,
@@ -377,24 +516,53 @@ class Dossier(DossierWorkflow, rh.Dossier_):
                                         help_text=HELP_TEXT_DATE)
 
     # Justifications
-    justif_nouveau_statut_label = u'Justifier le statut que ce type de poste nécessite (national, expatrié, màd ou détachement)'
-    justif_nouveau_statut = models.TextField(verbose_name=justif_nouveau_statut_label, null=True, blank=True)
-    justif_nouveau_tmp_remplacement_label = u"Si l'employé effectue un remplacement temporaire, préciser"
-    justif_nouveau_tmp_remplacement = models.TextField(verbose_name=justif_nouveau_tmp_remplacement_label, null=True, blank=True)
-    justif_nouveau_salaire_label = u"Si le salaire de l'employé ne correspond pas au classement du poste ou est différent du salaire antérieur, justifier "
-    justif_nouveau_salaire = models.TextField(verbose_name=justif_nouveau_salaire_label, null=True, blank=True)
+    justif_nouveau_statut_label = u'Justifier le statut que ce type ' \
+            u'de poste nécessite (national, expatrié, màd ou détachement)'
+    justif_nouveau_statut = models.TextField(
+        verbose_name=justif_nouveau_statut_label, null=True, blank=True
+    )
+    justif_nouveau_tmp_remplacement_label = u"Si l'employé effectue un " \
+            u"remplacement temporaire, préciser"
+    justif_nouveau_tmp_remplacement = models.TextField(
+        verbose_name=justif_nouveau_tmp_remplacement_label, null=True,
+        blank=True
+    )
+    justif_nouveau_salaire_label = u"Si le salaire de l'employé ne " \
+            u"correspond pas au classement du poste ou est différent " \
+            u"du salaire antérieur, justifier "
+    justif_nouveau_salaire = models.TextField(
+        verbose_name=justif_nouveau_salaire_label, null=True, blank=True
+    )
     justif_nouveau_commentaire_label = u"COMMENTAIRES ADDITIONNELS"
-    justif_nouveau_commentaire = models.TextField(verbose_name=justif_nouveau_commentaire_label, null=True, blank=True)
-    justif_rempl_type_contrat_label = u"Changement de type de contrat, ex : d'un CDD en CDI"
-    justif_rempl_type_contrat = models.TextField(verbose_name=justif_rempl_type_contrat_label, null=True, blank=True)
-    justif_rempl_statut_employe_label = u"Si le statut de l'employé a été modifié pour ce poste ; ex :national, expatrié, màd, détachement ? Si oui, justifier"
-    justif_rempl_statut_employe = models.TextField(verbose_name=justif_rempl_statut_employe_label, null=True, blank=True)
-    justif_rempl_evaluation_label = u"L'évaluation de l'employé est-elle favorable? Préciser"
-    justif_rempl_evaluation = models.TextField(verbose_name=justif_rempl_evaluation_label, null=True, blank=True)
-    justif_rempl_salaire_label = u"Si le salaire de l'employé est modifié et/ou ne correspond pas à son classement, justifier"
-    justif_rempl_salaire = models.TextField(verbose_name=justif_rempl_salaire_label, null=True, blank=True)
+    justif_nouveau_commentaire = models.TextField(
+        verbose_name=justif_nouveau_commentaire_label, null=True, blank=True
+    )
+    justif_rempl_type_contrat_label = \
+            u"Changement de type de contrat, ex : d'un CDD en CDI"
+    justif_rempl_type_contrat = models.TextField(
+        verbose_name=justif_rempl_type_contrat_label, null=True, blank=True
+    )
+    justif_rempl_statut_employe_label = \
+            u"Si le statut de l'employé a été modifié pour ce poste ; " \
+            u"ex : national, expatrié, màd, détachement ? Si oui, justifier"
+    justif_rempl_statut_employe = models.TextField(
+        verbose_name=justif_rempl_statut_employe_label, null=True, blank=True
+    )
+    justif_rempl_evaluation_label = \
+            u"L'évaluation de l'employé est-elle favorable? Préciser"
+    justif_rempl_evaluation = models.TextField(
+        verbose_name=justif_rempl_evaluation_label, null=True, blank=True
+    )
+    justif_rempl_salaire_label = \
+            u"Si le salaire de l'employé est modifié et/ou ne correspond " \
+            u"pas à son classement, justifier"
+    justif_rempl_salaire = models.TextField(
+        verbose_name=justif_rempl_salaire_label, null=True, blank=True
+    )
     justif_rempl_commentaire_label = u"COMMENTAIRES ADDITIONNELS"
-    justif_rempl_commentaire = models.TextField(verbose_name=justif_rempl_commentaire_label, null=True, blank=True)
+    justif_rempl_commentaire = models.TextField(
+        verbose_name=justif_rempl_commentaire_label, null=True, blank=True
+    )
 
     # Comptes
     compte_compta = models.CharField(max_length=10, default='aucun',
@@ -403,26 +571,130 @@ class Dossier(DossierWorkflow, rh.Dossier_):
     compte_courriel = models.BooleanField()
 
     # DAE numérisée
-    dae_numerisee = models.FileField(upload_to='dae/dae_numerisee', storage=UPLOAD_STORAGE,
-                                     blank=True, null=True, verbose_name="DAE numérisée")
+    dae_numerisee = models.FileField(
+        upload_to='dae/dae_numerisee', storage=UPLOAD_STORAGE, blank=True,
+        null=True, verbose_name="DAE numérisée"
+    )
 
     # Managers
     objects = DossierManager()
 
     def __init__(self, *args, **kwargs):
-        # Bouchon pour créer une date fictive necessaire pour valider un dossier 
-        # à cause de l'héritage
+        # Bouchon pour créer une date fictive necessaire pour valider un
+        # dossier à cause de l'héritage
         super(rh.Dossier_, self).__init__(*args, **kwargs)
         super(DossierWorkflow, self).__init__(*args, **kwargs)
         import datetime
         self.date_debut = datetime.datetime.today()
 
     def __unicode__(self):
-        return u'[%s] %s - %s' % (self.poste.implantation, self.poste.nom, self.employe)
+        return u'[%s] %s - %s' % (
+            self.poste.implantation, self.poste.nom, self.employe
+        )
 
-    def importer(self, verbosity=0, dry_run=False):
-        copieur = DossierCopier(verbosity=verbosity, dry_run=dry_run)
-        return copieur.copy(self)
+    def dans_rh(self):
+        """
+        Retourne le dossier associé dans le système RH ou ``None`` s'il n'y
+        en a pas.
+        """
+        if self.dossier_rh:
+            return self.dossier_rh
+        today = date.today()
+        poste_rh = self.poste.dans_rh()
+        if poste_rh is None:
+            return None
+        employe_rh = self.employe.dans_rh()
+        if employe_rh is None:
+            return None
+        try:
+            return 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:
+            return None
+
+    def importer_dans_rh(self):
+        """
+        Importe les données du dossier DAE dans un dossier RH existant ou
+        nouveau.
+        """
+        poste_rh = self.poste.importer_dans_rh()
+        employe_rh = self.employe.importer_dans_rh()
+        dossier_rh = self.dans_rh() or \
+                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
+            )
+
+        # Enregistrer le lien avec le dossier RH
+        self.dossier_rh = dossier_rh
+        self.save()
+
+        return dossier_rh
 
     def get_salaire_anterieur_euros(self):
         if self.devise_anterieur is None:
@@ -435,7 +707,6 @@ class Dossier(DossierWorkflow, rh.Dossier_):
             return None
         return int(round(float(self.salaire_anterieur) * float(taux), 2))
 
-
     def get_salaire_titulaire_anterieur_euros(self):
         if self.devise_titulaire_anterieur is None:
             return None
@@ -445,7 +716,9 @@ class Dossier(DossierWorkflow, rh.Dossier_):
             return e
         if not taux:
             return None
-        return int(round(float(self.salaire_titulaire_anterieur) * float(taux), 2))
+        return int(round(
+            float(self.salaire_titulaire_anterieur) * float(taux), 2
+        ))
 
     def valide(self):
         return self.etat in (DOSSIER_ETAT_REGION_FINALISATION,
@@ -457,18 +730,26 @@ class Dossier(DossierWorkflow, rh.Dossier_):
 if not reversion.is_registered(Dossier):
     reversion.register(Dossier)
 
+
 class DossierPiece(rh.DossierPiece_):
     """Documents relatifs au Dossier (à l'occupation de ce poste par employé).
     Ex.: Lettre de motivation.
     """
     pass
 
+
 class DossierComparaison(rh.DossierComparaison_):
     """
     Photo d'une comparaison salariale au moment de l'embauche.
     """
-    statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name='Statut', null=True, blank=True, )
-    classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name='Classement', null=True, blank=True, )
+    statut = models.ForeignKey(
+        rh.Statut, related_name='+', verbose_name='Statut', null=True,
+        blank=True
+    )
+    classement = models.ForeignKey(
+        rh.Classement, related_name='+', verbose_name='Classement',
+        null=True, blank=True
+    )
 
 
 ### RÉMUNÉRATION
@@ -476,36 +757,8 @@ class DossierComparaison(rh.DossierComparaison_):
 class Remuneration(rh.Remuneration_):
     pass
 
+
 ### CONTRATS
 
 class Contrat(rh.Contrat_):
     pass
-
-
-class DossierFinalise(Dossier):
-
-    objects = DossierFinaliseManager()
-
-    class Meta:
-        proxy = True
-        verbose_name = "Import d'un dossier dans RH"
-        verbose_name_plural = "Import des dossiers dans RH"
-
-class PosteFinalise(Poste):
-
-    objects = PosteFinaliseManager()
-
-    class Meta:
-        proxy = True
-        verbose_name = "Import d'un poste dans RH"
-        verbose_name_plural = "Import des postes dans RH"
-
-# modèle de liaison entre les systèmes
-
-class ImportDossier(models.Model):
-    dae = models.ForeignKey('dae.Dossier', related_name='+')
-    rh = models.ForeignKey('rh.Dossier', related_name='+')
-
-class ImportPoste(models.Model):
-    dae = models.ForeignKey('dae.Poste', related_name='+')
-    rh = models.ForeignKey('rh.Poste', related_name='+')
diff --git a/project/dae/templates/dae/embauche_importer.html b/project/dae/templates/dae/embauche_importer.html
new file mode 100644 (file)
index 0000000..101232b
--- /dev/null
@@ -0,0 +1,41 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - DAE - Importation{% endblock %}
+{% block titre %}Ressources humaines{% endblock %}
+{% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
+
+{% block main %}
+<h1 class="gauche">Importation d'une DAE</h1>
+
+<p>Vous vous apprêtez à importer le dossier <strong>{{ dossier }}</strong> dans
+le système RH.</p>
+
+<ul>
+  {% if dossier.employe.dans_rh %}
+  <li>L'employé <strong>{{ dossier.employe }}</strong> existe déjà dans le
+  système RH.</li>
+  {% else %}
+  <li>L'employé <strong>{{ dossier.employe }}</strong> n'existe pas dans le
+  système RH et sera donc créé.</li>
+  {% endif %}
+  {% if dossier.poste.dans_rh %}
+  <li>Le poste <strong>{{ dossier.poste }}</strong> existe déjà dans le système
+  RH et sera mis à jour.</li>
+  {% else %}
+  <li>Le poste <strong>{{ dossier.poste }}</strong> n'existe pas dans le
+  système RH et sera donc créé.</li>
+  {% endif %}
+  {% if dossier.dans_rh %}
+  <li>Le dossier <strong>{{ dossier }}</strong> existe déjà dans le système RH
+  et sera mis à jour.</li>
+  {% else %}
+  <li>Le dossier <strong>{{ dossier }}</strong> n'existe pas dans le système RH
+  et sera donc créé.</li>
+  {% endif %}
+</ul>
+
+<form method="post">
+  <input type="submit" name="confirmer" value="Continuer">
+  <input type="submit" value="Annuler">
+</form>
+{% endblock %}
index eb0bb58..3e819b5 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>
       <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>
+        {% if not dossier.dossier_rh %}
+          <a href="{% url embauche_importer dossier.id %}">Importer</a></td>
+        {% endif %}
+      </td>
     </tr>
     {% endfor %}
   </tbody>
index 7384b2e..e2a70ea 100644 (file)
@@ -1,5 +1,5 @@
 # -*- encoding: utf-8 -*
-from django.conf.urls.defaults import patterns, url, include
+from django.conf.urls.defaults import patterns, url
 
 urlpatterns = patterns(
     'project.dae.views',
@@ -7,46 +7,57 @@ urlpatterns = patterns(
 
     # poste
     url(r'^postes$', 'postes_liste', name='dae_postes_liste'),
-    url(r'^poste/consulter/(?P<key>.*)$', 'poste_consulter', name='poste_consulter'),
+    url(r'^poste/consulter/(?P<key>.*)$', 'poste_consulter',
+        name='poste_consulter'),
     url(r'^poste$', 'poste', name='poste'),
     url(r'^poste/(?P<key>.*)$', 'poste', name='poste'),
     url(r'^pieces-postes/(\d+)/(.*)$', 'poste_piece', name='poste_piece'),
 
     # embauche
     url(r'^embauches$', 'embauches_liste', name='dae_embauches_liste'),
-    url(r'^embauches-finalisees$', 'embauches_finalisees', name='embauches_finalisees'),
+    url(r'^embauches-finalisees$', 'embauches_finalisees',
+        name='embauches_finalisees'),
     url(r'^embauche$', 'embauche_choisir_poste', name='embauche'),
-    url(r'^embauche/consulter/(?P<dossier_id>.*)$', 'embauche_consulter', name='embauche_consulter'),
-    url(r'^embauche/(?P<key>.*)/(?P<dossier_id>.*)$', 'embauche', 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'),
 
     # contrats
-    url(r'^embauches/(?P<dossier_id>\d+)/contrats/ajouter$', 'embauche_ajouter_contrat',
-        name='embauche_ajouter_contrat'),
+    url(r'^embauches/(?P<dossier_id>\d+)/contrats/ajouter$',
+        'embauche_ajouter_contrat', name='embauche_ajouter_contrat'),
     url(r'^contrats/(\d+)/fichier/(.*)$', 'contrat', name='contrat'),
-    url(r'^contrats/(\d+)/supprimer$', 'contrat_supprimer', name='contrat_supprimer'),
+    url(r'^contrats/(\d+)/supprimer$', 'contrat_supprimer',
+        name='contrat_supprimer'),
 
     # DAE numérisée
-    url(r'^embauches/(\d+)/dae_numerisee$', 'dae_numerisee', name='dae_numerisee'),
+    url(r'^embauches/(\d+)/dae_numerisee$', 'dae_numerisee',
+        name='dae_numerisee'),
     url(r'^embauches/(\d+)/dae_numerisee/modifier$', 'dae_numerisee_modifier',
         name='dae_numerisee_modifier'),
-    url(r'^embauches/(\d+)/dae_numerisee/supprimer$', 'dae_numerisee_supprimer',
-        name='dae_numerisee_supprimer'),
-
-    url(r'^importer$', 'importer_choix_dossier', name='importer_dae'),
+    url(r'^embauches/(\d+)/dae_numerisee/supprimer$',
+        'dae_numerisee_supprimer', name='dae_numerisee_supprimer'),
 
     # ajax
     url(r'^employe$', 'employe', name='employe'),
     url(r'^employe/(?P<key>.*)$', 'employe', name='employe'),
     url(r'^dossier$', 'dossier', name='dossier'),
-    url(r'^dossier/(?P<poste_key>.*)/(?P<employe_key>.*)$', 'dossier', name='dossier'),
-    url(r'^pieces-dossiers/(\d+)/(.*)$', 'dossier_piece', name='dossier_piece'),
-    url(r'^dossier_resume/(?P<dossier_id>.*)$', 'dossier_resume', name='dossier_resume'),
-    url(r'^poste_resume/(?P<dossier_id>.*)$', 'poste_resume', name='poste_resume'),
+    url(r'^dossier/(?P<poste_key>.*)/(?P<employe_key>.*)$', 'dossier',
+        name='dossier'),
+    url(r'^pieces-dossiers/(\d+)/(.*)$', 'dossier_piece',
+        name='dossier_piece'),
+    url(r'^dossier_resume/(?P<dossier_id>.*)$', 'dossier_resume',
+        name='dossier_resume'),
+    url(r'^poste_resume/(?P<dossier_id>.*)$', 'poste_resume',
+        name='poste_resume'),
     url(r'^salaire$', 'salaire', name='salaire'),
     url(r'^salaire/(.*)/(.*)/(.*)$', 'salaire', name='salaire'),
     url(r'^coefficient$', 'coefficient', name='dae_coefficient'),
-    url(r'^liste_valeurs_point$', 'liste_valeurs_point', name='liste_valeurs_point'),
+    url(r'^liste_valeurs_point$', 'liste_valeurs_point',
+        name='liste_valeurs_point'),
     url(r'^liste_postes$', 'liste_postes', name='liste_postes'),
     url(r'^devise$', 'devise', name='dae_devise'),
     url(r'^devises$', 'devises', name='devises'),
index 49f7f5e..52e237e 100644 (file)
@@ -4,32 +4,38 @@ import datetime
 from datetime import date
 from simplejson import dumps
 
+from auf.django.permissions.decorators import get_object
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required
+from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import MultipleObjectsReturned
 from django.core.paginator import Paginator, InvalidPage
+from django.db.models import Q
 from django.http import Http404, HttpResponse, HttpResponseGone
 from django.shortcuts import redirect, render_to_response, get_object_or_404
 from django.template import RequestContext
-from django.contrib import messages
-from django.contrib.auth.decorators import login_required
-from django.contrib.contenttypes.models import ContentType
-
 from sendfile import sendfile
 
-from auf.django.permissions.decorators import get_object
-
-from dae import models as dae
-from dae.forms import *
-from dae.workflow import DOSSIER_ETAT_FINALISE, DOSSIER_ETAT_REGION_FINALISATION, \
-                         DOSSIER_ETAT_DRH_FINALISATION, POSTE_ETAT_FINALISE
-from dae.decorators import redirect_interdiction, dae_groupe_requis, \
+from project.dae import models as dae
+from project.dae.decorators import \
+        redirect_interdiction, dae_groupe_requis, \
         poste_dans_ma_region_ou_service, \
         dossier_dans_ma_region_ou_service, \
         vieux_dossier_dans_ma_region_ou_service, \
         employe_dans_ma_region_ou_service, \
         dossier_est_modifiable, \
         poste_est_modifiable, get_contrat
-from dae.mail import send_drh_finalisation_mail
-from rh import models as rh
+from project.dae.forms import \
+        PosteWorkflowForm, PosteForm, FinancementForm, PostePieceForm, \
+        PosteComparaisonFormSet, DossierWorkflowForm, ChoosePosteForm, \
+        EmployeForm, DossierForm, DossierPieceForm, \
+        DossierComparaisonFormSet, RemunForm, ContratForm, DAENumeriseeForm, \
+        label_poste_display
+from project.dae.mail import send_drh_finalisation_mail
+from project.dae.workflow import \
+        DOSSIER_ETAT_FINALISE, DOSSIER_ETAT_REGION_FINALISATION, \
+        DOSSIER_ETAT_DRH_FINALISATION, POSTE_ETAT_FINALISE
+from project.rh import models as rh
 
 
 def devises():
@@ -46,6 +52,7 @@ def devises():
         liste.append(data)
     return liste
 
+
 @dae_groupe_requis
 def index(request):
     return render_to_response('dae/index.html', {}, RequestContext(request))
@@ -60,22 +67,30 @@ def poste_consulter(request, key):
     poste = get_object_or_404(dae.Poste, pk=id)
 
     if request.POST:
-        validationForm = PosteWorkflowForm(request.POST, instance=poste, request=request)
+        validationForm = PosteWorkflowForm(
+            request.POST, instance=poste, request=request
+        )
         if validationForm.is_valid():
             validationForm.save()
-            messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
+            messages.add_message(
+                request, messages.SUCCESS, "La validation a été enregistrée."
+            )
             return redirect('dae_postes_liste')
     else:
         validationForm = PosteWorkflowForm(instance=poste, request=request)
 
-    comparaisons_internes = poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+    comparaisons_internes = \
+            poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
     vars = {
         'poste': poste,
         'validationForm': validationForm,
         'comparaisons_internes': comparaisons_internes
     }
 
-    return render_to_response('dae/poste_consulter.html', vars, RequestContext(request))
+    return render_to_response(
+        'dae/poste_consulter.html', vars, RequestContext(request)
+    )
+
 
 @dae_groupe_requis
 @poste_dans_ma_region_ou_service
@@ -110,19 +125,23 @@ def poste(request, key=None):
         data.update(dict(request.POST.items()))
         form = PosteForm(data, instance=poste, request=request)
         financementForm = FinancementForm(request.POST, instance=poste)
-        piecesForm = PostePieceForm(request.POST, request.FILES, instance=poste)
+        piecesForm = PostePieceForm(
+            request.POST, request.FILES, instance=poste
+        )
         if isinstance(poste, dae.Poste):
             comparaisons_formset = PosteComparaisonFormSet(
                 request.POST,
-                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
+                    request.user
+                )
             )
         else:
             comparaisons_formset = PosteComparaisonFormSet(
                 request.POST,
                 queryset=dae.PosteComparaison.objects.none()
             )
-        if form.is_valid() and piecesForm.is_valid() and financementForm.is_valid() and \
-           comparaisons_formset.is_valid():
+        if form.is_valid() and piecesForm.is_valid() and \
+           financementForm.is_valid() and comparaisons_formset.is_valid():
             poste = form.save()
             piecesForm.instance = poste
             piecesForm.save()
@@ -135,14 +154,20 @@ def poste(request, key=None):
                 comparaison.poste = poste
                 comparaison.save()
 
-            messages.add_message(request, messages.SUCCESS, "Le poste %s a été sauvegardé." % poste)
-            if request.POST.has_key('save'):
+            messages.add_message(
+                request, messages.SUCCESS,
+                "Le poste %s a été sauvegardé." % poste
+            )
+            if 'save' in request.POST:
                 return redirect('poste_consulter', key='dae-%s' % poste.id)
             else:
                 return redirect('poste', key='dae-%s' % poste.id)
 
         else:
-            messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
+            messages.add_message(
+                request, messages.ERROR,
+                'Il y a des erreurs dans le formulaire.'
+            )
 
     else:
         # 'initial' évite la validation prémature lors d'une copie de poste de
@@ -152,7 +177,9 @@ def poste(request, key=None):
         financementForm = FinancementForm(instance=poste)
         if isinstance(poste, dae.Poste):
             comparaisons_formset = PosteComparaisonFormSet(
-                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+                queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
+                    request.user
+                )
             )
         else:
             comparaisons_formset = PosteComparaisonFormSet(
@@ -167,28 +194,34 @@ def poste(request, key=None):
 
     return render_to_response('dae/poste.html', vars, RequestContext(request))
 
+
 @dae_groupe_requis
 def postes_liste(request):
     """ Liste des postes. """
     content_type = ContentType.objects.get_for_model(dae.Poste)
     extra_select = {'derniere_validation': (
         "SELECT MAX(date) FROM workflow_workflowcommentaire "
-        "WHERE content_type_id = '%s' AND object_id = dae_poste.id" % content_type.id
+        "WHERE content_type_id = '%s' AND object_id = dae_poste.id" %
+        content_type.id
     )}
     postes_a_traiter = dae.Poste.objects.mes_choses_a_faire(request.user) \
             .extra(select=extra_select).order_by('-date_creation')
     postes_en_cours = dae.Poste.objects.ma_region_ou_service(request.user) \
-            .extra(select=extra_select).filter(~Q(etat=POSTE_ETAT_FINALISE)).order_by('-date_creation')
+            .extra(select=extra_select) \
+            .filter(~Q(etat=POSTE_ETAT_FINALISE)) \
+            .order_by('-date_creation')
     return render_to_response('dae/postes_liste.html', {
         'postes_a_traiter': postes_a_traiter,
         'postes_en_cours': postes_en_cours,
     }, RequestContext(request))
 
+
 @login_required
 def poste_piece(request, id, filename):
     """Téléchargement d'une pièce jointe à un poste."""
     piece = get_object_or_404(dae.PostePiece, pk=id)
-    if dae.Poste.objects.ma_region_ou_service(request.user).filter(id=piece.poste_id).exists():
+    if dae.Poste.objects.ma_region_ou_service(request.user) \
+       .filter(id=piece.poste_id).exists():
         return sendfile(request, piece.fichier.path)
     else:
         return redirect_interdiction(request)
@@ -197,9 +230,11 @@ def poste_piece(request, id, filename):
 ### DOSSIER
 
 def filtered_type_remun():
-    defaut = (2, 3, 8, 17) # salaire de base, indemnité de fonction, charges patronales
+    defaut = (2, 3, 8, 17)  # salaire de base, indemnité de fonction,
+                            # charges patronales
     return rh.TypeRemuneration.objects.filter(pk__in=defaut)
 
+
 @dae_groupe_requis
 @dossier_dans_ma_region_ou_service
 def embauche_consulter(request, dossier_id):
@@ -207,18 +242,26 @@ def embauche_consulter(request, dossier_id):
     etat_precedent = dossier.etat
 
     if request.POST:
-        validationForm = DossierWorkflowForm(request.POST, instance=dossier, request=request)
+        validationForm = DossierWorkflowForm(
+            request.POST, instance=dossier, request=request
+        )
         if validationForm.is_valid():
             if etat_precedent == DOSSIER_ETAT_REGION_FINALISATION and \
-               validationForm.cleaned_data['etat'] == DOSSIER_ETAT_DRH_FINALISATION:
+               validationForm.cleaned_data['etat'] == \
+               DOSSIER_ETAT_DRH_FINALISATION:
                 send_drh_finalisation_mail(request, dossier)
             validationForm.save()
-            messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
+            messages.add_message(
+                request, messages.SUCCESS, "La validation a été enregistrée."
+            )
             return redirect('dae_embauches_liste')
     else:
         validationForm = DossierWorkflowForm(instance=dossier, request=request)
 
-    comparaisons_internes = dossier.poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
+    comparaisons_internes = \
+            dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
+                request.user
+            )
     comparaisons = dossier.dae_comparaisons.ma_region_ou_service(request.user)
     vars = {
         'dossier': dossier,
@@ -227,8 +270,26 @@ def embauche_consulter(request, dossier_id):
         'comparaisons': comparaisons
     }
 
-    mode = request.GET.get('mode', None)
-    return render_to_response('dae/embauche_consulter.html', vars, RequestContext(request))
+    return render_to_response(
+        'dae/embauche_consulter.html', vars, RequestContext(request)
+    )
+
+
+@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)
+    if request.method == 'POST':
+        if 'confirmer' in request.POST:
+            dossier_rh = dossier_dae.importer_dans_rh()
+            return redirect('admin:rh_dossier_change', dossier_rh.id)
+        else:
+            return redirect('embauches_finalisees')
+    else:
+        return render_to_response('dae/embauche_importer.html', {
+            'dossier': dossier_dae
+        }, RequestContext(request))
+
 
 @dae_groupe_requis
 def embauche_choisir_poste(request):
@@ -236,6 +297,7 @@ def embauche_choisir_poste(request):
         'form': ChoosePosteForm(request=request)
     }, RequestContext(request))
 
+
 @dae_groupe_requis
 @dossier_dans_ma_region_ou_service
 @dossier_est_modifiable
@@ -265,7 +327,9 @@ def embauche(request, key=None, dossier_id=None):
             else:
                 raise Http404
 
-        employe_form = EmployeForm(request.POST, instance=employe, request=request)
+        employe_form = EmployeForm(
+            request.POST, instance=employe, request=request
+        )
 
         if employe_form.is_valid():
             data = dict(request.POST.items())
@@ -280,10 +344,14 @@ def embauche(request, key=None, dossier_id=None):
         dossier.employe = employe_form.instance
 
         dossier_form = DossierForm(request.POST, instance=dossier)
-        piecesForm = DossierPieceForm(request.POST, request.FILES, instance=dossier)
+        piecesForm = DossierPieceForm(
+            request.POST, request.FILES, instance=dossier
+        )
         comparaisons_formset = DossierComparaisonFormSet(
             request.POST,
-            queryset=dossier.dae_comparaisons.ma_region_ou_service(request.user)
+            queryset=dossier.dae_comparaisons.ma_region_ou_service(
+                request.user
+            )
         )
         remunForm = RemunForm(request.POST, instance=dossier)
 
@@ -303,14 +371,21 @@ def embauche(request, key=None, dossier_id=None):
                 comparaison.dossier = dossier
                 comparaison.save()
 
-            messages.success(request, "Le dossier %s a été sauvegardé." % dossier)
-            if request.POST.has_key('save'):
+            messages.success(
+                request, "Le dossier %s a été sauvegardé." % dossier
+            )
+            if 'save' in request.POST:
                 return redirect('embauche_consulter', dossier_id=dossier.id)
             else:
-                return redirect('embauche', key=dossier.poste.key, dossier_id=dossier.id)
+                return redirect(
+                    'embauche', key=dossier.poste.key, dossier_id=dossier.id
+                )
 
         else:
-            messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
+            messages.add_message(
+                request, messages.ERROR,
+                'Il y a des erreurs dans le formulaire.'
+            )
 
     else:
         # Initialisation d'un formulaire vide
@@ -318,7 +393,9 @@ def embauche(request, key=None, dossier_id=None):
             dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
             employe = dossier.employe
             data = dict(employe='dae-%s' % employe.id)
-            employe_form = EmployeForm(initial=data, instance=employe, request=request)
+            employe_form = EmployeForm(
+                initial=data, instance=employe, request=request
+            )
         else:
             dossier_rh = rh.Dossier()
             poste_rh = poste.id_rh
@@ -328,14 +405,17 @@ def embauche(request, key=None, dossier_id=None):
         dossier_form = DossierForm(instance=dossier)
         piecesForm = DossierPieceForm(instance=dossier)
         comparaisons_formset = DossierComparaisonFormSet(
-            queryset=dossier.dae_comparaisons.ma_region_ou_service(request.user)
+            queryset=dossier.dae_comparaisons.ma_region_ou_service(
+                request.user
+            )
         )
         remunForm = RemunForm(instance=dossier)
 
     try:
-        comparaisons_internes = dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
-            request.user
-        )
+        comparaisons_internes = \
+                dossier.poste.dae_comparaisons_internes.ma_region_ou_service(
+                    request.user
+                )
     except dae.Poste.DoesNotExist:
         comparaisons_internes = []
 
@@ -351,6 +431,7 @@ def embauche(request, key=None, dossier_id=None):
         'comparaisons_internes': comparaisons_internes
     }, RequestContext(request))
 
+
 @dae_groupe_requis
 @dossier_dans_ma_region_ou_service
 def embauches_liste(request):
@@ -358,17 +439,23 @@ def embauches_liste(request):
     content_type = ContentType.objects.get_for_model(dae.Dossier)
     extra_select = {'derniere_validation': (
         "SELECT MAX(date) FROM workflow_workflowcommentaire "
-        "WHERE content_type_id = '%s' AND object_id = dae_dossier.id" % content_type.id
+        "WHERE content_type_id = '%s' AND object_id = dae_dossier.id" %
+        content_type.id
     )}
-    embauches_a_traiter = dae.Dossier.objects.mes_choses_a_faire(request.user) \
+    embauches_a_traiter = dae.Dossier.objects \
+            .mes_choses_a_faire(request.user) \
             .extra(select=extra_select).order_by('-date_creation')
-    embauches_en_cours = dae.Dossier.objects.ma_region_ou_service(request.user) \
-            .extra(select=extra_select).order_by('-date_creation').exclude(etat=DOSSIER_ETAT_FINALISE)
+    embauches_en_cours = dae.Dossier.objects \
+            .ma_region_ou_service(request.user) \
+            .extra(select=extra_select) \
+            .order_by('-date_creation') \
+            .exclude(etat=DOSSIER_ETAT_FINALISE)
     return render_to_response('dae/embauches_liste.html', {
         'embauches_a_traiter': embauches_a_traiter,
         'embauches_en_cours': embauches_en_cours,
     }, RequestContext(request))
 
+
 @dae_groupe_requis
 def embauches_finalisees(request):
     """Liste des embauches finalisées."""
@@ -383,7 +470,9 @@ def embauches_finalisees(request):
     else:
         dir = ''
     if tri == 'region':
-        embauches = embauches.order_by(dir + 'poste__implantation__region__nom')
+        embauches = embauches.order_by(
+            dir + 'poste__implantation__region__nom'
+        )
     elif tri == 'implantation':
         embauches = embauches.order_by(dir + 'poste__implantation__nom')
     elif tri == 'poste':
@@ -407,6 +496,7 @@ def embauches_finalisees(request):
         'embauches': page
     }, RequestContext(request))
 
+
 def employe(request, key):
     """ Récupération AJAX de l'employé pour la page d'embauche. """
     data = dict(employe=key)
@@ -427,7 +517,10 @@ def employe(request, key):
             for field in ('prenom', 'nom', 'genre'):
                 setattr(employe, field, getattr(e, field))
 
-    return HttpResponse(EmployeForm(initial=data, instance=employe, request=request).as_table())
+    return HttpResponse(
+        EmployeForm(initial=data, instance=employe, request=request).as_table()
+    )
+
 
 ### CONTRATS
 
@@ -436,6 +529,7 @@ def employe(request, key):
 def contrat(request, contrat, filename):
     return sendfile(request, contrat.fichier.path)
 
+
 @dae_groupe_requis
 @get_contrat
 def contrat_supprimer(request, contrat):
@@ -447,6 +541,7 @@ def contrat_supprimer(request, contrat):
         'contrat': contrat
     }, RequestContext(request))
 
+
 @dae_groupe_requis
 @dossier_dans_ma_region_ou_service
 def embauche_ajouter_contrat(request, dossier_id=None):
@@ -466,12 +561,14 @@ def embauche_ajouter_contrat(request, dossier_id=None):
         'form': form
     }, RequestContext(request))
 
+
 ### DAE NUMERISEE
 
 @get_object(dae.Dossier, 'consulter')
 def dae_numerisee(request, dossier):
     return sendfile(request, dossier.dae_numerisee.path)
 
+
 @get_object(dae.Dossier, 'modifier_dae_numerisee')
 def dae_numerisee_modifier(request, dossier):
     if request.method == 'POST':
@@ -485,6 +582,7 @@ def dae_numerisee_modifier(request, dossier):
         'form': form
     }, RequestContext(request))
 
+
 @get_object(dae.Dossier, 'modifier_dae_numerisee')
 def dae_numerisee_supprimer(request, dossier):
     if request.method == 'POST':
@@ -492,11 +590,13 @@ def dae_numerisee_supprimer(request, dossier):
             dossier.dae_numerisee = None
             dossier.save()
             return redirect('embauche_consulter', dossier_id=dossier.id)
-    return render_to_response('dae/dae_numerisee_supprimer.html', {}, RequestContext(request))
+    return render_to_response(
+        'dae/dae_numerisee_supprimer.html', {}, RequestContext(request)
+    )
+
 
-################################################################################
 # AJAX SECURISE
-################################################################################
+
 @dae_groupe_requis
 @employe_dans_ma_region_ou_service
 def dossier(request, poste_key, employe_key):
@@ -508,64 +608,65 @@ def dossier(request, poste_key, employe_key):
 
     # Récupérer la devise de l'implantation lié au poste
     implantation_devise = poste.get_default_devise()
-    data.update({'devise' : implantation_devise})
+    data.update({'devise': implantation_devise})
 
     if poste.id_rh_id is not None:
         poste_rh = get_object_or_404(rh.Poste, pk=poste.id_rh_id)
     else:
         poste_rh = None
 
-    ##########################################################################################
     #   NOUVEL EMPLOYE
-    ##########################################################################################
     if employe_key == '':
         employe_source = 'new'
         employe = None
         dossier_rh = rh.Dossier()
         dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
 
-    ##########################################################################################
     #   EMPLOYE DAE
-    ##########################################################################################
     if employe_key.startswith('dae'):
-      employe_source, employe_id = employe_key.split('-')
-      employe_dae = get_object_or_404(dae.Employe, pk=employe_id)
-
-      # récupération de l'ancien dossier rh v1 pour l'employe DAE
-      try:
-          dossier_rh = rh.Dossier.objects.get(employe=employe_dae.id_rh_id, date_fin=None)
-      except (rh.Dossier.DoesNotExist):
-          dossier_rh = rh.Dossier()
-
-      # on tente de récupérer le dossier DAE, au pire on le contruit en le
-      # prépoluant avec son dossier rh v1.
-      try:
-          dossier = dae.Dossier.objects.get(employe=employe_dae, poste=poste)
-      except (dae.Dossier.DoesNotExist):
-          dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
-      employe = employe_dae.id_rh
-    ##########################################################################################
+        employe_source, employe_id = employe_key.split('-')
+        employe_dae = get_object_or_404(dae.Employe, pk=employe_id)
+
+        # récupération de l'ancien dossier rh v1 pour l'employe DAE
+        try:
+            dossier_rh = rh.Dossier.objects.get(
+                employe=employe_dae.id_rh_id, date_fin=None
+            )
+        except (rh.Dossier.DoesNotExist):
+            dossier_rh = rh.Dossier()
+
+        # on tente de récupérer le dossier DAE, au pire on le contruit en le
+        # prépoluant avec son dossier rh v1.
+        try:
+            dossier = dae.Dossier.objects.get(employe=employe_dae, poste=poste)
+        except (dae.Dossier.DoesNotExist):
+            dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
+        employe = employe_dae.id_rh
+
     #   EMPLOYE RH v1
-    ##########################################################################################
     if employe_key.startswith('rh'):
-      employe_source, employe_id = employe_key.split('-')
-      employe_rh = get_object_or_404(rh.Employe, pk=employe_id)
-
-      # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il n'en a pas,
-      # on en fournit un nouveau qui servira uniquement un créer un nouveau dossier DAE.
-      try:
-          dossier_rh = rh.Dossier.objects.get(employe=employe_rh, date_fin=None)
-      except (rh.Dossier.DoesNotExist):
-          dossier_rh = rh.Dossier()
-      dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
-      employe = employe_rh
+        employe_source, employe_id = employe_key.split('-')
+        employe_rh = get_object_or_404(rh.Employe, pk=employe_id)
+
+        # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il
+        # n'en a pas, on en fournit un nouveau qui servira uniquement un
+        # créer un nouveau dossier DAE.
+        try:
+            dossier_rh = rh.Dossier.objects.get(
+                employe=employe_rh, date_fin=None
+            )
+        except (rh.Dossier.DoesNotExist):
+            dossier_rh = rh.Dossier()
+        dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
+        employe = employe_rh
 
     dossier_form = DossierForm(initial=data, instance=dossier)
     vars = dict(form=dossier_form, poste=poste, employe=employe)
     return render_to_response('dae/embauche-dossier.html', vars,
                           RequestContext(request))
 
-#  @Cette fonction est appelée à partir de fonctions déjà sécurisée
+
+#  Cette fonction est appelée à partir de fonctions déjà sécurisée
 def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
     dossier = dae.Dossier()
 
@@ -577,7 +678,8 @@ def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
             dossier.classement_anterieur = dossier_rh.classement
 
         # Récupération du salaire de base
-        remun = dossier_rh.remunerations().filter(type=1).order_by('-date_debut')
+        remun = dossier_rh.remunerations() \
+                .filter(type=1).order_by('-date_debut')
         if remun:
             dossier.salaire_anterieur = remun[0].montant
             dossier.devise_anterieur = remun[0].devise
@@ -598,7 +700,8 @@ def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
                 dossier.employe_anterieur = titulaire
                 dossier.classement_titulaire_anterieur = d.classement
                 dossier.statut_titulaire_anterieur = d.statut
-                remun = d.remunerations().filter(type=1).order_by('-date_debut')[0]
+                remun = d.remunerations().filter(type=1) \
+                        .order_by('-date_debut')[0]
                 dossier.salaire_titulaire_anterieur = remun.montant
                 dossier.devise_titulaire_anterieur = remun.devise
             except:
@@ -612,6 +715,7 @@ def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
 
     return dossier
 
+
 @dae_groupe_requis
 @vieux_dossier_dans_ma_region_ou_service
 def dossier_resume(request, dossier_id=None):
@@ -626,7 +730,9 @@ def dossier_resume(request, dossier_id=None):
     if dossier.statut is not None:
         data['statut'] = dossier.statut.id
     data['implantation'] = dossier.poste.implantation.id
-    data['poste'] = u"%s %s" % (dossier.poste.type_poste.nom, dossier.poste.nom)
+    data['poste'] = u"%s %s" % (
+        dossier.poste.type_poste.nom, dossier.poste.nom
+    )
     salaire = dossier.get_salaire()
     if salaire is not None:
         data['montant'] = float(salaire.montant)
@@ -640,6 +746,7 @@ def dossier_resume(request, dossier_id=None):
         data['montant_euros'] = 0
     return HttpResponse(dumps(data))
 
+
 @dae_groupe_requis
 @vieux_dossier_dans_ma_region_ou_service
 def poste_resume(request, dossier_id=None):
@@ -655,7 +762,9 @@ def poste_resume(request, dossier_id=None):
     salaire = dossier.get_salaire()
     data = {}
     data['implantation'] = dossier.poste.implantation.id
-    data['poste'] = u"%s %s" % (dossier.poste.type_poste.nom, dossier.poste.nom)
+    data['poste'] = u"%s %s" % (
+        dossier.poste.type_poste.nom, dossier.poste.nom
+    )
     if salaire is not None:
         data['devise'] = salaire.devise.id
         data['montant'] = float(salaire.montant)
@@ -668,6 +777,7 @@ def poste_resume(request, dossier_id=None):
     data['classement'] = dossier.classement_id
     return HttpResponse(dumps(data))
 
+
 def liste_postes(request):
     """ Appel AJAX :
     input : implantation_id
@@ -678,49 +788,41 @@ def liste_postes(request):
     data = []
 
     # Voir le code de _poste_choices dans forms.py
-    copies = dae.Poste.objects.exclude(id_rh__isnull=True).filter(etat=POSTE_ETAT_FINALISE)
+    copies = dae.Poste.objects.exclude(id_rh__isnull=True) \
+            .filter(etat=POSTE_ETAT_FINALISE)
     rh_postes_actifs = rh.Poste.objects.all()
 
-    if 'implantation_id' in params and params.get('implantation_id') is not u"":
+    if 'implantation_id' in params \
+       and params.get('implantation_id') is not u"":
         implantation_id = params.get('implantation_id')
         copies = copies.filter(implantation__id=implantation_id)
-        rh_postes_actifs = rh_postes_actifs.filter(implantation__id=implantation_id)
+        rh_postes_actifs = rh_postes_actifs.filter(
+            implantation__id=implantation_id
+        )
 
     id_copies = [p.id_rh_id for p in copies.all()]
     rhv1 = rh_postes_actifs.exclude(id__in=id_copies)
     rhv1 = rhv1.select_related(depth=1)
 
-    data = [('', 'Nouveau poste')] +  sorted([('rh-%s' % p.id, label_poste_display(p)) for p in rhv1], key=lambda t: t[1])
+    data = [('', 'Nouveau poste')] + \
+            sorted([('rh-%s' % p.id, label_poste_display(p)) for p in rhv1],
+                   key=lambda t: t[1])
     return HttpResponse(dumps(data))
 
+
 @login_required
 def dossier_piece(request, id, filename):
     """Téléchargement d'une pièce jointe à un poste."""
     piece = get_object_or_404(dae.DossierPiece, pk=id)
-    if dae.Dossier.objects.ma_region_ou_service(request.user).filter(id=piece.dossier_id).exists():
+    if dae.Dossier.objects.ma_region_ou_service(request.user) \
+       .filter(id=piece.dossier_id).exists():
         return sendfile(request, piece.fichier.path)
     else:
         return redirect_interdiction(request)
 
-@login_required
-def importer_choix_dossier(request):
-    method = request.method
-    params = getattr(request, method, None)
-    if params:
-        form = DAEImportableForm(params)
-        if form.is_valid():
-            form.importer_poste()
-            messages.add_message(request, messages.SUCCESS, "L'importation a réussie.")
-    else:
-        form = DAEImportableForm()
-            
-    vars = dict(form=form, )
-    return render_to_response('admin/dae/importer_choix_dossier.html', vars,
-                          RequestContext(request))
 
-################################################################################
 # AJAX SECURITE non nécessaire
-################################################################################
+
 def coefficient(request):
     """ Appel AJAX :
     input : classement
@@ -751,10 +853,14 @@ def devise(request):
         valeur_point = rh.ValeurPoint.objects.get(pk=valeur_point)
         annee = valeur_point.annee
         try:
-            taux = rh.TauxChange.objects.get(annee=annee, devise=valeur_point.devise)
+            taux = rh.TauxChange.objects.get(
+                annee=annee, devise=valeur_point.devise
+            )
         except MultipleObjectsReturned:
-            return HttpResponseGone(u"Il existe plusieurs taux pour la devise %s cette année-là : %s" % \
-                (valeur_point.devise.code, annee))
+            return HttpResponseGone(
+                u"Il existe plusieurs taux pour la devise %s "
+                u"cette année-là : %s" % (valeur_point.devise.code, annee)
+            )
 
         data['devise'] = taux.devise.id
         data['valeur'] = valeur_point.valeur
@@ -764,6 +870,7 @@ def devise(request):
         return HttpResponseGone("Vous devez choisir une valeur de point")
     return HttpResponse(dumps(data))
 
+
 def devise_code(request):
     """ Appel AJAX :
     input : devise
@@ -783,6 +890,7 @@ def devise_code(request):
         data['taux_euro'] = taux[0].taux
     return HttpResponse(dumps(data))
 
+
 def add_remun(request, dossier, type_remun):
     dossier = get_object_or_404(dae.Dossier, pk=dossier)
     type_remun = get_object_or_404(rh.TypeRemuneration, pk=type_remun)
@@ -792,13 +900,15 @@ def add_remun(request, dossier, type_remun):
     return render_to_response('dae/embauche-remun.html', dict(dossier=dossier),
                               RequestContext(request))
 
+
 def salaire(request, implantation, devise, classement):
     if not devise or not classement:
         raise Http404
 
     taux = rh.TauxChange.objects.filter(devise=devise).order_by('-annee')
-    vp = rh.ValeurPoint.objects.filter(implantation=implantation, devise=devise) \
-                               .order_by('-annee')
+    vp = rh.ValeurPoint.objects \
+            .filter(implantation=implantation, devise=devise) \
+            .order_by('-annee')
 
     if vp.count() == 0:
         raise Exception(u"pas de valeur de point pour le couple\
@@ -816,6 +926,7 @@ def salaire(request, implantation, devise, classement):
 
     return HttpResponse(dumps(data))
 
+
 def liste_valeurs_point(request):
     """ Appel AJAX :
     input : implantation_id
@@ -825,15 +936,30 @@ def liste_valeurs_point(request):
     params = getattr(request, method, [])
     data = []
     annee_courante = datetime.datetime.now().year
-    if 'implantation_id' in params and params.get('implantation_id') is not u"":
+    if 'implantation_id' in params \
+       and params.get('implantation_id') is not u"":
         implantation_id = params.get('implantation_id')
-        preselectionne = rh.ValeurPoint.objects.filter(implantation=implantation_id, annee__in=(annee_courante,)).order_by("-annee")
+        preselectionne = rh.ValeurPoint.objects \
+                .filter(implantation=implantation_id, annee=annee_courante) \
+                .order_by("-annee")
         for o in preselectionne:
-            data.append({'id' : o.id, 'label' : o.__unicode__(), 'devise' : o.devise_id, 'suggestion' : True})
+            data.append({
+                'id': o.id,
+                'label': o.__unicode__(),
+                'devise': o.devise_id,
+                'suggestion': True
+            })
     else:
         preselectionne = rh.ValeurPoint.objects.none()
 
-    liste_complete = rh.ValeurPoint.objects.filter(annee__in=(annee_courante,)).order_by("-annee")
+    liste_complete = rh.ValeurPoint.objects \
+            .filter(annee__in=(annee_courante,)) \
+            .order_by("-annee")
     for o in liste_complete.exclude(id__in=[p.id for p in preselectionne]):
-        data.append({'id' : o.id, 'label' : o.__unicode__(), 'devise' : o.devise_id, 'suggestion' : False})
+        data.append({
+            'id': o.id,
+            'label': o.__unicode__(),
+            'devise': o.devise_id,
+            'suggestion': False
+        })
     return HttpResponse(dumps(data, indent=4))
index 4bcbb6d..366c245 100644 (file)
@@ -13,7 +13,6 @@ And to activate the app index dashboard::
 """
 
 from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse
 
 from admin_tools.dashboard import modules, Dashboard, AppIndexDashboard
 from admin_tools.utils import get_admin_site_name
@@ -24,7 +23,6 @@ class CustomIndexDashboard(Dashboard):
     Custom index dashboard for SIGMA.
     """
     def init_with_context(self, context):
-        site_name = get_admin_site_name(context)
 
         # append an app list module for "Applications"
         self.children.append(modules.AppList(
index 2f7fff2..394da7a 100644 (file)
@@ -398,14 +398,15 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
 
     def _dae(self, d):
         apercu_link = ""
-        if dae.ImportDossier.objects.filter(rh=d).exists():
-            dae_id = dae.ImportDossier.objects.get(rh=d).dae_id
+        dossiers_dae = d.dossiers_dae.all()
+        if len(dossiers_dae) > 0:
+            dossier_dae = dossiers_dae[0]
             apercu_link = u"""<a title="Aperçu du dossier"
                                  onclick="return showAddAnotherPopup(this);"
                                  href='%s'>
                                  <img src="%simg/loupe.png" />
                                  </a>""" % \
-                    (reverse('embauche_consulter', args=(dae_id,)),
+                    (reverse('embauche_consulter', args=(dossier_dae.id,)),
                      settings.STATIC_URL,
                      )
         return apercu_link
@@ -814,16 +815,15 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
 
     def _dae(self, poste):
         apercu_link = ""
-        if dae.ImportPoste.objects.filter(rh=poste).exists():
-            dae_id = dae.ImportPoste.objects.get(rh=poste).dae_id
-            apercu_link = u"""<a title="Aperçu du dossier"
-                                 onclick="return showAddAnotherPopup(this);"
-                                 href='%s'>
-                                 <img src="%simg/loupe.png" />
-                                 </a>""" % \
-                    (reverse('poste_consulter', args=("dae-%s" % dae_id,)),
-                     settings.STATIC_URL,
-                     )
+        postes_dae = poste.postes_dae.all()
+        if len(postes_dae) > 0:
+            poste_dae = postes_dae[0]
+            apercu_link = \
+                    u'<a title="Aperçu du dossier" href="%s" ' \
+                    u'onclick="return showAddAnotherPopup(this);">' \
+                    u'<img src="%simg/loupe.png" /></a>' % (reverse(
+                        'poste_consulter', args=("dae-%s" % poste_dae.id,)
+                    ), settings.STATIC_URL)
         return apercu_link
     _dae.allow_tags = True
     _dae.short_description = u"DAE"
index b142455..5df0321 100644 (file)
@@ -7,13 +7,6 @@
         Ajouter Dossier
     </a>
   </li>
-  {% comment %}
-  <li>
-    <a href="{% url importer_dae %}" class="addlink">
-        Importer une DAE
-    </a>
-  </li>
-  {% endcomment %}
 {% endblock %}
 
 {% block search %}
index cc4769b..e1fb1a9 100644 (file)
         <li class="{% menu_actif request '^embauches_finalisees$' %}">
           <a href="{% url embauches_finalisees %}">Embauches finalisées</a>
         </li>
-        {% if request.user|peut_importer %}
-        <li>
-          <a href="{% url admin:dae_dossierfinalise_changelist %}">Importation des embauches</a>
-        </li>
-        {% endif %}
-        {% if request.user|peut_importer %}
-        <li>
-          <a href="{% url admin:dae_postefinalise_changelist %}">Importation des postes</a>
-        </li>
-        {% endif %}
     </ul>
-    </li>
-    {% endif %}
+  </li>
+  {% endif %}
     
   {% if perms.rh %}
   <li>