merge master
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 30 May 2012 17:57:36 +0000 (13:57 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 30 May 2012 17:57:36 +0000 (13:57 -0400)
34 files changed:
.gitignore
buildout.cfg
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_consulter.html
project/dae/templates/dae/embauche_importer.html [new file with mode: 0644]
project/dae/templates/dae/embauches_finalisees.html
project/dae/templates/dae/poste_consulter.html
project/dae/templates/dae/poste_importer.html [new file with mode: 0644]
project/dae/urls.py
project/dae/views.py
project/dashboard.py
project/legacy/management/commands/rh_import_legacy.py
project/recrutement/admin.py
project/recrutement/permissions.py
project/recrutement/workflow.py
project/rh/admin.py
project/rh/catalogues.py
project/rh/masse_salariale.py
project/rh/migrations/0027_auto__del_familleemploi__add_responsableimplantationproxy__add_categor.py [new file with mode: 0644]
project/rh/migrations/0028_auto__add_familleprofessionnelle__add_field_typeposte_famille_professi.py [new file with mode: 0644]
project/rh/models.py
project/rh/templates/admin/rh/dossier/change_list.html
project/rh/templates/rh/include/employe.html
project/rh/templates/rh/rapports/postes_modelisation.html
project/rh/urls.py
project/rh/views.py
project/templates/menu.html
versions.cfg [new file with mode: 0644]

index cb060fe..4f906f0 100644 (file)
@@ -32,8 +32,4 @@ tmp
 
 # extra
 project/media_prive/*
-<<<<<<< HEAD
 project/static/*
-=======
-project/static
->>>>>>> master
index 97f12f0..a11dcad 100644 (file)
@@ -1,8 +1,10 @@
 [buildout]
-newest = false
+extends = versions.cfg
+extensions = buildout-versions
+buildout_versions_file = versions.cfg
+versions = versions
 unzip = true
 parts = django
-versions = versions
 
 find-links = http://pypi.auf.org/simple/auf.recipe.django/
     http://pypi.auf.org/simple/auf.django.skin/
@@ -21,51 +23,28 @@ eggs =
     django
     south
     django-admin-tools
+    django-ajax-selects
+    django-alphafilter
+    django-form-utils
+    django-qbe
+    django-reversion
+    django-sendfile
+    django-simple-captcha
     django-tinymce
-    auf.django.skin
-    auf.django.workflow
+    django-urldecorators
     auf.django.admingroup
-    auf.django.emploi
     auf.django.auth
+    auf.django.emploi
+    auf.django.metadata
     auf.django.permissions
     auf.django.references
-    auf.django.emploi
+    auf.django.skin
+    auf.django.workflow
     auf.recipe.django
-    django-reversion
-    simplejson
-    django-ajax-selects
-    django-form-utils
-    django-tinymce
-    django-simple-captcha
-    auf.django.metadata
-    django-alphafilter
-    django-sendfile
-    django-qbe
-    django-urldecorators
-    pygraphviz
     odfpy
     django-picklefield
-
-[versions]
-django-admin-tools = 0.4.1
-django = 1.3.1
-south = 0.7
-auf.django.skin = 1.5
-auf.django.auth = 0.5.5dev
-auf.django.emploi = 1.0dev
-auf.django.metadata = 0.6dev
-auf.django.permissions = 0.1
-auf.django.references = 0.7
-auf.django.workflow = 0.15dev
-django-reversion = 1.3.3
-django-ajax-selects = 1.1.4
-django-alphafilter = 0.5.3auf4
-django-sendfile = 0.2.1
-django-alphafilter = 0.5.3auf4
-django-urldecorators = 0.3
-pygraphviz = 0.36
-odfpy = 0.9.4
-django-picklefield = 0.2.1
+    pygraphviz
+    simplejson
 
 [django]
 recipe = auf.recipe.django
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..9cfb165 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.categorie_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,30 @@ 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()
-        
+class DAEFinaliseesSearchForm(forms.Form):
+    q = forms.CharField(
+        label='Recherche', required=False,
+        widget=forms.TextInput(attrs={'size': 40})
+    )
+    importees = forms.ChoiceField(
+        label='Importation', required=False, choices=(
+            ('', ''),
+            ('oui', 'DAE importées seulement'),
+            ('non', 'DAE non-importées seulement'),
+        )
+    )
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..27233c9 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,92 @@ 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.
+        """
+        dans_rh = self.dans_rh()
+        poste_rh = 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_fct_min
+        poste_rh.indemn_max = self.indemn_fct_max
+        poste_rh.autre_min = \
+                self.indemn_expat_min + self.charges_patronales_min + \
+                self.autre_min
+        poste_rh.autre_max = \
+                self.indemn_expat_max + self.charges_patronales_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
+        if not dans_rh:
+            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 +207,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 +215,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 +240,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 +301,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 +321,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 +358,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 +370,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 +408,7 @@ GENRE_CHOICES = (
     ('f', 'Femme'),
 )
 
+
 class Employe(AUFMetadata):
 
     # Modèle existant
@@ -308,6 +421,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 +454,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 +484,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 +505,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 +522,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 +577,138 @@ 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.contrat_date_debut
+        dossier_rh.date_fin = self.contrat_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
+            )
+
+        for contrat in self.dae_contrats.all():
+            contrat_rh = dossier_rh.rh_contrats.create(
+                type_contrat=self.type_contrat,
+                date_debut=self.contrat_date_debut,
+                date_fin=self.contrat_date_fin,
+            )
+            contrat_rh.fichier.save(
+                os.path.basename(contrat.fichier.name), contrat.fichier
+            )
+
+        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
+            )
+
+        if self.dae_numerisee:
+            dae_numerisee_rh = dossier_rh.rh_dossierpieces.create(
+                nom=u'DAE numérisée'
+            )
+            dae_numerisee_rh.fichier.save(
+                os.path.basename(self.dae_numerisee.name),
+                self.dae_numerisee
+            )
+
+        # 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 +721,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 +730,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 +744,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 +771,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='+')
index 3b8337e..2dc4e2f 100644 (file)
@@ -16,6 +16,9 @@
 {% if dossier|est_editable:request.user %}
 <a class="droite bouton-action" href="{% url embauche dossier.poste.key dossier.id %}">Modifier</a>
 {% endif %}
+{% if perms.rh.change_dossier and not dossier.dossier_rh %}
+<a class="droite bouton-action" href="{% url embauche_importer dossier.id %}">Importer</a>
+{% endif %}
 <div class="visualClear"></div>
 
 <h2 class="section">SECTION 1 - POSTE</h2>
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..9ed6f0b 100644 (file)
 {% block main %}
 <h1>Liste des demandes d'autorisation d'engagement finalisées</h1>
 
-<table class="listing tablesorter">
-  <thead>
-    <tr>
-      {% sort_header "region" "Région" %}
-      {% sort_header "implantation" "Implantation" %}
-      {% sort_header "poste" "Poste" %}
-      {% sort_header "personne" "Personne" %}
-      {% sort_header "debut_contrat" "Début du contrat" %}
-      {% sort_header "fin_contrat" "Fin du contrat" %}
-    </tr>
-  </thead>
-  <tbody>
-    {% for dossier in embauches.object_list %}
-    <tr>
-      <td>{{ dossier.poste.implantation|region_ou_service }}</td>
-      <td>{{ dossier.poste.implantation }}</td>
-      <td><a href="{% url embauche_consulter dossier.id %}">{{ dossier.poste.nom }}</a></td>
-      <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>
-    </tr>
-    {% endfor %}
-  </tbody>
-</table>
-{% pagination embauches %}
+<form>
+  <table>
+    {{ search_form }}
+    <tr><td></td><td><input type="submit" value="Recherche"></td></tr>
+</form>
+
+<form method="post">
+  <table class="listing tablesorter">
+    <thead>
+      <tr>
+        <th></th>
+        {% sort_header "region" "Région" %}
+        {% sort_header "implantation" "Implantation" %}
+        {% sort_header "poste" "Poste" %}
+        {% sort_header "personne" "Personne" %}
+        {% sort_header "debut_contrat" "Début du contrat" %}
+        {% sort_header "fin_contrat" "Fin du contrat" %}
+        <th></th>
+      </tr>
+    </thead>
+    <tbody>
+      {% for dossier in embauches.object_list %}
+      <tr>
+        <td><input type="checkbox" name="ids" value="{{ dossier.id }}"></td>
+        <td>{{ dossier.poste.implantation|region_ou_service }}</td>
+        <td>{{ dossier.poste.implantation }}</td>
+        <td><a href="{% url embauche_consulter dossier.id %}">{{ dossier.poste.nom }}</a></td>
+        <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>
+  </table>
+  {% pagination embauches %}
+  <input type="submit" name="supprimer", value="Supprimer">
+</form>
 {% endblock %}
index 085975b..f698560 100644 (file)
 
 <h1 class="gauche">Demande d'autorisation de création de poste</h1>
 <a class="droite bouton-action" href="#" onclick="window.print(); return false;">Impression</a>
-{% if poste|est_editable:request.user %}<a class="droite bouton-action" href="{% url poste poste.key %}">Modifier</a>{% endif %}
+{% if poste|est_editable:request.user %}
+<a class="droite bouton-action" href="{% url poste poste.key %}">Modifier</a>
+{% endif %}
+{% if not poste.id_rh and perms.rh.change_poste and perms.rh.add_poste %}
+<a class="droite bouton-action" href="{% url poste_importer poste.id %}">Importer</a>
+{% endif %}
 <div class="visualClear"></div>
 
 {% include "dae/poste_resume.html" %}
diff --git a/project/dae/templates/dae/poste_importer.html b/project/dae/templates/dae/poste_importer.html
new file mode 100644 (file)
index 0000000..775214a
--- /dev/null
@@ -0,0 +1,17 @@
+{% 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'un poste</h1>
+
+<p>Vous vous apprêtez à importer le poste <strong>{{ poste }}</strong> dans
+le système RH.</p>
+
+<form method="post">
+  <input type="submit" name="confirmer" value="Continuer">
+  <input type="submit" value="Annuler">
+</form>
+{% endblock %}
index 7384b2e..951662f 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,59 @@ 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/importer/(\d+)$', 'poste_importer',
+        name='poste_importer'),
     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..1cefbfa 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, DAEFinaliseesSearchForm
+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,44 @@ 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)
+    )
+
+
+def poste_importer(request, id):
+    poste_dae = get_object_or_404(dae.Poste, id=id)
+    if request.method == 'POST':
+        if 'confirmer' in request.POST:
+            poste_rh = poste_dae.importer_dans_rh()
+            return redirect('admin:rh_poste_change', poste_rh.id)
+        else:
+            return redirect('poste_consulter', 'dae-' + id)
+    else:
+        return render_to_response('dae/poste_importer.html', {
+            'poste': poste_dae
+        }, RequestContext(request))
+
 
 @dae_groupe_requis
 @poste_dans_ma_region_ou_service
@@ -110,19 +139,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 +168,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 +191,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 +208,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 +244,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 +256,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 +284,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 +311,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 +341,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 +358,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 +385,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 +407,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 +419,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 +445,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,23 +453,65 @@ 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."""
+
+    ### POST
+
+    if request.method == 'POST':
+        if 'supprimer' in request.POST:
+            ids = request.POST.getlist('ids')
+            dossiers = dae.Dossier.objects.filter(id__in=ids)
+            count = dossiers.count()
+            if count > 0:
+                dossiers.delete()
+                messages.success(request, u'%d dossiers supprimés' % count)
+        return redirect(request.get_full_path())
+
+    ### GET
+
     embauches = dae.Dossier.objects.ma_region_ou_service(request.user) \
             .filter(etat=DOSSIER_ETAT_FINALISE)
 
+    # Recherche
+    search_form = DAEFinaliseesSearchForm(request.GET)
+    if search_form.is_valid():
+        q = search_form.cleaned_data.get('q').strip()
+        importees = search_form.cleaned_data.get('importees')
+        if q:
+            criteria = [
+                Q(poste__implantation__region__nom__icontains=word) |
+                Q(poste__implantation__region__code=word) |
+                Q(poste__implantation__nom__icontains=word) |
+                Q(poste__nom__icontains=word) |
+                Q(employe__nom__icontains=word) |
+                Q(employe__prenom__icontains=word)
+                for word in q.split()
+            ]
+            embauches = embauches.filter(*criteria)
+        if importees == 'oui':
+            embauches = embauches.exclude(dossier_rh=None)
+        elif importees == 'non':
+            embauches = embauches.filter(dossier_rh=None)
+
     # Tri
     tri = request.GET.get('tri', None)
     if tri and tri.startswith('-'):
@@ -383,7 +520,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':
@@ -404,9 +543,11 @@ def embauches_finalisees(request):
         page = paginator.page(1)
 
     return render_to_response('dae/embauches_finalisees.html', {
-        'embauches': page
+        'embauches': page,
+        'search_form': search_form
     }, RequestContext(request))
 
+
 def employe(request, key):
     """ Récupération AJAX de l'employé pour la page d'embauche. """
     data = dict(employe=key)
@@ -427,7 +568,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 +580,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 +592,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 +612,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 +633,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 +641,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 +659,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 +729,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 +751,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 +766,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 +781,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 +797,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 +813,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 +828,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 +839,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 +904,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 +921,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 +941,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 +951,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\
@@ -808,6 +969,8 @@ def salaire(request, implantation, devise, classement):
         raise Exception(u"Pas de taux pour la devise %s" % devise)
 
     classement = get_object_or_404(rh.Classement, pk=classement)
+    if classement.coefficient is None:
+        raise Http404
     taux, vp = taux[0].taux, vp[0].valeur
 
     salaire_euro = round(vp * classement.coefficient * taux, 2)
@@ -816,6 +979,7 @@ def salaire(request, implantation, devise, classement):
 
     return HttpResponse(dumps(data))
 
+
 def liste_valeurs_point(request):
     """ Appel AJAX :
     input : implantation_id
@@ -825,15 +989,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..84eeba9 100644 (file)
@@ -12,11 +12,8 @@ And to activate the app index dashboard::
     ADMIN_TOOLS_APP_INDEX_DASHBOARD = 'SIGMA.dashboard.CustomAppIndexDashboard'
 """
 
-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
+from django.utils.translation import ugettext_lazy as _
 
 
 class CustomIndexDashboard(Dashboard):
@@ -24,20 +21,19 @@ 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(
             _('Applications'),
             models=(
-            'project.dae.models.*',
-            'project.recrutement.models.*',
-            'project.rh.models.AyantDroit',
-            'project.rh.models.Dossier',
-            'project.rh.models.DossierInactif',
-            'project.rh.models.Employe',
-            'project.rh.models.EmployeInactif',
-            'project.rh.models.Poste',
+                'project.dae.models.*',
+                'project.recrutement.models.*',
+                'project.rh.models.AyantDroit',
+                'project.rh.models.Dossier',
+                'project.rh.models.DossierInactif',
+                'project.rh.models.Employe',
+                'project.rh.models.EmployeInactif',
+                'project.rh.models.Poste',
             ),
         ))
 
@@ -45,19 +41,20 @@ class CustomIndexDashboard(Dashboard):
         self.children.append(modules.AppList(
             _('Configuration'),
             models=(
-            'project.rh.models.Classement',
-            'project.rh.models.Devise',
-            'project.rh.models.FamilleEmploi',
-            'project.rh.models.OrganismeBstg',
-            'project.rh.models.Responsable',
-            'project.rh.models.Service',
-            'project.rh.models.Statut',
-            'project.rh.models.TauxChange',
-            'project.rh.models.TypeContrat',
-            'project.rh.models.TypePoste',
-            'project.rh.models.TypeRevalorisation',
-            'project.rh.models.TypeRemuneration',
-            'project.rh.models.ValeurPoint',
+                'project.rh.models.Classement',
+                'project.rh.models.Devise',
+                'project.rh.models.CategorieEmploi',
+                'project.rh.models.FamilleProfessionnelle',
+                'project.rh.models.OrganismeBstg',
+                'project.rh.models.Responsable',
+                'project.rh.models.Service',
+                'project.rh.models.Statut',
+                'project.rh.models.TauxChange',
+                'project.rh.models.TypeContrat',
+                'project.rh.models.TypePoste',
+                'project.rh.models.TypeRevalorisation',
+                'project.rh.models.TypeRemuneration',
+                'project.rh.models.ValeurPoint',
             ),
             exclude=('django.contrib.*',),
         ))
@@ -66,7 +63,7 @@ class CustomIndexDashboard(Dashboard):
         self.children.append(modules.AppList(
             _(u'Inter-systèmes'),
             models=(
-            'project.rh.models.ResponsableImplantation',
+                'project.rh.models.ResponsableImplantation',
             ),
         ))
 
@@ -74,13 +71,10 @@ class CustomIndexDashboard(Dashboard):
         self.children.append(modules.AppList(
             _('Administration'),
             models=(
-            'django.contrib.*',
+                'django.contrib.*',
             ),
         ))
 
-        # append a recent actions module
-        #self.children.append(modules.RecentActions(_('Recent Actions'), 5))
-
 
 class CustomAppIndexDashboard(AppIndexDashboard):
     """
@@ -100,12 +94,7 @@ class CustomAppIndexDashboard(AppIndexDashboard):
         if self.app_title != 'Rh':
             # append a model list module and a recent actions module
             self.children += [
-                modules.ModelList(self.app_title,self.models),
-                #modules.RecentActions(
-                #    _('Recent Actions'),
-                #    include_list=self.get_app_content_types(),
-                #    limit=5
-                #)
+                modules.ModelList(self.app_title, self.models),
             ]
 
             return
@@ -114,12 +103,12 @@ class CustomAppIndexDashboard(AppIndexDashboard):
         self.children.append(modules.AppList(
             _('Application'),
             models=(
-            'project.rh.models.AyantDroit',
-            'project.rh.models.Dossier',
-            'project.rh.models.DossierInactif',
-            'project.rh.models.Employe',
-            'project.rh.models.EmployeInactif',
-            'project.rh.models.Poste',
+                'project.rh.models.AyantDroit',
+                'project.rh.models.Dossier',
+                'project.rh.models.DossierInactif',
+                'project.rh.models.Employe',
+                'project.rh.models.EmployeInactif',
+                'project.rh.models.Poste',
             ),
         ))
 
@@ -127,19 +116,20 @@ class CustomAppIndexDashboard(AppIndexDashboard):
         self.children.append(modules.AppList(
             _('Configuration'),
             models=(
-            'project.rh.models.Classement',
-            'project.rh.models.Devise',
-            'project.rh.models.FamilleEmploi',
-            'project.rh.models.OrganismeBstg',
-            'project.rh.models.Responsable',
-            'project.rh.models.Service',
-            'project.rh.models.Statut',
-            'project.rh.models.TauxChange',
-            'project.rh.models.TypeContrat',
-            'project.rh.models.TypePoste',
-            'project.rh.models.TypeRevalorisation',
-            'project.rh.models.TypeRemuneration',
-            'project.rh.models.ValeurPoint',
+                'project.rh.models.Classement',
+                'project.rh.models.Devise',
+                'project.rh.models.CategorieEmploi',
+                'project.rh.models.FamilleProfessionnelle',
+                'project.rh.models.OrganismeBstg',
+                'project.rh.models.Responsable',
+                'project.rh.models.Service',
+                'project.rh.models.Statut',
+                'project.rh.models.TauxChange',
+                'project.rh.models.TypeContrat',
+                'project.rh.models.TypePoste',
+                'project.rh.models.TypeRevalorisation',
+                'project.rh.models.TypeRemuneration',
+                'project.rh.models.ValeurPoint',
             ),
         ))
 
@@ -147,13 +137,6 @@ class CustomAppIndexDashboard(AppIndexDashboard):
         self.children.append(modules.AppList(
             _(u'Inter-systèmes'),
             models=(
-            'project.rh.models.ResponsableImplantation',
+                'project.rh.models.ResponsableImplantation',
             ),
         ))
-
-        # append a recent actions module
-        #self.children.append(modules.RecentActions(
-        #    _('Recent Actions'),
-        #    include_list=self.get_app_content_types(),
-        #    limit=5
-        #))
index e53bd49..1706bd1 100644 (file)
@@ -115,7 +115,7 @@ def sync_familleemploi():
     cursor = connection.cursor()
     cursor.execute('TRUNCATE rh_familleemploi')
     for famille in legacy.FamilleEmploi.objects.all():
-        rh.FamilleEmploi.objects.create(
+        rh.CategorieEmploi.objects.create(
             id=famille.id_famille_emploi,
             nom=famille.famille_emploi,
         )
index a36f351..8551126 100644 (file)
@@ -17,7 +17,8 @@ from recrutement.models import *
 from recrutement.workflow import grp_drh_recrutement, grp_drh2_recrutement, \
         grp_directeurs_bureau_recrutement, \
         grp_administrateurs_recrutement, \
-        grp_correspondants_rh_recrutement
+        grp_correspondants_rh_recrutement, \
+        grp_haute_direction_recrutement
 
 from recrutement.forms import *
 
@@ -77,7 +78,8 @@ class OffreEmploiAdmin(VersionAdmin):
             region_field = form.base_fields['region']
 
         if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes:
+            grp_drh2_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             region_field.queryset = Region.objects.all()
         else:
             region_field.queryset = Region.objects.\
@@ -90,7 +92,8 @@ class OffreEmploiAdmin(VersionAdmin):
             poste_field = form.base_fields['poste']
 
         if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes:
+            grp_drh2_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             poste_field.queryset = rh.Poste.objects.all()
         else:
             poste_field.queryset = rh.Poste.objects.\
@@ -104,7 +107,8 @@ class OffreEmploiAdmin(VersionAdmin):
             bureau_field = form.base_fields['bureau']
 
         if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes:
+            grp_drh2_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             bureau_field.queryset = Bureau.objects.all()
         else:
             bureau_field.queryset = Bureau.objects.\
@@ -117,7 +121,8 @@ class OffreEmploiAdmin(VersionAdmin):
         qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes:
+            grp_drh2_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return qs
 
         if grp_directeurs_bureau_recrutement in user_groupes or \
@@ -141,7 +146,8 @@ class OffreEmploiAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False  
 
@@ -151,7 +157,8 @@ class OffreEmploiAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -161,7 +168,8 @@ class OffreEmploiAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -213,7 +221,8 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
 
         if obj is not None:
@@ -384,7 +393,8 @@ class CandidatAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -395,7 +405,8 @@ class CandidatAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -406,7 +417,8 @@ class CandidatAdmin(VersionAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
         return False
 
@@ -427,7 +439,8 @@ class CandidatAdmin(VersionAdmin):
 
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes:
+            grp_drh2_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return qs
 
         if grp_directeurs_bureau_recrutement in user_groupes or \
@@ -484,7 +497,8 @@ class ProxyCandidatAdmin(CandidatAdmin):
             grp_drh_recrutement in user_groupes or \
             grp_drh2_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return True
 
         if obj is not None:
@@ -533,7 +547,8 @@ class EvaluateurAdmin(VersionAdmin):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
                 grp_drh_recrutement in user_groupes or \
-                grp_drh2_recrutement in user_groupes:
+                grp_drh2_recrutement in user_groupes or \
+                grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -541,7 +556,8 @@ class EvaluateurAdmin(VersionAdmin):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
                 grp_drh_recrutement in user_groupes or \
-                grp_drh2_recrutement in user_groupes:
+                grp_drh2_recrutement in user_groupes or \
+                grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -549,7 +565,8 @@ class EvaluateurAdmin(VersionAdmin):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
                 grp_drh_recrutement in user_groupes or \
-                grp_drh2_recrutement in user_groupes:
+                grp_drh2_recrutement in user_groupes or \
+                grp_haute_direction_recrutement in user_groupes:
             return True
         return False   
 
@@ -653,7 +670,8 @@ class CandidatEvaluationAdmin(admin.ModelAdmin):
             grp_drh2_recrutement in user_groupes or \
             grp_correspondants_rh_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             is_recrutement = True
         else:
             is_recrutement = False
@@ -672,7 +690,8 @@ class CandidatEvaluationAdmin(admin.ModelAdmin):
             grp_drh2_recrutement in user_groupes or \
             grp_correspondants_rh_recrutement in user_groupes or \
             grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            grp_haute_direction_recrutement in user_groupes:
             return qs
 
         evaluateur = Evaluateur.objects.get(user=request.user) 
index 5e17b03..510734c 100644 (file)
@@ -1,21 +1,11 @@
 # -*- encoding: utf-8 -*-
 from django.contrib.auth.models import Group
 
-from project.lib import safe_create_groupe
-
-# Logique AUF des permissions
-
-grp_drh = safe_create_groupe(id=4)  # DRH
-grp_evaluateurs = safe_create_groupe(id=13)    # Évaluateurs
-
-recrutement_groupes = (
-    grp_drh,
-    grp_evaluateurs,
-)
+from recrutement.workflow import recrutement_groupes
 
 def user_in_recrutement_groupes(user):
     """
-    Teste si un user Django fait parti des groupes prédéfinis de DAE.
+    Teste si un user Django fait parti des groupes prédéfinis de recrutement.
     """
     if user.is_superuser:
         return True
index 6ee15b8..f0ae148 100644 (file)
@@ -2,7 +2,7 @@
 
 from rh.groups import safe_create_groupe
 from rh.groups import CORRESPONDANT_RH, DRH_NIVEAU_1, DRH_NIVEAU_2, \
-        DIRECTEUR_DE_BUREAU, ADMINISTRATEURS
+        DIRECTEUR_DE_BUREAU, ADMINISTRATEURS, HAUTE_DIRECTION
 
 grp_evaluateurs_recrutement = safe_create_groupe(name='Évaluateurs')
 grp_correspondants_rh_recrutement = safe_create_groupe(name=CORRESPONDANT_RH)
@@ -11,6 +11,7 @@ grp_drh2_recrutement = safe_create_groupe(name=DRH_NIVEAU_2)
 grp_directeurs_bureau_recrutement = \
     safe_create_groupe(name=DIRECTEUR_DE_BUREAU)
 grp_administrateurs_recrutement = safe_create_groupe(name=ADMINISTRATEURS)
+grp_haute_direction_recrutement = safe_create_groupe(name=HAUTE_DIRECTION)
 
 recrutement_groupes = (
     grp_evaluateurs_recrutement,
@@ -19,4 +20,5 @@ recrutement_groupes = (
     grp_drh2_recrutement,
     grp_directeurs_bureau_recrutement,
     grp_administrateurs_recrutement,
+    grp_haute_direction_recrutement,
 )
index 2f7fff2..8b885c8 100644 (file)
@@ -2,24 +2,25 @@
 
 import datetime
 
+from ajax_select import make_ajax_form
+from auf.django.metadata.admin import \
+        AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, \
+        AUF_METADATA_READONLY_FIELDS
 from django.core.urlresolvers import reverse
 from django.contrib import admin
 from django.conf import settings
 from django.db.models import Q
 from django.template.defaultfilters import date
-from ajax_select import make_ajax_form
-from auf.django.metadata.admin import AUFMetadataAdminMixin, \
-                                      AUFMetadataInlineAdminMixin, \
-                                      AUF_METADATA_READONLY_FIELDS
-from forms import ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect, \
-DossierForm
-from dae import models as dae
+
+import auf.django.references.models as ref
+import models as rh
+from forms import \
+        ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect, DossierForm
 from dae.utils import get_employe_from_user
 from change_list import ChangeList
 from groups import grp_correspondants_rh
 from decorators import in_drh_or_admin
-import models as rh
-import auf.django.references.models as ref
+
 
 class ArchiveMixin(object):
     """
@@ -38,6 +39,7 @@ class ArchiveMixin(object):
     _archive.short_description = u'Archivé'
     _archive.admin_order_field = 'archive'
 
+
 class RegionProxy(ref.Region):
     """ Proxy utilisé pour les organigrammes par région """
     class Meta:
@@ -321,7 +323,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
     list_filter = (
         'poste__implantation__region',
         'poste__implantation',
-        'poste__type_poste__famille_emploi',
+        'poste__type_poste__categorie_emploi',
         'poste__type_poste',
         'rh_contrats__type_contrat',
         'principal',
@@ -363,7 +365,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
             'poste__implantation__region__id__exact',
             'poste__implantation__id__exact',
             'poste__type_poste__id__exact',
-            'poste__type_poste__famille_emploi__id__exact',
+            'poste__type_poste__categorie_emploi__id__exact',
             'rh_contrats__type_contrat__id__exact',
             'principal__exact',
             'principal__isnull',
@@ -398,14 +400,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
@@ -628,15 +631,28 @@ class EmployeProxyAdmin(EmployeAdmin):
 
     def _organigramme(self, obj):
         l = []
-        for d in rh.Dossier.objects.filter((Q(date_fin__gt=datetime.date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=datetime.date.today()) | Q(date_debut=None)) ).filter(employe=obj.id).all():
-            organigramme = u"""Organigramme, niveau: <input type="text" id="level_%s" style="width:30px;height:15px;" /> <input type="button" value="Générer" onclick="window.location='%s'+document.getElementById('level_%s').value" />""" % \
-                    (d.poste.id, reverse('rho_employe_sans_niveau', args=(d.poste.id,)), d.poste.id)
-            link = u"""<li>%s - [%s] %s : %s</li>""" % \
-                 (d.date_debut.year,
-                 d.poste.id,
-                 d.poste.nom,
-                 organigramme
-                 )
+        for d in rh.Dossier.objects.filter(
+            Q(date_fin__gt=datetime.date.today()) | Q(date_fin=None),
+            Q(date_debut__lt=datetime.date.today()) | Q(date_debut=None),
+            employe=obj.id
+        ):
+            organigramme = \
+                    u'Organigramme, niveau: ' \
+                    u'<input type="text" id="level_%s" ' \
+                    u'style="width:30px;height:15px;" /> ' \
+                    u'<input type="button" value="Générer" ' \
+                    u"""onclick="window.location='%s' + """ \
+                    u"""document.getElementById('level_%s').value" />""" % (
+                        d.poste.id,
+                        reverse('rho_employe_sans_niveau', args=(d.poste.id,)),
+                        d.poste.id
+                    )
+            link = u"""<li>%s - [%s] %s : %s</li>""" % (
+                    d.date_debut.year,
+                    d.poste.id,
+                    d.poste.nom,
+                    organigramme
+            )
             l.append(link)
         return "<ul>%s</ul>" % "\n".join(l)
 
@@ -652,7 +668,7 @@ class EmployePieceAdmin(admin.ModelAdmin):
     pass
 
 
-class FamilleEmploiAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
+class CategorieEmploiAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     list_display = ('nom', '_date_modification', 'user_modification', )
     inlines = (TypePosteInline,)
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
@@ -725,7 +741,8 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
         'implantation',
         'service',
         'type_poste',
-        'type_poste__famille_emploi',
+        'type_poste__categorie_emploi',
+        'type_poste__famille_professionnelle',
         'vacant',
         )
     list_display_links = ('_nom',)
@@ -784,21 +801,13 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
                PosteCommentaireInline, )
 
     def lookup_allowed(self, key, value):
-        if key in (
-            'date_debut__gte',
-            'date_debut__isnull',
-            'date_fin__lte',
-            'date_fin__isnull',
-            'implantation__region__id__exact',
-            'implantation__id__exact',
-            'type_poste__id__exact',
-            'type_poste__famille_emploi__id__exact',
-            'service__id__exact',
-            'service__isnull',
-            'vacant__exact',
-            'vacant__isnull',
-            ):
-            return True
+        return key in (
+            'date_debut__gte', 'date_debut__isnull', 'date_fin__lte',
+            'date_fin__isnull', 'implantation__region__id__exact',
+            'implantation__id__exact', 'type_poste__id__exact',
+            'type_poste__categorie_emploi__id__exact', 'service__id__exact',
+            'service__isnull', 'vacant__exact', 'vacant__isnull',
+        ) or super(PosteAdmin, self).lookup_allowed(key, value)
 
     def _apercu(self, poste):
         view_link = u"""<a onclick="return showAddAnotherPopup(this);"
@@ -814,16 +823,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"
@@ -858,8 +866,9 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
             responsable = ''
 
         try:
+            employe = obj.responsable.rh_dossiers.all()[0]
             employe_id = obj.responsable.rh_dossiers.all()[0].id
-            employe = u"""<br />
+            employe_html = u"""<br />
                     <a href="%s"
                        onclick="return showAddAnotherPopup(this)">
                        <img src="%simg/loupe.png"
@@ -871,9 +880,9 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
                      reverse('admin:rh_employe_change', args=(employe_id,)),
                      employe)
         except:
-            employe = ""
+            employe_html = ""
 
-        return "%s %s" % (responsable, employe)
+        return "%s %s" % (responsable, employe_html)
     _responsable.short_description = 'Responsable'
     _responsable.allow_tags = True
 
@@ -944,7 +953,8 @@ class RemunerationAdmin(admin.ModelAdmin):
 class ResponsableInline(admin.TabularInline):
     model = rh.ResponsableImplantation
     extra = 0
-    fk_name  = "implantation"
+    fk_name = "implantation"
+
 
 class ResponsableImplantationAdmin(admin.ModelAdmin):
     actions = None
@@ -963,8 +973,8 @@ class ResponsableImplantationAdmin(admin.ModelAdmin):
                     employe, u"sans dossier actif")
             else:
                 return employe
-        except Exception, e:
-            if obj.statut in (1, 2): # ouverte, ouverture imminente
+        except Exception:
+            if obj.statut in (1, 2):  # ouverte, ouverture imminente
                 css = "style='color: red;'"
             else:
                 css = ""
@@ -981,6 +991,7 @@ class ResponsableImplantationAdmin(admin.ModelAdmin):
     def has_delete_permission(self, request, obj=None):
         return False
 
+
 class ServiceAdmin(AUFMetadataAdminMixin, admin.ModelAdmin, ArchiveMixin):
     list_display = (
             'nom',
@@ -1001,6 +1012,7 @@ class ServiceAdmin(AUFMetadataAdminMixin, admin.ModelAdmin, ArchiveMixin):
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
+
 class ServiceProxyAdmin(ServiceAdmin):
     list_display = ('nom', '_organigramme', '_archive', )
     actions = None
@@ -1083,18 +1095,19 @@ class TypePosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     search_fields = ('nom', 'nom_feminin', )
     list_display = (
             'nom',
-            'famille_emploi',
+            'categorie_emploi',
             '_date_modification',
             'user_modification',
             )
-    list_filter = ('famille_emploi', )
+    list_filter = ('categorie_emploi', 'famille_professionnelle')
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': (
                 'nom',
                 'nom_feminin',
                 'is_responsable',
-                'famille_emploi',
+                'categorie_emploi',
+                'famille_professionnelle',
                 )}
             ),
         )
@@ -1106,7 +1119,8 @@ class TypePosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     _date_modification.admin_order_field = 'date_modification'
 
 
-class TypeRemunerationAdmin(AUFMetadataAdminMixin, admin.ModelAdmin, ArchiveMixin):
+class TypeRemunerationAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,
+                            ArchiveMixin):
     list_display = (
             'nom',
             'type_paiement',
@@ -1169,6 +1183,7 @@ class ValeurPointAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
         return obj.devise.nom
     _devise_nom.short_description = "Nom de la devise"
 
+
 class ImplantationProxyAdmin(admin.ModelAdmin):
     list_display = ('nom', '_organigramme')
     actions = None
@@ -1184,10 +1199,13 @@ class ImplantationProxyAdmin(admin.ModelAdmin):
         return in_drh_or_admin(request.user)
 
     def _organigramme(self, obj):
-        return """<a href="%s"><strong>Organigramme</strong></a>""" % (reverse('rho_implantation', args=(obj.id,)))
+        return '<a href="%s"><strong>Organigramme</strong></a>' % (
+            reverse('rho_implantation', args=(obj.id,))
+        )
     _organigramme.allow_tags = True
     _organigramme.short_description = "Organigramme"
 
+
 class RegionProxyAdmin(admin.ModelAdmin):
     list_display = ('nom', '_organigramme')
     actions = None
@@ -1203,23 +1221,26 @@ class RegionProxyAdmin(admin.ModelAdmin):
         return in_drh_or_admin(request.user)
 
     def _organigramme(self, obj):
-        return """<a href="%s"><strong>Organigramme</strong></a>""" % (reverse('rho_region', args=(obj.id,)))
+        return """<a href="%s"><strong>Organigramme</strong></a>""" % (
+            reverse('rho_region', args=(obj.id,))
+        )
     _organigramme.allow_tags = True
     _organigramme.short_description = "Organigramme"
 
 
-
-
 admin.site.register(rh.Classement, ClassementAdmin)
 admin.site.register(rh.Devise, DeviseAdmin)
 admin.site.register(rh.Dossier, DossierAdmin)
 admin.site.register(EmployeProxy, EmployeProxyAdmin)
 admin.site.register(ServiceProxy, ServiceProxyAdmin)
 admin.site.register(rh.Employe, EmployeAdmin)
-admin.site.register(rh.FamilleEmploi, FamilleEmploiAdmin)
+admin.site.register(rh.CategorieEmploi, CategorieEmploiAdmin)
+admin.site.register(rh.FamilleProfessionnelle)
 admin.site.register(rh.OrganismeBstg, OrganismeBstgAdmin)
 admin.site.register(rh.Poste, PosteAdmin)
-admin.site.register(rh.ResponsableImplantationProxy, ResponsableImplantationAdmin)
+admin.site.register(
+    rh.ResponsableImplantationProxy, ResponsableImplantationAdmin
+)
 admin.site.register(rh.Service, ServiceAdmin)
 admin.site.register(rh.Statut, StatutAdmin)
 admin.site.register(rh.TauxChange, TauxChangeAdmin)
index 48b9f01..9bdb674 100644 (file)
@@ -50,7 +50,7 @@ class Implantation(object):
 class TypePoste(object):
 
     def get_query(self,q,request):
-        f = Q(nom__icontains=q) | Q(nom_feminin__icontains=q) | Q(famille_emploi__nom__icontains=q)
+        f = Q(nom__icontains=q) | Q(nom_feminin__icontains=q) | Q(categorie_emploi__nom__icontains=q)
         typepostes = rh.TypePoste.objects.filter(f)
         return typepostes
 
index 2b47055..200fcb4 100644 (file)
@@ -291,25 +291,46 @@ class MasseSalariale():
             d.poste = p
             d.classement = p.classement_max
             d.point = p.valeur_point_max
+            if p.devise_max:
+                remunerations = [
+                    rh.Remuneration(
+                        montant=p.salaire_max, devise=p.devise_max,
+                        type=remuneration_base
+                    ),
+                    rh.Remuneration(
+                        montant=p.indemn_max, devise=p.devise_max,
+                        type=remuneration_indem
+                    ),
+                    rh.Remuneration(
+                        montant=p.autre_max, devise=p.devise_max,
+                        type=remuneration_charge
+                    )
+                ]
+            else:
+                remunerations = [
+                    rh.Remuneration(
+                        montant=0, devise=self.devise_base, type=type
+                    )
+                    for type in (
+                        remuneration_base, remuneration_indem,
+                        remuneration_charge
+                    )
+                ]
             contenu['p_%s' % p.id] = {
-                    'dossiers': set([d]),
-                    'remunerations': [
-                        rh.Remuneration(montant=p.salaire_max,
-                            devise=p.devise_max, type=remuneration_base),
-                        rh.Remuneration(montant=p.indemn_max,
-                            devise=p.devise_max, type=remuneration_indem),
-                        rh.Remuneration(montant=p.autre_max,
-                            devise=p.devise_max, type=remuneration_charge),
-                        ]
-                    }
+                'dossiers': set([d]),
+                'remunerations': remunerations
+            }
 
         for item in contenu.values():
             dossiers = item['dossiers']
             remuns = item['remunerations']
 
+            if not dossiers:
+                continue
+            dossier = list(dossiers)[0]
             for d in dossiers:
                 if d.principal:
-                    dossier = list(dossiers)[0]
+                    dossier = d
 
             regime = (float(dossier.regime_travail) / 100)
 
diff --git a/project/rh/migrations/0027_auto__del_familleemploi__add_responsableimplantationproxy__add_categor.py b/project/rh/migrations/0027_auto__del_familleemploi__add_responsableimplantationproxy__add_categor.py
new file mode 100644 (file)
index 0000000..02cb0c3
--- /dev/null
@@ -0,0 +1,603 @@
+# 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):
+        
+        # Deleting model 'FamilleEmploi'
+        db.rename_table('rh_familleemploi', 'rh_categorieemploi')
+
+        # Deleting field 'TypePoste.famille_emploi'
+        db.rename_column('rh_typeposte', 'famille_emploi', 'categorie_emploi')
+
+        # Deleting field 'ResponsableImplantation.supprime'
+        db.delete_column('rh_responsableimplantation', 'supprime')
+
+        # Deleting field 'ResponsableImplantation.user_creation'
+        db.delete_column('rh_responsableimplantation', 'user_creation')
+
+        # Deleting field 'ResponsableImplantation.user_modification'
+        db.delete_column('rh_responsableimplantation', 'user_modification')
+
+        # Deleting field 'ResponsableImplantation.date_modification'
+        db.delete_column('rh_responsableimplantation', 'date_modification')
+
+        # Deleting field 'ResponsableImplantation.date_creation'
+        db.delete_column('rh_responsableimplantation', 'date_creation')
+    
+    
+    def backwards(self, orm):
+        
+        # Adding model 'FamilleEmploi'
+        db.create_table('rh_familleemploi', (
+            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
+            ('supprime', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('user_creation', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['auth.User'], db_column='user_creation', blank=True)),
+            ('user_modification', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['auth.User'], db_column='user_modification', blank=True)),
+            ('date_modification', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+            ('date_creation', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('rh', ['FamilleEmploi'])
+
+        # Deleting model 'ResponsableImplantationProxy'
+        db.delete_table(u'ref_implantation')
+
+        # Deleting model 'CategorieEmploi'
+        db.delete_table('rh_categorieemploi')
+
+        # Adding field 'TypePoste.famille_emploi'
+        db.add_column('rh_typeposte', 'famille_emploi', self.gf('django.db.models.fields.related.ForeignKey')(default=0, related_name='+', db_column='famille_emploi', to=orm['rh.FamilleEmploi']), keep_default=False)
+
+        # Deleting field 'TypePoste.categorie_emploi'
+        db.delete_column('rh_typeposte', 'categorie_emploi')
+
+        # Adding field 'ResponsableImplantation.supprime'
+        db.add_column('rh_responsableimplantation', 'supprime', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False)
+
+        # Adding field 'ResponsableImplantation.user_creation'
+        db.add_column('rh_responsableimplantation', 'user_creation', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['auth.User'], db_column='user_creation', blank=True), keep_default=False)
+
+        # Adding field 'ResponsableImplantation.user_modification'
+        db.add_column('rh_responsableimplantation', 'user_modification', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['auth.User'], db_column='user_modification', blank=True), keep_default=False)
+
+        # Adding field 'ResponsableImplantation.date_modification'
+        db.add_column('rh_responsableimplantation', 'date_modification', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
+
+        # Adding field 'ResponsableImplantation.date_creation'
+        db.add_column('rh_responsableimplantation', 'date_creation', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
+
+        # Changing field 'ResponsableImplantation.implantation'
+        db.alter_column('rh_responsableimplantation', 'implantation', self.gf('django.db.models.fields.related.ForeignKey')(unique=True, db_column='implantation', to=orm['managedref.Implantation']))
+    
+    
+    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'})
+        },
+        '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.ayantdroit': {
+            'Meta': {'object_name': 'AyantDroit'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'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'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            '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']"})
+        },
+        'rh.ayantdroitcommentaire': {
+            'Meta': {'object_name': 'AyantDroitCommentaire'},
+            'ayant_droit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'ayant_droit'", 'to': "orm['rh.AyantDroit']"}),
+            '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'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.categorieemploi': {
+            'Meta': {'object_name': 'CategorieEmploi'},
+            '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.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.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': "'rh_contrats'", 'db_column': "'dossier'", 'to': "orm['rh.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']"})
+        },
+        '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.dossiercommentaire': {
+            'Meta': {'object_name': 'DossierCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            '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': "'rh_comparaisons'", 'to': "orm['rh.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'})
+        },
+        'rh.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossierpieces'", 'db_column': "'dossier'", 'to': "orm['rh.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'})
+        },
+        '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.employecommentaire': {
+            'Meta': {'object_name': 'EmployeCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.employepiece': {
+            'Meta': {'object_name': 'EmployePiece'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pieces'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            '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'})
+        },
+        '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.postecommentaire': {
+            'Meta': {'object_name': 'PosteCommentaire'},
+            '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'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            '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': "'rh_comparaisons_internes'", 'to': "orm['rh.Poste']"}),
+            '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.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': "'rh_financements'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'rh.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': "'rh_pieces'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"})
+        },
+        'rh.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': "'rh_remunerations'", 'db_column': "'dossier'", 'to': "orm['rh.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']"})
+        },
+        'rh.responsableimplantation': {
+            'Meta': {'object_name': 'ResponsableImplantation'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'responsable'", 'unique': 'True', 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"})
+        },
+        'rh.responsableimplantationproxy': {
+            'Meta': {'object_name': 'ResponsableImplantationProxy', 'db_table': "u'ref_implantation'", '_ormbases': ['references.Implantation']}
+        },
+        '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.tauxchange': {
+            'Meta': {'object_name': 'TauxChange'},
+            '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', [], {'to': "orm['rh.Devise']", 'db_column': "'devise'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'taux': ('django.db.models.fields.FloatField', [], {}),
+            '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'},
+            'categorie_emploi': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'categorie_emploi'", 'to': "orm['rh.CategorieEmploi']"}),
+            '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'}),
+            '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'})
+        }
+    }
+    
+    complete_apps = ['rh']
diff --git a/project/rh/migrations/0028_auto__add_familleprofessionnelle__add_field_typeposte_famille_professi.py b/project/rh/migrations/0028_auto__add_familleprofessionnelle__add_field_typeposte_famille_professi.py
new file mode 100644 (file)
index 0000000..1065021
--- /dev/null
@@ -0,0 +1,562 @@
+# 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 model 'FamilleProfessionnelle'
+        db.create_table('rh_familleprofessionnelle', (
+            ('nom', self.gf('django.db.models.fields.CharField')(max_length=100)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+        ))
+        db.send_create_signal('rh', ['FamilleProfessionnelle'])
+
+        # Adding field 'TypePoste.famille_professionnelle'
+        db.add_column('rh_typeposte', 'famille_professionnelle', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='types_de_poste', null=True, to=orm['rh.FamilleProfessionnelle']), keep_default=False)
+    
+    
+    def backwards(self, orm):
+        
+        # Deleting model 'FamilleProfessionnelle'
+        db.delete_table('rh_familleprofessionnelle')
+
+        # Deleting field 'TypePoste.famille_professionnelle'
+        db.delete_column('rh_typeposte', 'famille_professionnelle_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'})
+        },
+        '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.ayantdroit': {
+            'Meta': {'object_name': 'AyantDroit'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'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'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['managedref.Pays']", 'blank': 'True', 'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            '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']"})
+        },
+        'rh.ayantdroitcommentaire': {
+            'Meta': {'object_name': 'AyantDroitCommentaire'},
+            'ayant_droit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'ayant_droit'", 'to': "orm['rh.AyantDroit']"}),
+            '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'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.categorieemploi': {
+            'Meta': {'object_name': 'CategorieEmploi'},
+            '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.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.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': "'rh_contrats'", 'db_column': "'dossier'", 'to': "orm['rh.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']"})
+        },
+        '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.dossiercommentaire': {
+            'Meta': {'object_name': 'DossierCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            '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': "'rh_comparaisons'", 'to': "orm['rh.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'})
+        },
+        'rh.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossierpieces'", 'db_column': "'dossier'", 'to': "orm['rh.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'})
+        },
+        '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.employecommentaire': {
+            'Meta': {'object_name': 'EmployeCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.employepiece': {
+            'Meta': {'object_name': 'EmployePiece'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pieces'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            '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'})
+        },
+        'rh.familleprofessionnelle': {
+            'Meta': {'object_name': 'FamilleProfessionnelle'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        '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.postecommentaire': {
+            'Meta': {'object_name': 'PosteCommentaire'},
+            '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'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'texte': ('django.db.models.fields.TextField', [], {}),
+            '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.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            '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': "'rh_comparaisons_internes'", 'to': "orm['rh.Poste']"}),
+            '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.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': "'rh_financements'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'rh.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': "'rh_pieces'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"})
+        },
+        'rh.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': "'rh_remunerations'", 'db_column': "'dossier'", 'to': "orm['rh.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']"})
+        },
+        'rh.responsableimplantation': {
+            'Meta': {'object_name': 'ResponsableImplantation'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'responsable'", 'unique': 'True', 'db_column': "'implantation'", 'to': "orm['managedref.Implantation']"})
+        },
+        'rh.responsableimplantationproxy': {
+            'Meta': {'object_name': 'ResponsableImplantationProxy', 'db_table': "u'ref_implantation'", '_ormbases': ['references.Implantation']}
+        },
+        '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.tauxchange': {
+            'Meta': {'object_name': 'TauxChange'},
+            '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', [], {'to': "orm['rh.Devise']", 'db_column': "'devise'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'supprime': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'taux': ('django.db.models.fields.FloatField', [], {}),
+            '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'},
+            'categorie_emploi': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'categorie_emploi'", 'to': "orm['rh.CategorieEmploi']"}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'famille_professionnelle': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'types_de_poste'", 'null': 'True', 'to': "orm['rh.FamilleProfessionnelle']"}),
+            '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'})
+        }
+    }
+    
+    complete_apps = ['rh']
index 075617f..e2db9d3 100644 (file)
@@ -4,27 +4,34 @@ import datetime
 from datetime import date
 from decimal import Decimal
 
+from auf.django.emploi.models import \
+        GENRE_CHOICES, SITUATION_CHOICES  # devrait plutot être dans references
+from auf.django.metadata.models import AUFMetadata
+from auf.django.metadata.managers import NoDeleteManager
+from auf.django.references import models as ref
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.db.models import Q
 from django.conf import settings
 
-from auf.django.emploi.models import GENRE_CHOICES, SITUATION_CHOICES # devrait plutot être dans references
-from auf.django.metadata.models import AUFMetadata
-from auf.django.metadata.managers import NoDeleteManager
-import auf.django.references.models as ref
+from change_list import \
+        RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
+        STATUT_FUTUR
+from managers import \
+        PosteManager, DossierManager, DossierComparaisonManager, \
+        PosteComparaisonManager, DeviseManager, ServiceManager, \
+        TypeRemunerationManager
 from validators import validate_date_passee
-from managers import PosteManager, DossierManager, DossierComparaisonManager, \
-    PosteComparaisonManager, DeviseManager, ServiceManager, TypeRemunerationManager
-from change_list import RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, \
-    STATUT_INACTIF, STATUT_FUTUR
 
 
-# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe pour l'héritage.
-# Cela permet de faire du dynamic loading par app sans avoir à redéfinir dans DAE la FK
+# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe
+# pour l'héritage.  Cela permet de faire du dynamic loading par app sans
+# avoir à redéfinir dans DAE la FK
 def app_context():
-    import inspect;
-    models_stack = [s[1].split('/')[-2] for s in inspect.stack() if s[1].endswith('models.py')]
+    import inspect
+    models_stack = [s[1].split('/')[-2]
+                    for s in inspect.stack()
+                    if s[1].endswith('models.py')]
     return models_stack[-1]
 
 
@@ -32,26 +39,40 @@ def app_context():
 HELP_TEXT_DATE = "format: jj-mm-aaaa"
 REGIME_TRAVAIL_DEFAULT = Decimal('100.00')
 REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT = Decimal('35.00')
-REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = "Saisir le nombre d'heure de travail à temps complet (100%), sans tenir compte du régime de travail"
+REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = \
+        "Saisir le nombre d'heure de travail à temps complet (100%), " \
+        "sans tenir compte du régime de travail"
 
 # Upload de fichiers
 storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
                             base_url=settings.PRIVE_MEDIA_URL)
 
+
 def poste_piece_dispatch(instance, filename):
-    path = "%s/poste/%s/%s" % (instance._meta.app_label, instance.poste_id, filename)
+    path = "%s/poste/%s/%s" % (
+        instance._meta.app_label, instance.poste_id, filename
+    )
     return path
 
+
 def dossier_piece_dispatch(instance, filename):
-    path = "%s/dossier/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+    path = "%s/dossier/%s/%s" % (
+        instance._meta.app_label, instance.dossier_id, filename
+    )
     return path
 
+
 def employe_piece_dispatch(instance, filename):
-    path = "%s/employe/%s/%s" % (instance._meta.app_label, instance.employe_id, filename)
+    path = "%s/employe/%s/%s" % (
+        instance._meta.app_label, instance.employe_id, filename
+    )
     return path
 
+
 def contrat_dispatch(instance, filename):
-    path = "%s/contrat/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+    path = "%s/contrat/%s/%s" % (
+        instance._meta.app_label, instance.dossier_id, filename
+    )
     return path
 
 
@@ -60,7 +81,6 @@ class DevisableMixin(object):
     def get_annee_pour_taux_devise(self):
         return datetime.datetime.now().year
 
-
     def taux_devise(self, devise=None):
         if devise is None:
             devise = self.devise
@@ -71,12 +91,17 @@ class DevisableMixin(object):
             return 1
 
         annee = self.get_annee_pour_taux_devise()
-        taux = [tc.taux for tc in TauxChange.objects.filter(devise=devise, annee=annee)]
+        taux = [
+            tc.taux
+            for tc in TauxChange.objects.filter(devise=devise, annee=annee)
+        ]
         taux = set(taux)
 
         if len(taux) == 0:
-            raise Exception(u"Pas de taux pour %s en %s" % (devise.code, annee))
-            
+            raise Exception(
+                u"Pas de taux pour %s en %s" % (devise.code, annee)
+            )
+
         if len(taux) > 1:
             raise Exception(u"Il existe plusieurs taux de %s en %s" %
                     (devise.code, annee))
@@ -95,7 +120,10 @@ class DevisableMixin(object):
 
 class Commentaire(AUFMetadata):
     texte = models.TextField()
-    owner = models.ForeignKey('auth.User', db_column='owner', related_name='+', verbose_name=u"Commentaire de")
+    owner = models.ForeignKey(
+        'auth.User', db_column='owner', related_name='+',
+        verbose_name=u"Commentaire de"
+    )
 
     class Meta:
         abstract = True
@@ -112,8 +140,10 @@ POSTE_APPEL_CHOICES = (
     ('externe', 'Externe'),
 )
 
+
 class Poste_(AUFMetadata):
-    """Un Poste est un emploi (job) à combler dans une implantation.
+    """
+    Un Poste est un emploi (job) à combler dans une implantation.
     Un Poste peut être comblé par un Employe, auquel cas un Dossier est créé.
     Si on veut recruter 2 jardiniers, 2 Postes distincts existent.
     """
@@ -121,114 +151,150 @@ class Poste_(AUFMetadata):
     objects = PosteManager()
 
     # Identification
-    nom = models.CharField(max_length=255,
-                            verbose_name = u"Titre du poste", )
-    nom_feminin = models.CharField(max_length=255,
-                            verbose_name = u"Titre du poste (au féminin)",
-                            null=True)
-    implantation = models.ForeignKey(ref.Implantation, help_text=u"Taper le nom de l'implantation ou sa région", 
-                            db_column='implantation', related_name='+')
-    type_poste = models.ForeignKey('TypePoste', db_column='type_poste', help_text=u"Taper le nom du type de poste",
-                            related_name='+',
-                            null=True,
-                            verbose_name=u"type de poste")
-    service = models.ForeignKey('Service', db_column='service',
-                            related_name='+',
-                            verbose_name = u"direction/service/pôle support",
-                            null=True,)
-    responsable = models.ForeignKey('Poste', db_column='responsable', 
-                            related_name='+',
-                            null=True,
-                            help_text=u"Taper le nom du poste ou du type de poste", 
-                            verbose_name = u"Poste du responsable", )
-                                
+    nom = models.CharField(u"Titre du poste", max_length=255)
+    nom_feminin = models.CharField(
+         u"Titre du poste (au féminin)", max_length=255, null=True
+    )
+    implantation = models.ForeignKey(
+        ref.Implantation,
+        help_text=u"Taper le nom de l'implantation ou sa région",
+        db_column='implantation', related_name='+'
+    )
+    type_poste = models.ForeignKey(
+        'TypePoste', db_column='type_poste',
+        help_text=u"Taper le nom du type de poste", related_name='+',
+        null=True, verbose_name=u"type de poste"
+    )
+    service = models.ForeignKey(
+        'Service', db_column='service', related_name='+',
+        verbose_name=u"direction/service/pôle support", null=True
+    )
+    responsable = models.ForeignKey(
+        'Poste', db_column='responsable',
+        related_name='+', null=True,
+        help_text=u"Taper le nom du poste ou du type de poste",
+        verbose_name=u"Poste du responsable"
+    )
+
     # Contrat
-    regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
-                            default=REGIME_TRAVAIL_DEFAULT, null=True,
-                            verbose_name = u"Temps de travail",
-                            help_text="% du temps complet")
-    regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
-                            decimal_places=2, null=True,
-                            default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
-                            verbose_name= u"Nb. heures par semaine",
-                            help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+    regime_travail = models.DecimalField(
+        u"temps de travail", max_digits=12, decimal_places=2,
+        default=REGIME_TRAVAIL_DEFAULT, null=True,
+        help_text="% du temps complet"
+    )
+    regime_travail_nb_heure_semaine = models.DecimalField(
+        u"nb. heures par semaine", max_digits=12, decimal_places=2,
+        null=True, default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+        help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT
+    )
 
     # Recrutement
-    local = models.NullBooleanField(verbose_name = u"Local", default=True,
-                            null=True, blank=True)
-    expatrie = models.NullBooleanField(verbose_name = u"Expatrié", default=False,
-                            null=True, blank=True)
+    local = models.NullBooleanField(
+        u"local", default=True, null=True, blank=True
+    )
+    expatrie = models.NullBooleanField(
+        u"expatrié", default=False, null=True, blank=True
+    )
     mise_a_disposition = models.NullBooleanField(
-                            verbose_name = u"Mise à disposition",
-                            null=True, default=False)
-    appel = models.CharField(max_length=10, null=True,
-                            verbose_name = u"Appel à candidature",
-                            choices=POSTE_APPEL_CHOICES,
-                            default='interne')
+        u"mise à disposition", null=True, default=False
+    )
+    appel = models.CharField(
+        u"Appel à candidature", max_length=10, null=True,
+        choices=POSTE_APPEL_CHOICES, default='interne'
+    )
 
     # Rémunération
-    classement_min = models.ForeignKey('Classement',
-                            db_column='classement_min', related_name='+',
-                            null=True, blank=True)
-    classement_max = models.ForeignKey('Classement',
-                            db_column='classement_max', related_name='+',
-                            null=True, blank=True)
-    valeur_point_min = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
-                            db_column='valeur_point_min', related_name='+',
-                            null=True, blank=True)
-    valeur_point_max = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
-                            db_column='valeur_point_max', related_name='+',
-                            null=True, blank=True)
-    devise_min = models.ForeignKey('Devise', db_column='devise_min', null=True,
-                            related_name='+',)
-    devise_max = models.ForeignKey('Devise', db_column='devise_max', null=True,
-                            related_name='+',)
-    salaire_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    salaire_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    indemn_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    indemn_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    autre_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    autre_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
+    classement_min = models.ForeignKey(
+        'Classement', db_column='classement_min', related_name='+',
+        null=True, blank=True
+    )
+    classement_max = models.ForeignKey(
+        'Classement', db_column='classement_max', related_name='+',
+        null=True, blank=True
+    )
+    valeur_point_min = models.ForeignKey(
+        'ValeurPoint',
+        help_text=u"Taper le code ou le nom de l'implantation",
+        db_column='valeur_point_min', related_name='+', null=True,
+        blank=True
+    )
+    valeur_point_max = models.ForeignKey(
+        'ValeurPoint',
+        help_text=u"Taper le code ou le nom de l'implantation",
+        db_column='valeur_point_max', related_name='+', null=True,
+        blank=True
+    )
+    devise_min = models.ForeignKey(
+        'Devise', db_column='devise_min', null=True, related_name='+'
+    )
+    devise_max = models.ForeignKey(
+        'Devise', db_column='devise_max', null=True, related_name='+'
+    )
+    salaire_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    salaire_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    indemn_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    indemn_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    autre_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    autre_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
 
     # Comparatifs de rémunération
-    devise_comparaison = models.ForeignKey('Devise', null=True, blank=True,
-                            db_column='devise_comparaison',
-                            related_name='+', )
-    comp_locale_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_locale_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_universite_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_universite_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_fonctionpub_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_fonctionpub_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_ong_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_ong_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_autre_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_autre_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
+    devise_comparaison = models.ForeignKey(
+        'Devise', null=True, blank=True, db_column='devise_comparaison',
+        related_name='+'
+    )
+    comp_locale_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_locale_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_universite_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_universite_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_fonctionpub_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_fonctionpub_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_ong_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_ong_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_autre_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_autre_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
 
     # Justification
     justification = models.TextField(null=True, blank=True)
 
     # Autres Metadata
-    date_debut = models.DateField(verbose_name=u"Date de début", help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
-    date_fin = models.DateField(verbose_name=u"Date de fin", help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
+    date_debut = models.DateField(
+        u"date de début", help_text=HELP_TEXT_DATE, null=True, blank=True
+    )
+    date_fin = models.DateField(
+        u"date de fin", help_text=HELP_TEXT_DATE, null=True, blank=True
+    )
 
     class Meta:
         abstract = True
@@ -238,27 +304,31 @@ class Poste_(AUFMetadata):
         ordering = ["nom"]
 
     def __unicode__(self):
-        representation = u'%s - %s [%s]' % (self.implantation, self.nom,
-                            self.id)
+        representation = u'%s - %s [%s]' % (
+            self.implantation, self.nom, self.id
+        )
         return representation
 
-
     prefix_implantation = "implantation__region"
+
     def get_regions(self):
         return [self.implantation.region]
 
     def get_devise(self):
-        vp = ValeurPoint.objects.filter(implantation=self.implantation, devise__archive=False).order_by('annee')
+        vp = ValeurPoint.objects.filter(
+            implantation=self.implantation, devise__archive=False
+        ).order_by('annee')
         if len(vp) > 0:
             return vp[0].devise
         else:
             return Devise.objects.get(code='EUR')
 
+
 class Poste(Poste_):
     __doc__ = Poste_.__doc__
 
     # meta dématérialisation :  pour permettre le filtrage
-    vacant = models.NullBooleanField(verbose_name = u"vacant", null=True, blank=True)
+    vacant = models.NullBooleanField(u"vacant", null=True, blank=True)
 
     def is_vacant(self):
         vacant = True
@@ -267,12 +337,17 @@ class Poste(Poste_):
         return vacant
 
     def occupe_par(self):
-        """Retourne la liste d'employé occupant ce poste.
+        """
+        Retourne la liste d'employé occupant ce poste.
         Généralement, retourne une liste d'un élément.
         Si poste inoccupé, retourne liste vide.
         UTILISE pour mettre a jour le flag vacant
         """
-        return [d.employe for d in self.rh_dossiers.filter(supprime=False).exclude(date_fin__lt=date.today())]
+        return [
+            d.employe for d in self.rh_dossiers
+            .filter(supprime=False)
+            .exclude(date_fin__lt=date.today())
+        ]
 
 
 POSTE_FINANCEMENT_CHOICES = (
@@ -283,15 +358,22 @@ POSTE_FINANCEMENT_CHOICES = (
 
 
 class PosteFinancement_(models.Model):
-    """Pour un Poste, structure d'informations décrivant comment on prévoit
+    """
+    Pour un Poste, structure d'informations décrivant comment on prévoit
     financer ce Poste.
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_financements')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste',
+        related_name='%(app_label)s_financements'
+    )
     type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
-    pourcentage = models.DecimalField(max_digits=12, decimal_places=2,
-            help_text="ex.: 33.33 % (décimale avec point)")
+    pourcentage = models.DecimalField(
+        max_digits=12, decimal_places=2,
+        help_text="ex.: 33.33 % (décimale avec point)"
+    )
     commentaire = models.TextField(
-            help_text="Spécifiez la source de financement.")
+        help_text="Spécifiez la source de financement."
+    )
 
     class Meta:
         abstract = True
@@ -309,14 +391,18 @@ class PosteFinancement(PosteFinancement_):
 
 
 class PostePiece_(models.Model):
-    """Documents relatifs au Poste.
+    """
+    Documents relatifs au Poste.
     Ex.: Description de poste
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_pieces')
-    nom = models.CharField(verbose_name = u"Nom", max_length=255)
-    fichier = models.FileField(verbose_name = u"Fichier",
-                            upload_to=poste_piece_dispatch,
-                            storage=storage_prive)
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste',
+        related_name='%(app_label)s_pieces'
+    )
+    nom = models.CharField(u"Nom", max_length=255)
+    fichier = models.FileField(
+        u"Fichier", upload_to=poste_piece_dispatch, storage=storage_prive
+    )
 
     class Meta:
         abstract = True
@@ -325,44 +411,60 @@ class PostePiece_(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class PostePiece(PostePiece_):
     pass
 
+
 class PosteComparaison_(AUFMetadata, DevisableMixin):
     """
-    De la même manière qu'un dossier, un poste peut-être comparé à un autre poste.
+    De la même manière qu'un dossier, un poste peut-être comparé à un autre
+    poste.
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), related_name='%(app_label)s_comparaisons_internes')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(),
+        related_name='%(app_label)s_comparaisons_internes'
+    )
     objects = PosteComparaisonManager()
 
-    implantation = models.ForeignKey(ref.Implantation, null=True, blank=True, related_name="+")
-    nom = models.CharField(verbose_name = u"Poste", max_length=255, null=True, blank=True)
+    implantation = models.ForeignKey(
+        ref.Implantation, null=True, blank=True, related_name="+"
+    )
+    nom = models.CharField(u"Poste", max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
-    devise = models.ForeignKey("Devise", related_name='+', null=True, blank=True)
+    devise = models.ForeignKey(
+        "Devise", related_name='+', null=True, blank=True
+    )
 
     class Meta:
         abstract = True
 
-
     def __unicode__(self):
         return self.nom
 
+
 class PosteComparaison(PosteComparaison_):
     objects = NoDeleteManager()
 
+
 class PosteCommentaire_(Commentaire):
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='+')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste', related_name='+'
+    )
 
     class Meta:
         abstract = True
 
+
 class PosteCommentaire(PosteCommentaire_):
     pass
 
+
 ### EMPLOYÉ/PERSONNE
 
 class Employe(AUFMetadata):
-    """Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
+    """
+    Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
     Dossiers qu'il occupe ou a occupé de Postes.
 
     Cette classe aurait pu avantageusement s'appeler Personne car la notion
@@ -370,50 +472,52 @@ class Employe(AUFMetadata):
     """
     # Identification
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255, verbose_name = u"Prénom")
-    nom_affichage = models.CharField(max_length=255,
-                            verbose_name = u"Nom d'affichage",
-                            null=True, blank=True)
-    nationalite = models.ForeignKey(ref.Pays, to_field='code',
-                            db_column='nationalite',
-                            related_name='employes_nationalite',
-                            verbose_name = u"Nationalité",
-                            blank=True, null=True)
-    date_naissance = models.DateField(verbose_name = u"Date de naissance",
-                            help_text=HELP_TEXT_DATE,
-                            validators=[validate_date_passee],
-                            null=True, blank=True)
+    prenom = models.CharField(u"prénom", max_length=255)
+    nom_affichage = models.CharField(
+        u"nom d'affichage", max_length=255, null=True, blank=True
+    )
+    nationalite = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='nationalite',
+        related_name='employes_nationalite', verbose_name=u"nationalité",
+        blank=True, null=True
+    )
+    date_naissance = models.DateField(
+        u"date de naissance", help_text=HELP_TEXT_DATE,
+        validators=[validate_date_passee], null=True, blank=True
+    )
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
 
     # Infos personnelles
-    situation_famille = models.CharField(max_length=1,
-                            choices=SITUATION_CHOICES,
-                            verbose_name = u"Situation familiale",
-                            null=True, blank=True)
-    date_entree = models.DateField(verbose_name = u"Date d'entrée à l'AUF",
-                            help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
+    situation_famille = models.CharField(
+        u"situation familiale", max_length=1, choices=SITUATION_CHOICES,
+        null=True, blank=True
+    )
+    date_entree = models.DateField(
+        u"date d'entrée à l'AUF", help_text=HELP_TEXT_DATE, null=True,
+        blank=True
+    )
 
     # Coordonnées
-    tel_domicile = models.CharField(max_length=255,
-                            verbose_name = u"Tél. domicile",
-                            null=True, blank=True)
-    tel_cellulaire = models.CharField(max_length=255,
-                            verbose_name = u"Tél. cellulaire",
-                            null=True, blank=True)
+    tel_domicile = models.CharField(
+        u"tél. domicile", max_length=255, null=True, blank=True
+    )
+    tel_cellulaire = models.CharField(
+        u"tél. cellulaire", max_length=255, null=True, blank=True
+    )
     adresse = models.CharField(max_length=255, null=True, blank=True)
     ville = models.CharField(max_length=255, null=True, blank=True)
     province = models.CharField(max_length=255, null=True, blank=True)
     code_postal = models.CharField(max_length=255, null=True, blank=True)
-    pays = models.ForeignKey(ref.Pays, to_field='code', db_column='pays',
-                            related_name='employes',
-                            null=True, blank=True)
+    pays = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='pays',
+        related_name='employes', null=True, blank=True
+    )
 
     # meta dématérialisation :  pour permettre le filtrage
-    nb_postes = models.IntegerField(verbose_name = u"nombre de postes", null=True, blank=True)
+    nb_postes = models.IntegerField(u"nombre de postes", null=True, blank=True)
 
     class Meta:
-        ordering = ['nom','prenom']
+        ordering = ['nom', 'prenom']
         verbose_name = u"Employé"
         verbose_name_plural = u"Employés"
 
@@ -429,11 +533,12 @@ class Employe(AUFMetadata):
         return civilite
 
     def url_photo(self):
-        """Retourne l'URL du service retournant la photo de l'Employe.
+        """
+        Retourne l'URL du service retournant la photo de l'Employe.
         Équivalent reverse url 'rh_photo' avec id en param.
         """
         from django.core.urlresolvers import reverse
-        return reverse('rh_photo', kwargs={'id':self.id})
+        return reverse('rh_photo', kwargs={'id': self.id})
 
     def dossiers_passes(self):
         params = {KEY_STATUT: STATUT_INACTIF, }
@@ -476,6 +581,7 @@ class Employe(AUFMetadata):
         return poste
 
     prefix_implantation = "rh_dossiers__poste__implantation__region"
+
     def get_regions(self):
         regions = []
         for d in self.dossiers.all():
@@ -484,15 +590,18 @@ class Employe(AUFMetadata):
 
 
 class EmployePiece(models.Model):
-    """Documents relatifs à un employé.
+    """
+    Documents relatifs à un employé.
     Ex.: CV...
     """
-    employe = models.ForeignKey('Employe', db_column='employe',
-        related_name="pieces")
-    nom = models.CharField(verbose_name="Nom", max_length=255)
-    fichier = models.FileField(verbose_name="Fichier",
-                            upload_to=employe_piece_dispatch,
-                            storage=storage_prive)
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name="pieces",
+        verbose_name=u"employé"
+    )
+    nom = models.CharField(max_length=255)
+    fichier = models.FileField(
+        u"fichier", upload_to=employe_piece_dispatch, storage=storage_prive
+    )
 
     class Meta:
         ordering = ['nom']
@@ -502,9 +611,11 @@ class EmployePiece(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class EmployeCommentaire(Commentaire):
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            related_name='+')
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name='+'
+    )
 
     class Meta:
         verbose_name = u"Employé commentaire"
@@ -518,35 +629,37 @@ LIEN_PARENTE_CHOICES = (
     ('Fils', 'Fils'),
 )
 
+
 class AyantDroit(AUFMetadata):
-    """Personne en relation avec un Employe.
+    """
+    Personne en relation avec un Employe.
     """
     # Identification
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255,
-                            verbose_name = u"Prénom",)
-    nom_affichage = models.CharField(max_length=255,
-                            verbose_name = u"Nom d'affichage",
-                            null=True, blank=True)
-    nationalite = models.ForeignKey(ref.Pays, to_field='code',
-                            db_column='nationalite',
-                            related_name='ayantdroits_nationalite',
-                            verbose_name = u"Nationalité",
-                            null=True, blank=True)
-    date_naissance = models.DateField(verbose_name = u"Date de naissance",
-                            help_text=HELP_TEXT_DATE,
-                            validators=[validate_date_passee],
-                            null=True, blank=True)
+    prenom = models.CharField(u"prénom", max_length=255)
+    nom_affichage = models.CharField(
+        u"nom d'affichage", max_length=255, null=True, blank=True
+    )
+    nationalite = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='nationalite',
+        related_name='ayantdroits_nationalite',
+        verbose_name=u"nationalité", null=True, blank=True
+    )
+    date_naissance = models.DateField(
+        u"Date de naissance", help_text=HELP_TEXT_DATE,
+        validators=[validate_date_passee], null=True, blank=True
+    )
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
 
     # Relation
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            related_name='ayantdroits',
-                            verbose_name = u"Employé")
-    lien_parente = models.CharField(max_length=10,
-                            choices=LIEN_PARENTE_CHOICES,
-                            verbose_name = u"Lien de parenté",
-                            null=True, blank=True)
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name='ayantdroits',
+        verbose_name=u"Employé"
+    )
+    lien_parente = models.CharField(
+        u"lien de parenté", max_length=10, choices=LIEN_PARENTE_CHOICES,
+        null=True, blank=True
+    )
 
     class Meta:
         ordering = ['nom', ]
@@ -557,6 +670,7 @@ class AyantDroit(AUFMetadata):
         return u'%s %s' % (self.nom.upper(), self.prenom, )
 
     prefix_implantation = "employe__dossiers__poste__implantation__region"
+
     def get_regions(self):
         regions = []
         for d in self.employe.dossiers.all():
@@ -565,8 +679,9 @@ class AyantDroit(AUFMetadata):
 
 
 class AyantDroitCommentaire(Commentaire):
-    ayant_droit = models.ForeignKey('AyantDroit', db_column='ayant_droit',
-                            related_name='+')
+    ayant_droit = models.ForeignKey(
+        'AyantDroit', db_column='ayant_droit', related_name='+'
+    )
 
 
 ### DOSSIER
@@ -582,8 +697,10 @@ COMPTE_COMPTA_CHOICES = (
     ('aucun', 'Aucun'),
 )
 
+
 class Dossier_(AUFMetadata, DevisableMixin):
-    """Le Dossier regroupe les informations relatives à l'occupation
+    """
+    Le Dossier regroupe les informations relatives à l'occupation
     d'un Poste par un Employe. Un seul Dossier existe par Poste occupé
     par un Employe.
 
@@ -596,45 +713,47 @@ class Dossier_(AUFMetadata, DevisableMixin):
 
     # TODO: OneToOne ??
     statut = models.ForeignKey('Statut', related_name='+', null=True)
-    organisme_bstg = models.ForeignKey('OrganismeBstg',
-                            db_column='organisme_bstg',
-                            related_name='+',
-                            verbose_name = u"Organisme",
-                            help_text="Si détaché (DET) ou \
-                                    mis à disposition (MAD), \
-                                    préciser l'organisme.",
-                            null=True, blank=True)
+    organisme_bstg = models.ForeignKey(
+        'OrganismeBstg', db_column='organisme_bstg', related_name='+',
+        verbose_name=u"organisme",
+        help_text=(
+            u"Si détaché (DET) ou mis à disposition (MAD), "
+            u"préciser l'organisme."
+        ), null=True, blank=True
+    )
 
     # Recrutement
     remplacement = models.BooleanField(default=False)
-    remplacement_de = models.ForeignKey('self', related_name='+',
-                            help_text=u"Taper le nom de l'employé",
-                            null=True, blank=True)
-    statut_residence = models.CharField(max_length=10, default='local',
-                            verbose_name = u"Statut", null=True,
-                            choices=STATUT_RESIDENCE_CHOICES)
+    remplacement_de = models.ForeignKey(
+        'self', related_name='+', help_text=u"Taper le nom de l'employé",
+        null=True, blank=True
+    )
+    statut_residence = models.CharField(
+        u"statut", max_length=10, default='local', null=True,
+        choices=STATUT_RESIDENCE_CHOICES
+    )
 
     # Rémunération
-    classement = models.ForeignKey('Classement', db_column='classement',
-                            related_name='+',
-                            null=True, blank=True)
-    regime_travail = models.DecimalField(max_digits=12, null=True,
-                            decimal_places=2,
-                            default=REGIME_TRAVAIL_DEFAULT,
-                            verbose_name = u"Régime de travail",
-                            help_text="% du temps complet")
-    regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
-                            decimal_places=2, null=True,
-                            default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
-                            verbose_name=u"Nb. heures par semaine",
-                            help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+    classement = models.ForeignKey(
+        'Classement', db_column='classement', related_name='+', null=True,
+        blank=True
+    )
+    regime_travail = models.DecimalField(
+        u"régime de travail", max_digits=12, null=True, decimal_places=2,
+        default=REGIME_TRAVAIL_DEFAULT, help_text="% du temps complet"
+    )
+    regime_travail_nb_heure_semaine = models.DecimalField(
+        u"nb. heures par semaine", max_digits=12,
+        decimal_places=2, null=True,
+        default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+        help_text=REGIME_TRAVA