conflit réglé merge master et regionalisation
authorDavin Baragiotta <davin.baragiotta@auf.org>
Tue, 5 Jun 2012 21:46:46 +0000 (17:46 -0400)
committerDavin BARAGIOTTA <davin.baragiotta@auf.org>
Tue, 5 Jun 2012 21:46:46 +0000 (17:46 -0400)
105 files changed:
buildout.cfg
project/assets/img/dossier-apercu.png [new file with mode: 0644]
project/assets/img/employe-apercu.png [new file with mode: 0644]
project/assets/img/master/employe-apercu-master.svg [new file with mode: 0644]
project/assets/img/master/essais/poste-apercu1.png [new file with mode: 0644]
project/assets/img/master/essais/poste-apercu2.png [new file with mode: 0644]
project/assets/img/master/materiel/bullet-magnify-10x11.png [new file with mode: 0644]
project/assets/img/master/materiel/bullet-magnify.png [new file with mode: 0644]
project/assets/img/master/materiel/chart_organisation.png [new file with mode: 0644]
project/assets/img/master/materiel/user.png [new file with mode: 0644]
project/assets/img/master/poste-apercu-master.xcf [new file with mode: 0644]
project/assets/img/poste-apercu.png [new file with mode: 0644]
project/conf.py.edit
project/context_processors.py [deleted file]
project/dae/admin.py
project/dae/catalogues.py
project/dae/context_processors.py
project/dae/decorators.py
project/dae/forms.py
project/dae/groups.py [new file with mode: 0644]
project/dae/mail.py
project/dae/management/__init__.py [deleted file]
project/dae/management/commands/__init__.py [deleted file]
project/dae/managers.py
project/dae/models.py
project/dae/permissions.py
project/dae/templatetags/dae.py
project/dae/urls.py
project/dae/utils.py [deleted file]
project/dae/views.py
project/dae/workflow.py
project/dashboard.py
project/decorators.py
project/development.py
project/groups.py [new file with mode: 0644]
project/legacy/__init__.py [deleted file]
project/legacy/management/__init__.py [deleted file]
project/legacy/management/commands/__init__.py [deleted file]
project/legacy/management/commands/rh_import_legacy.py [deleted file]
project/legacy/models.py [deleted file]
project/lib.py [deleted file]
project/menu.py
project/monkey.py
project/old_rh_v1/__init__.py [deleted file]
project/old_rh_v1/migrations/0001_initial.py [deleted file]
project/old_rh_v1/migrations/0002_auto__chg_field_employe_nationalite__chg_field_employe_pays__chg_field.py [deleted file]
project/old_rh_v1/migrations/0003_auto__chg_field_tauxchange_devise.py [deleted file]
project/old_rh_v1/migrations/0004_auto__chg_field_dossier_classement__chg_field_dossier_responsable__chg.py [deleted file]
project/old_rh_v1/migrations/__init__.py [deleted file]
project/old_rh_v1/models.py [deleted file]
project/permissions.py [deleted file]
project/recrutement/admin.py
project/recrutement/api.py
project/recrutement/context_processors.py [deleted file]
project/recrutement/forms.py
project/recrutement/groups.py [new file with mode: 0644]
project/recrutement/models.py
project/recrutement/permissions.py [deleted file]
project/recrutement/tests.py [deleted file]
project/recrutement/urls.py
project/recrutement/views.py
project/recrutement/workflow.py [deleted file]
project/rh/admin.py
project/rh/catalogues.py
project/rh/change_list.py
project/rh/decorators.py [deleted file]
project/rh/forms.py
project/rh/graph.py
project/rh/groups.py [deleted file]
project/rh/lib.py
project/rh/managers.py
project/rh/masse_salariale.py
project/rh/models.py
project/rh/templates/rh/rapports/employes_sans_contrat.html
project/rh/templates/rh/rapports/postes.html [deleted file]
project/rh/templatetags/change_list.py
project/rh/templatetags/rapports.py
project/rh/urls.py
project/rh/views.py
project/settings.py
project/urls.py
project/utils.py
project/views.py
project/workflow.py [deleted file]
src/qbe/.gitignore
src/qbe/CHANGES.txt
src/qbe/MANIFEST.in
src/qbe/django_qbe/admin.py [new file with mode: 0644]
src/qbe/django_qbe/exports.py
src/qbe/django_qbe/forms.py
src/qbe/django_qbe/migrations/0001_initial.py [new file with mode: 0644]
src/qbe/django_qbe/migrations/0002_auto__add_field_savedquery_user_updated__add_field_savedquery_user_cre.py [new file with mode: 0644]
src/qbe/django_qbe/migrations/__init__.py [new file with mode: 0644]
src/qbe/django_qbe/models.py [new file with mode: 0644]
src/qbe/django_qbe/static/django_qbe/css/qbe.css
src/qbe/django_qbe/static/django_qbe/img/cut.png [changed mode: 0644->0755]
src/qbe/django_qbe/static/django_qbe/js/qbe.core.js
src/qbe/django_qbe/static/django_qbe/js/qbe.diagram.js
src/qbe/django_qbe/templates/admin/django_qbe/savedquery/change_form.html [new file with mode: 0644]
src/qbe/django_qbe/templates/qbe.html
src/qbe/django_qbe/templates/qbe.js
src/qbe/django_qbe/templates/qbe_results.html
src/qbe/django_qbe/utils.py
src/qbe/django_qbe/views.py
versions.cfg

index 3079d83..0213d45 100644 (file)
@@ -15,10 +15,8 @@ find-links = http://pypi.auf.org/simple/auf.recipe.django/
     http://pypi.auf.org/simple/auf.django.emploi/
     http://pypi.auf.org/django-alphafilter/
     http://pypi.auf.org/simple/auf.django.references/
-
 develop = src/qbe
     src/auf.django.metadata
-
 eggs =
     django
     south
@@ -26,6 +24,7 @@ eggs =
     django-ajax-selects
     django-alphafilter
     django-form-utils
+    django-picklefield
     django-qbe
     django-reversion
     django-sendfile
@@ -42,6 +41,7 @@ eggs =
     auf.django.workflow
     auf.recipe.django
     odfpy
+    django-picklefield
     pygraphviz
     simplejson
 
@@ -49,5 +49,4 @@ eggs =
 recipe = auf.recipe.django
 wsgi=true
 settings=production
-extra-paths = project
 eggs =${buildout:eggs}
diff --git a/project/assets/img/dossier-apercu.png b/project/assets/img/dossier-apercu.png
new file mode 100644 (file)
index 0000000..dd3275d
Binary files /dev/null and b/project/assets/img/dossier-apercu.png differ
diff --git a/project/assets/img/employe-apercu.png b/project/assets/img/employe-apercu.png
new file mode 100644 (file)
index 0000000..4bd2065
Binary files /dev/null and b/project/assets/img/employe-apercu.png differ
diff --git a/project/assets/img/master/employe-apercu-master.svg b/project/assets/img/master/employe-apercu-master.svg
new file mode 100644 (file)
index 0000000..eedb849
--- /dev/null
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="Nouveau document 1">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective2884"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2958"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.66905966"
+     inkscape:cx="-147.14286"
+     inkscape:cy="518.0181"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1005"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g2966"
+       inkscape:export-xdpi="111"
+       inkscape:export-ydpi="111">
+      <image
+         xlink:href="file:///net/nfs-authnss.b.ca.auf/home/davin.baragiotta/Desktop/user.png"
+         width="48"
+         height="48"
+         id="image2886"
+         x="-118.28571"
+         y="568.36218" />
+      <image
+         xlink:href="file:///net/nfs-authnss.b.ca.auf/home/davin.baragiotta/Desktop/bullet-magnify.png"
+         width="48"
+         height="48"
+         id="image2960"
+         x="-103.57162"
+         y="582.7973" />
+    </g>
+  </g>
+</svg>
diff --git a/project/assets/img/master/essais/poste-apercu1.png b/project/assets/img/master/essais/poste-apercu1.png
new file mode 100644 (file)
index 0000000..d46a43c
Binary files /dev/null and b/project/assets/img/master/essais/poste-apercu1.png differ
diff --git a/project/assets/img/master/essais/poste-apercu2.png b/project/assets/img/master/essais/poste-apercu2.png
new file mode 100644 (file)
index 0000000..e4fbb1e
Binary files /dev/null and b/project/assets/img/master/essais/poste-apercu2.png differ
diff --git a/project/assets/img/master/materiel/bullet-magnify-10x11.png b/project/assets/img/master/materiel/bullet-magnify-10x11.png
new file mode 100644 (file)
index 0000000..4fc1181
Binary files /dev/null and b/project/assets/img/master/materiel/bullet-magnify-10x11.png differ
diff --git a/project/assets/img/master/materiel/bullet-magnify.png b/project/assets/img/master/materiel/bullet-magnify.png
new file mode 100644 (file)
index 0000000..dbc692d
Binary files /dev/null and b/project/assets/img/master/materiel/bullet-magnify.png differ
diff --git a/project/assets/img/master/materiel/chart_organisation.png b/project/assets/img/master/materiel/chart_organisation.png
new file mode 100644 (file)
index 0000000..c32d25c
Binary files /dev/null and b/project/assets/img/master/materiel/chart_organisation.png differ
diff --git a/project/assets/img/master/materiel/user.png b/project/assets/img/master/materiel/user.png
new file mode 100644 (file)
index 0000000..a5abf1f
Binary files /dev/null and b/project/assets/img/master/materiel/user.png differ
diff --git a/project/assets/img/master/poste-apercu-master.xcf b/project/assets/img/master/poste-apercu-master.xcf
new file mode 100644 (file)
index 0000000..44e5a05
Binary files /dev/null and b/project/assets/img/master/poste-apercu-master.xcf differ
diff --git a/project/assets/img/poste-apercu.png b/project/assets/img/poste-apercu.png
new file mode 100644 (file)
index 0000000..218724f
Binary files /dev/null and b/project/assets/img/poste-apercu.png differ
index cd9e0f1..0f33865 100644 (file)
@@ -9,13 +9,6 @@ DATABASES = {
         'HOST': '',
         'PORT': ''
     },
-    'legacy': {
-        'ENGINE': 'django.db.backends.postgresql_psycopg2',
-        'NAME': 'auf',
-        'USER': 'datamaster',
-        'PASSWORD': '',
-        'HOST': 'db.auf',
-    },
 }
 
 EMAIL_FROM = ''
diff --git a/project/context_processors.py b/project/context_processors.py
deleted file mode 100644 (file)
index 58db668..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from lib import get_employe_from_user
-from permissions import is_admin
-
-# Ajout de variables accessibles dans les templates (pour tester permissions dans templates)
-
-def utilisateur(request):
-    return {'utilisateur': request.user}
-    
-def this_employe(request):
-    user = request.user
-    employe = get_employe_from_user(user)
-    return {'this_employe': employe}
-    
-def user_is_admin(request):
-    return {'user_is_admin': not request.user.is_anonymous() and is_admin(request.user)}
-
index eba45f3..32576e9 100644 (file)
@@ -1,10 +1,12 @@
 # -*- encoding: utf-8 -*-
 
-from auf.django.workflow.models import WorkflowCommentaire
 from django import forms
 from django.contrib import admin
+
 from reversion.admin import VersionAdmin
 
+from auf.django.workflow.models import WorkflowCommentaire
+
 from project.dae.models import Poste, Dossier
 
 
index 16cbdcf..e738add 100644 (file)
@@ -1,18 +1,23 @@
 # -*- encoding: utf-8 -*-
 
 from django.db.models import Q
-from rh import models as rh
-from utils import get_employe_from_user, is_user_dans_services_centraux
-from workflow import grp_drh
+
+from project.groups import \
+        get_employe_from_user, is_user_dans_services_centraux
+from project.rh import models as rh
+
+from project.dae.workflow import grp_drh
+
 
 class Responsable(object):
     q = ""
-    def get_query(self,q,request):
+
+    def get_query(self, q, request):
         if len(q) < 4:
             return rh.Poste.objects.none()
 
         self.q = q
-        postes =  rh.Poste.objects.filter(
+        postes = rh.Poste.objects.filter(
             Q(nom__icontains=q) |
             Q(type_poste__nom__icontains=q) |
             Q(rh_dossiers__employe__nom__icontains=q) |
@@ -22,11 +27,14 @@ class Responsable(object):
 
     def format_result(self, poste):
         q = self.q
-        filtre = Q(poste=poste) & (Q(poste__nom__icontains=q) | Q(employe__nom__icontains=q) | Q(employe__prenom__icontains=q))
+        filtre = Q(poste=poste) & (
+            Q(poste__nom__icontains=q) | Q(employe__nom__icontains=q) |
+            Q(employe__prenom__icontains=q)
+        )
         dossiers = rh.Dossier.objects.filter(filtre)
-        
+
         nom_poste = poste.nom
-    
+
         if len(dossiers) == 1:
             dossier = dossiers[0]
             employe = dossier.employe
@@ -36,21 +44,29 @@ class Responsable(object):
                 employe = unicode(dossiers[0].employe)
             else:
                 employe = ""
-        return "[%s] %s (%s) (%s)" % (poste.implantation.id, nom_poste, poste.id, employe)           
+        return "[%s] %s (%s) (%s)" % (
+            poste.implantation.id, nom_poste, poste.id, employe
+        )
 
     def format_item(self, poste):
-        """ the display of a currently selected object in the area below the search box. html is OK """
+        """
+        the display of a currently selected object in the area below the
+        search box. html is OK
+        """
         return self.format_result(poste)
 
     def get_objects(self, ids):
-        """ given a list of ids, return the objects ordered as you would like them on the admin page.
-            this is for displaying the currently selected items (in the case of a ManyToMany field)
+        """
+        given a list of ids, return the objects ordered as you would like
+        them on the admin page.  this is for displaying the currently
+        selected items (in the case of a ManyToMany field)
         """
         return rh.Poste.objects.filter(pk__in=ids)
 
+
 class Dossier(object):
 
-    def get_query(self,q,request):
+    def get_query(self, q, request):
         employe = get_employe_from_user(request.user)
         prefixe_implantation = 'poste__implantation'
 
@@ -60,10 +76,11 @@ class Dossier(object):
             Q(employe__prenom__icontains=q)
 
         if is_user_dans_services_centraux(request.user):
-            q_place = Q(**{ '%s' % prefixe_implantation : employe.implantation })
+            q_place = Q(**{prefixe_implantation: employe.implantation})
         else:
-            q_place = Q(**{ '%s__region' % prefixe_implantation : employe.implantation.region })
-
+            q_place = Q(**{
+                prefixe_implantation + '__region': employe.implantation.region
+            })
 
         if grp_drh in request.user.groups.all():
             q_filtre = q_recherche
@@ -75,28 +92,37 @@ class Dossier(object):
         return dossier.__unicode__()
 
     def format_item(self, dossier):
-        """ the display of a currently selected object in the area below the search box. html is OK """
+        """
+        the display of a currently selected object in the area below the
+        search box. html is OK
+        """
         return self.format_result(dossier)
 
     def get_objects(self, ids):
-        """ given a list of ids, return the objects ordered as you would like them on the admin page.
-            this is for displaying the currently selected items (in the case of a ManyToMany field)
+        """
+        given a list of ids, return the objects ordered as you would like
+        them on the admin page.  this is for displaying the currently
+        selected items (in the case of a ManyToMany field)
         """
         return rh.Dossier.objects.filter(pk__in=ids)
 
+
 class Poste(object):
 
-    def get_query(self,q,request):
+    def get_query(self, q, request):
         employe = get_employe_from_user(request.user)
         prefixe_implantation = 'poste__implantation'
 
-        q_recherche = Q(poste__nom__icontains=q) | Q(poste__type_poste__nom__icontains=q)
+        q_recherche = \
+                Q(poste__nom__icontains=q) | \
+                Q(poste__type_poste__nom__icontains=q)
 
         if is_user_dans_services_centraux(request.user):
-            q_place = Q(**{ '%s' % prefixe_implantation : employe.implantation })
+            q_place = Q(**{prefixe_implantation: employe.implantation})
         else:
-            q_place = Q(**{ '%s__region' % prefixe_implantation : employe.implantation.region })
-
+            q_place = Q(**{
+                prefixe_implantation + '__region': employe.implantation.region
+            })
 
         if grp_drh in request.user.groups.all():
             q_filtre = q_recherche
@@ -108,14 +134,21 @@ class Poste(object):
         annee = dossier.date_debut.year
         if dossier.date_fin is not None:
             annee = dossier.date_fin.year
-        return u"[%s] %s %s" % (dossier.poste.implantation, annee, dossier.poste.nom)
+        return u"[%s] %s %s" % (
+            dossier.poste.implantation, annee, dossier.poste.nom
+        )
 
     def format_item(self, dossier):
-        """ the display of a currently selected object in the area below the search box. html is OK """
+        """
+        the display of a currently selected object in the area below the
+        search box. html is OK
+        """
         return self.format_result(dossier)
 
     def get_objects(self, ids):
-        """ given a list of ids, return the objects ordered as you would like them on the admin page.
-            this is for displaying the currently selected items (in the case of a ManyToMany field)
+        """
+        given a list of ids, return the objects ordered as you would like
+        them on the admin page.  this is for displaying the currently
+        selected items (in the case of a ManyToMany field)
         """
         return rh.Dossier.objects.filter(pk__in=ids)
index 40dce68..0537d61 100644 (file)
@@ -1,5 +1,6 @@
 # -*- encoding: utf-8 -*-
-from dae.decorators import user_in_dae_groupes as in_dae_groupes
+
+from project.dae.decorators import user_in_dae_groupes as in_dae_groupes
 
 # Ajout de variables accessibles dans les templates (pour tester permissions dans templates)
    
index 0d8d55f..cdfda26 100644 (file)
@@ -1,16 +1,16 @@
 # -*- encoding: utf-8 -*-
 
-from django.db.models import Q
 from django.contrib import messages
-from django.contrib.auth.decorators import user_passes_test
-from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
 from django.shortcuts import get_object_or_404
-from workflow import dae_groupes, ETATS_EDITABLE, ETATS_VALIDE, \
-        grp_drh, grp_drh2
-from project.dae import models as dae
+
+from project.decorators import redirect_interdiction
 from project.rh import models as rh
-from utils import get_employe_from_user
+
+from project.dae import models as dae
+from project.dae.groups import dae_groupes, grp_drh, grp_drh2
+from project.dae.workflow import ETATS_EDITABLE, ETATS_VALIDE
+
 
 def user_in_dae_groupes(user):
     """
@@ -21,38 +21,29 @@ def user_in_dae_groupes(user):
             return True
     return False
 
-def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
-  """
-  Redirection du la page de login avec un message d'erreur.
-  """
-  from django.conf import settings
-  from django.contrib.auth import REDIRECT_FIELD_NAME
-  from django.utils.http import urlquote
-  login_url = settings.LOGIN_URL
-  path = urlquote(request.get_full_path())
-  tup = login_url, REDIRECT_FIELD_NAME, path
-  messages.add_message(request, messages.ERROR, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
-  return HttpResponseRedirect('%s?%s=%s' % tup)
-
 def dae_groupe_requis(fn):
     """
-    L'accès à la plateforme nécessite d'appartenir au moins à un groupe,
-    ou d'être superuser. De cette manière l'autentification AUF fonctionnera
-    toujours, il suffit de mettre le nouvel employé dans le groupe qui le concerne.
+    L'accès à la plateforme nécessite d'appartenir au moins à un groupe, ou
+    d'être superuser. De cette manière l'autentification AUF fonctionnera
+    toujours, il suffit de mettre le nouvel employé dans le groupe qui le
+    concerne.
     """
     def inner(request, *args, **kwargs):
         user = request.user
 
         if user.is_superuser or user_in_dae_groupes(user):
             return fn(request, *args, **kwargs)
-        else :
-            msg = u"Votre compte ne permet pas d'accéder à cette partie de l'application."
+        else:
+            msg = u"Votre compte ne permet pas d'accéder à cette partie " \
+                    u"de l'application."
             return redirect_interdiction(request, msg)
     return inner
 
+
 def poste_dans_ma_region_ou_service(fn):
     """
-    Test si le user connecté appartient bien à la même région ou service que le poste.
+    Test si le user connecté appartient bien à la même région ou service que
+    le poste.
     """
     def inner(request, *args, **kwargs):
         user = request.user
@@ -75,27 +66,32 @@ def poste_dans_ma_region_ou_service(fn):
         postes = Poste.objects.ma_region_ou_service(user).filter(id=id)
         if len(postes) > 0:
             return fn(request, *args, **kwargs)
-        else :
+        else:
             msg = u"Vous n'avez pas le droit de consulter ce poste."
             return redirect_interdiction(request, msg)
     return inner
 
+
 def dossier_dans_ma_region_ou_service(fn):
     """
-    Test si le user connecté appartient bien à la même région ou service que le poste.
+    Test si le user connecté appartient bien à la même région ou service que
+    le poste.
     """
     def inner(request, *args, **kwargs):
         user = request.user
         poste_key = kwargs.get('key', None)
         dossier_id = kwargs.get('dossier_id', None)
 
-        # Si on s'intéresse à un dossier, on teste la validation avec le poste associé
+        # Si on s'intéresse à un dossier, on teste la validation avec le
+        # poste associé
         if dossier_id is not None:
-            dossiers = dae.Dossier.objects.ma_region_ou_service(user).filter(id=dossier_id)
+            dossiers = dae.Dossier.objects.ma_region_ou_service(user) \
+                    .filter(id=dossier_id)
             if len(dossiers) > 0:
                 return fn(request, *args, **kwargs)
-            else :
-                msg = u"Vous n'avez pas le droit de consulter ce dossier d'embauche."
+            else:
+                msg = u"Vous n'avez pas le droit de consulter " \
+                        u"ce dossier d'embauche."
                 return redirect_interdiction(request, msg)
 
         # Autoriser la création d'une nouvelle demande
@@ -103,26 +99,32 @@ def dossier_dans_ma_region_ou_service(fn):
             return fn(request, *args, **kwargs)
         # On est en train de répondre à un poste
         else:
-            return poste_dans_ma_region_ou_service(fn)(request, *args, **kwargs)
+            return poste_dans_ma_region_ou_service(fn)(
+                request, *args, **kwargs
+            )
     return inner
 
+
 def vieux_dossier_dans_ma_region_ou_service(fn):
     """
-    Test si le user connecté appartient bien à la même région ou service que le poste.
+    Test si le user connecté appartient bien à la même région ou service que
+    le poste.
     """
     def inner(request, *args, **kwargs):
         user = request.user
         dossier_id = kwargs.get('dossier_id', None)
-        dossiers = rh.Dossier.objects.ma_region_ou_service(user).filter(id=dossier_id)
+        dossiers = rh.Dossier.objects.ma_region_ou_service(user) \
+                .filter(id=dossier_id)
         if len(dossiers) > 0:
             return fn(request, *args, **kwargs)
         else:
-            msg = u"Vous n'avez pas le droit de consulter ce dossier d'embauche."
+            msg = u"Vous n'avez pas le droit de consulter " \
+                    u"ce dossier d'embauche."
             return redirect_interdiction(request, msg)
 
-
     return inner
 
+
 def employe_dans_ma_region_ou_service(fn):
     """
     Test d'accès à un employé
@@ -134,12 +136,13 @@ def employe_dans_ma_region_ou_service(fn):
         employe_key = kwargs.get('employe_key')
         if employe_key in autorises:
             return fn(request, *args, **kwargs)
-        else :
+        else:
             msg = u"Vous n'avez pas le droit de consulter cet employé."
             return redirect_interdiction(request, msg)
 
     return inner
 
+
 def dossier_est_modifiable(fn):
     def inner(request, *args, **kwargs):
         dossier_id = kwargs.get('dossier_id', None)
@@ -148,12 +151,14 @@ def dossier_est_modifiable(fn):
             dossier = dae.Dossier.objects.get(id=dossier_id)
             if not (dossier.etat in ETATS_EDITABLE and
                     (grp_drh in user_groupes or grp_drh2 in user_groupes or
-                     dossier in dae.Dossier.objects.mes_choses_a_faire(request.user).all())):
+                     dossier in dae.Dossier.objects \
+                     .mes_choses_a_faire(request.user).all())):
                 msg = u"Ce dossier d'embauche ne peut plus être modifié."
                 return redirect_interdiction(request, msg)
         return fn(request, *args, **kwargs)
     return inner
 
+
 def poste_est_modifiable(fn):
     def inner(request, *args, **kwargs):
         key = kwargs.get('key', None)
@@ -161,13 +166,16 @@ def poste_est_modifiable(fn):
             poste_id = key.split('-')[1]
             poste = dae.Poste.objects.get(id=poste_id)
             if grp_drh not in request.user.groups.all() and \
-               (poste.etat not in ETATS_EDITABLE or poste not in dae.Poste.objects.mes_choses_a_faire(request.user).all()):
+               (poste.etat not in ETATS_EDITABLE \
+                or poste not in dae.Poste.objects \
+                .mes_choses_a_faire(request.user).all()):
                 msg = u"Ce poste ne peut plus être modifié."
                 return redirect_interdiction(request, msg)
 
         return fn(request, *args, **kwargs)
     return inner
 
+
 def get_contrat(fn):
     """Ce décorateur s'attend à ce que le premier argument de la vue décorée
        soit l'ID d'un contrat. Il vérifie les permissions, puis transforme
@@ -178,7 +186,8 @@ def get_contrat(fn):
         user_groupes = request.user.groups.all()
         if not (dossier.etat in ETATS_VALIDE and
                 (grp_drh in user_groupes or grp_drh2 in user_groupes or
-                 dossier in dae.Dossier.objects.mes_choses_a_faire(request.user).all())):
+                 dossier in dae.Dossier.objects \
+                 .mes_choses_a_faire(request.user).all())):
             return redirect_interdiction(request)
         return fn(request, contrat, *args, **kwargs)
     return inner
index 9cfb165..d9b7299 100644 (file)
@@ -2,22 +2,25 @@
 
 import datetime
 
-from auf.django.workflow.forms import WorkflowFormMixin
-from auf.django.references import models as ref
-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 ajax_select.fields import AutoCompleteSelectField
+
+from auf.django.references import models as ref
+from auf.django.workflow.forms import WorkflowFormMixin
+
 from project.rh import models as rh
+from project.groups import \
+        get_employe_from_user, is_user_dans_services_centraux
+
+from project.dae import models as dae
 from project.dae.workflow import \
         grp_drh, POSTE_ETATS_BOUTONS, DOSSIER_ETAT_FINALISE, \
         POSTE_ETAT_FINALISE
-
+        
 
 def _implantation_choices(obj, request):
     # TRAITEMENT NORMAL
diff --git a/project/dae/groups.py b/project/dae/groups.py
new file mode 100644 (file)
index 0000000..f10216f
--- /dev/null
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+
+from project.groups import \
+        grp_drh, grp_drh2, grp_administrateurs, grp_service_utilisateurs, \
+        grp_correspondants_rh, grp_directeurs_bureau, grp_accior, grp_abf, \
+        grp_haute_direction
+
+dae_groupes = (
+    grp_correspondants_rh,
+    grp_administrateurs,
+    grp_directeurs_bureau,
+    grp_drh,
+    grp_drh2,
+    grp_accior,
+    grp_abf,
+    grp_haute_direction,
+    grp_service_utilisateurs,
+)
index 35800b4..7061ca5 100644 (file)
@@ -1,9 +1,10 @@
 # encoding: utf-8
 
+from django.conf import settings
 from django.core.mail import send_mail
 from django.core.urlresolvers import reverse
-from django.conf import settings
-from dae.workflow import grp_drh
+
+from project.dae.workflow import grp_drh
 
 
 def send_drh_finalisation_mail(request, dossier):
diff --git a/project/dae/management/__init__.py b/project/dae/management/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project/dae/management/commands/__init__.py b/project/dae/management/commands/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
index c639906..dbcb0a6 100644 (file)
@@ -1,21 +1,18 @@
 # -*- encoding: utf-8 -*-
 
-from django.db import models
 from django.db.models import Q
-from utils import get_employe_from_user
-from workflow import MAP_GROUPE_ETATS_A_FAIRE, DOSSIER_ETAT_FINALISE, \
-                        POSTE_ETAT_FINALISE
-from workflow import grp_drh, \
-                     grp_drh2, \
-                     grp_accior, \
-                     grp_abf, \
-                     grp_haute_direction, \
-                     grp_service_utilisateurs
-
-from rh.managers import DossierManager as RHDossierManager
-from rh.managers import PosteManager as RHPosteManager
-from rh.managers import PosteComparaisonManager as RHPosteComparaisonManager
-from rh.managers import DossierComparaisonManager as RHDossierComparaisonManager
+
+from project.groups import get_employe_from_user
+from project.rh.managers import \
+        DossierManager as RHDossierManager, \
+        PosteManager as RHPosteManager, \
+        PosteComparaisonManager as RHPosteComparaisonManager, \
+        DossierComparaisonManager as RHDossierComparaisonManager
+        
+from project.dae.workflow import MAP_GROUPE_ETATS_A_FAIRE
+from project.dae.workflow import \
+        grp_drh, grp_drh2, grp_accior, \
+        grp_abf, grp_haute_direction, grp_service_utilisateurs
 
 
 class TodoManagerMixin(object):
@@ -31,8 +28,12 @@ class TodoManagerMixin(object):
                 q2 = Q(etat=etat)
                 if g == grp_service_utilisateurs:
                     q2 &= Q(**{self.prefixe_service: employe.service})
-                elif g not in (grp_accior, grp_abf, grp_haute_direction, grp_drh, grp_drh2):
-                    q2 &= Q(**{self.prefixe_implantation: employe.implantation.region})
+                elif g not in (
+                    grp_accior, grp_abf, grp_haute_direction, grp_drh, grp_drh2
+                ):
+                    q2 &= Q(**{
+                        self.prefixe_implantation: employe.implantation.region
+                    })
                 q |= q2
 
         if rien_a_faire:
@@ -42,14 +43,18 @@ class TodoManagerMixin(object):
 
         return qs
 
+
 class DossierManager(RHDossierManager, TodoManagerMixin):
     pass
 
+
 class PosteManager(RHPosteManager, TodoManagerMixin):
     pass
 
+
 class PosteComparaisonManager(RHPosteComparaisonManager, TodoManagerMixin):
     pass
 
+
 class DossierComparaisonManager(RHDossierComparaisonManager, TodoManagerMixin):
     pass
index 27233c9..24823b1 100644 (file)
@@ -3,24 +3,22 @@
 import os
 from datetime import date, timedelta
 
-import reversion
-from auf.django.metadata.models import AUFMetadata
 from django.conf import settings
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.db.models import Q
 
+import reversion
+
+from auf.django.metadata.models import AUFMetadata
+
 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 rh.models import HELP_TEXT_DATE
+from project.rh import models as rh
+from project.rh.models import HELP_TEXT_DATE
 
 # Upload de fichiers
 UPLOAD_STORAGE = FileSystemStorage(settings.PRIVE_MEDIA_ROOT)
@@ -382,14 +380,21 @@ POSTE_FINANCEMENT_CHOICES = (
 
 
 class PosteFinancement(rh.PosteFinancement_):
-    pass
+    poste = models.ForeignKey(
+        Poste, db_column='poste', related_name='dae_financements'
+    )
 
 
 class PostePiece(rh.PostePiece_):
-    pass
+    poste = models.ForeignKey(
+        Poste, db_column='poste', related_name='dae_pieces'
+    )
 
 
 class PosteComparaison(rh.PosteComparaison_):
+    poste = models.ForeignKey(
+        Poste, related_name='dae_comparaisons_internes'
+    )
     statut = models.ForeignKey(
         rh.Statut, related_name='+', verbose_name=u'Statut', null=True,
         blank=True
@@ -457,11 +462,11 @@ COMPTE_COMPTA_CHOICES = (
 
 class Dossier(DossierWorkflow, rh.Dossier_):
     poste = models.ForeignKey(
-        'Poste', db_column='poste', related_name='%(app_label)s_dossiers'
+        'Poste', db_column='poste', related_name='dae_dossiers'
     )
     employe = models.ForeignKey(
         'Employe', db_column='employe',
-        related_name='%(app_label)s_dossiers', verbose_name=u"Employé"
+        related_name='rh_dossiers', verbose_name=u"Employé"
     )
     organisme_bstg_autre = models.CharField(max_length=255,
         verbose_name=u"Autre organisme",
@@ -746,16 +751,22 @@ if not reversion.is_registered(Dossier):
 
 
 class DossierPiece(rh.DossierPiece_):
-    """Documents relatifs au Dossier (à l'occupation de ce poste par employé).
+    """
+    Documents relatifs au Dossier (à l'occupation de ce poste par employé).
     Ex.: Lettre de motivation.
     """
-    pass
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='dae_dossierpieces'
+    )
 
 
 class DossierComparaison(rh.DossierComparaison_):
     """
     Photo d'une comparaison salariale au moment de l'embauche.
     """
+    dossier = models.ForeignKey(
+        Dossier, related_name='dae_comparaisons'
+    )
     statut = models.ForeignKey(
         rh.Statut, related_name='+', verbose_name='Statut', null=True,
         blank=True
@@ -769,10 +780,14 @@ class DossierComparaison(rh.DossierComparaison_):
 ### RÉMUNÉRATION
 
 class Remuneration(rh.Remuneration_):
-    pass
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='dae_remunerations'
+    )
 
 
 ### CONTRATS
 
 class Contrat(rh.Contrat_):
-    pass
+    dossier = models.ForeignKey(
+        Dossier, db_column='dossier', related_name='dae_contrats'
+    )
index 30a2de1..4d8b00f 100644 (file)
@@ -1,8 +1,9 @@
 from auf.django.permissions import allow
 
-import dae.models as dae
-from dae.workflow import grp_drh, grp_drh2, grp_haute_direction
-from dae.decorators import user_in_dae_groupes
+from project.dae.decorators import user_in_dae_groupes
+from project.dae.groups import grp_drh, grp_drh2, grp_haute_direction
+import project.dae.models as dae
+
 
 def user_in_group(*groups):
     def test(user, obj):
index 399e048..917be61 100644 (file)
@@ -3,8 +3,11 @@
 import os
 
 from django import template
+
+from project.groups import grp_correspondants_rh, grp_administrateurs, grp_drh
+
 from project.dae.workflow import ETATS_EDITABLE
-from project.rh.groups import grp_correspondants_rh, grp_administrateurs, grp_drh
+
 
 register = template.Library()
 
index 951662f..e866c25 100644 (file)
@@ -1,4 +1,5 @@
 # -*- encoding: utf-8 -*
+
 from django.conf.urls.defaults import patterns, url
 
 urlpatterns = patterns(
diff --git a/project/dae/utils.py b/project/dae/utils.py
deleted file mode 100644 (file)
index 95dc3bd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-import auf.django.references.models as ref
-
-def get_employe_from_user(user):
-  """
-  Retourne un employé AUF à partir de son user Django. 
-  """
-  try:
-      employe = ref.Authentification.objects.get(courriel=user.email).id
-  except:
-      raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email)
-  return employe
-
-def is_user_dans_services_centraux(user):
-    employe = get_employe_from_user(user)
-    if employe.id == 12: # monique chéry gère les DAE des amériques
-        return False
-    return employe.implantation_id in (15, 19)
-
-def is_user_dans_region(user):
-    employe = get_employe_from_user(user)
-    return not is_user_dans_services_centraux(user)
-
-
index 1cefbfa..acfa7af 100644 (file)
@@ -4,7 +4,6 @@ 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
@@ -12,13 +11,17 @@ 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.shortcuts import redirect, render, get_object_or_404
+
 from sendfile import sendfile
 
+from auf.django.permissions.decorators import get_object
+
+from project.decorators import redirect_interdiction
+
 from project.dae import models as dae
 from project.dae.decorators import \
-        redirect_interdiction, dae_groupe_requis, \
+        dae_groupe_requis, \
         poste_dans_ma_region_ou_service, \
         dossier_dans_ma_region_ou_service, \
         vieux_dossier_dans_ma_region_ou_service, \
@@ -55,7 +58,7 @@ def devises():
 
 @dae_groupe_requis
 def index(request):
-    return render_to_response('dae/index.html', {}, RequestContext(request))
+    return render(request, 'dae/index.html', {})
 
 
 ### POSTE
@@ -87,9 +90,7 @@ def poste_consulter(request, key):
         'comparaisons_internes': comparaisons_internes
     }
 
-    return render_to_response(
-        'dae/poste_consulter.html', vars, RequestContext(request)
-    )
+    return render(request, 'dae/poste_consulter.html', vars)
 
 
 def poste_importer(request, id):
@@ -101,9 +102,10 @@ def poste_importer(request, id):
         else:
             return redirect('poste_consulter', 'dae-' + id)
     else:
-        return render_to_response('dae/poste_importer.html', {
-            'poste': poste_dae
-        }, RequestContext(request))
+        c = {
+            'poste': poste_dae,
+        }
+        return render(request, 'dae/poste_importer.html', c)
 
 
 @dae_groupe_requis
@@ -206,7 +208,7 @@ def poste(request, key=None):
         comparaisons_formset=comparaisons_formset
     ))
 
-    return render_to_response('dae/poste.html', vars, RequestContext(request))
+    return render(request, 'dae/poste.html', vars)
 
 
 @dae_groupe_requis
@@ -224,10 +226,11 @@ def postes_liste(request):
             .extra(select=extra_select) \
             .filter(~Q(etat=POSTE_ETAT_FINALISE)) \
             .order_by('-date_creation')
-    return render_to_response('dae/postes_liste.html', {
+    c = {
         'postes_a_traiter': postes_a_traiter,
         'postes_en_cours': postes_en_cours,
-    }, RequestContext(request))
+    }
+    return render(request, 'dae/postes_liste.html', c)
 
 
 @login_required
@@ -283,10 +286,7 @@ def embauche_consulter(request, dossier_id):
         'comparaisons_internes': comparaisons_internes,
         'comparaisons': comparaisons
     }
-
-    return render_to_response(
-        'dae/embauche_consulter.html', vars, RequestContext(request)
-    )
+    return render(request, 'dae/embauche_consulter.html', vars)
 
 
 @dae_groupe_requis
@@ -300,16 +300,18 @@ def embauche_importer(request, dossier_id=None):
         else:
             return redirect('embauches_finalisees')
     else:
-        return render_to_response('dae/embauche_importer.html', {
-            'dossier': dossier_dae
-        }, RequestContext(request))
+        c = {
+            'dossier': dossier_dae,
+        }
+        return render(request, 'dae/embauche_importer.html', c)
 
 
 @dae_groupe_requis
 def embauche_choisir_poste(request):
-    return render_to_response('dae/embauche-choisir-poste.html', {
-        'form': ChoosePosteForm(request=request)
-    }, RequestContext(request))
+    c = {
+        'form': ChoosePosteForm(request=request),
+    }
+    return render(request, 'dae/embauche-choisir-poste.html', c)
 
 
 @dae_groupe_requis
@@ -432,8 +434,7 @@ def embauche(request, key=None, dossier_id=None):
                 )
     except dae.Poste.DoesNotExist:
         comparaisons_internes = []
-
-    return render_to_response('dae/embauche.html', {
+    c = {
         'type_remun': filtered_type_remun(),
         'devises': devises(),
         'poste': poste,
@@ -442,8 +443,9 @@ def embauche(request, key=None, dossier_id=None):
         'remunForm': remunForm,
         'comparaisons_formset': comparaisons_formset,
         'forms': dict(employe=employe_form, dossier=dossier_form, ),
-        'comparaisons_internes': comparaisons_internes
-    }, RequestContext(request))
+        'comparaisons_internes': comparaisons_internes,
+    }
+    return render(request, 'dae/embauche.html', c)
 
 
 @dae_groupe_requis
@@ -464,10 +466,11 @@ def embauches_liste(request):
             .extra(select=extra_select) \
             .order_by('-date_creation') \
             .exclude(etat=DOSSIER_ETAT_FINALISE)
-    return render_to_response('dae/embauches_liste.html', {
+    c = {
         'embauches_a_traiter': embauches_a_traiter,
         'embauches_en_cours': embauches_en_cours,
-    }, RequestContext(request))
+    }
+    return render(request, 'dae/embauches_liste.html', c)
 
 
 @dae_groupe_requis
@@ -541,11 +544,12 @@ def embauches_finalisees(request):
         page = paginator.page(request.GET.get('page', 1))
     except InvalidPage:
         page = paginator.page(1)
-
-    return render_to_response('dae/embauches_finalisees.html', {
+        
+    c = {
         'embauches': page,
-        'search_form': search_form
-    }, RequestContext(request))
+        'search_form': search_form,
+    }
+    return render(request, 'dae/embauches_finalisees.html', c)
 
 
 def employe(request, key):
@@ -588,9 +592,10 @@ def contrat_supprimer(request, contrat):
         if 'oui' in request.POST:
             contrat.delete()
         return redirect('embauche_consulter', dossier_id=contrat.dossier.id)
-    return render_to_response('dae/contrat-supprimer.html', {
-        'contrat': contrat
-    }, RequestContext(request))
+    c = {
+        'contrat': contrat,
+    }
+    return render(request, 'dae/contrat-supprimer.html', c)
 
 
 @dae_groupe_requis
@@ -608,9 +613,11 @@ def embauche_ajouter_contrat(request, dossier_id=None):
             return redirect('embauche_consulter', dossier_id=dossier.id)
     else:
         form = ContratForm()
-    return render_to_response('dae/embauche-ajouter-contrat.html', {
-        'form': form
-    }, RequestContext(request))
+        
+    c = {
+        'form': form,
+    }
+    return render(request, 'dae/embauche-ajouter-contrat.html', c)
 
 
 ### DAE NUMERISEE
@@ -629,9 +636,11 @@ def dae_numerisee_modifier(request, dossier):
             return redirect('embauche_consulter', dossier_id=dossier.id)
     else:
         form = DAENumeriseeForm(instance=dossier)
-    return render_to_response('dae/dae_numerisee_modifier.html', {
-        'form': form
-    }, RequestContext(request))
+        
+    c = {
+        'form': form,
+    }
+    return render(request, 'dae/dae_numerisee_modifier.html', c)
 
 
 @get_object(dae.Dossier, 'modifier_dae_numerisee')
@@ -641,9 +650,7 @@ 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(request, 'dae/dae_numerisee_supprimer.html', {})
 
 
 # AJAX SECURISE
@@ -713,8 +720,7 @@ def dossier(request, poste_key, employe_key):
 
     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))
+    return render(request, 'dae/embauche-dossier.html', vars)
 
 
 #  Cette fonction est appelée à partir de fonctions déjà sécurisée
@@ -948,8 +954,10 @@ def add_remun(request, dossier, type_remun):
     dae.Remuneration(dossier=dossier, devise=dossier.devise,
                      type=type_remun).save()
 
-    return render_to_response('dae/embauche-remun.html', dict(dossier=dossier),
-                              RequestContext(request))
+    c = {
+        'dossier': dossier,
+    }
+    return render(request, 'dae/embauche-remun.html', c)
 
 
 def salaire(request, implantation, devise, classement):
index b22924e..bb3fb44 100644 (file)
@@ -1,9 +1,13 @@
 # -*- encoding: utf-8 -*-
 
-from django.contrib.auth.models import Group
 from auf.django.workflow.models import WorkflowMixin
-from utils import is_user_dans_services_centraux, is_user_dans_region
-from rh.groups import *
+
+from project.groups import \
+        grp_drh, grp_drh2, grp_administrateurs, grp_service_utilisateurs, \
+        grp_correspondants_rh, grp_directeurs_bureau, grp_accior, grp_abf, \
+        grp_haute_direction
+from project.groups import \
+        is_user_dans_services_centraux, is_user_dans_region
 
 # codes états
 POSTE_ETAT_BROUILLON = 'BROUILLON'
@@ -41,120 +45,123 @@ POSTE_ACTION_FINALISER = 'FINALISER'
 
 #libellés états
 POSTE_ETATS = {
-    POSTE_ETAT_BROUILLON : u"En rédaction",
-    POSTE_ETAT_ADMINISTRATEUR : u"Validation de l'administrateur",
-    POSTE_ETAT_DIRECTEUR_BUREAU : u"Directeur de bureau",
-    POSTE_ETAT_SERVICE_UTILISATEURS : u"Service utilisateurs",
-    POSTE_ETAT_DRH_CONTROLE : u"Validation DRH",
-    POSTE_ETAT_DRH_2 : u"Validation DRH 2",
-    POSTE_ETAT_DEMANDE_MODIF : u"Demande de modification",
-    POSTE_ETAT_ACCIOR : u"ACCIOR",
-    POSTE_ETAT_ABF : u"ABF",
-    POSTE_ETAT_HAUTE_DIRECTION : u"Validation : Secrétaire général / Recteur",
-    POSTE_ETAT_DEMANDE_JUSTIF : u"Demande de justification",
-    POSTE_ETAT_REGION_FINALISATION : u'Retour à la région',
-    POSTE_ETAT_DRH_FINALISATION : u'Retour à la DRH',
-    POSTE_ETAT_FINALISE : u'Finalisée'
+    POSTE_ETAT_BROUILLON: u"En rédaction",
+    POSTE_ETAT_ADMINISTRATEUR: u"Validation de l'administrateur",
+    POSTE_ETAT_DIRECTEUR_BUREAU: u"Directeur de bureau",
+    POSTE_ETAT_SERVICE_UTILISATEURS: u"Service utilisateurs",
+    POSTE_ETAT_DRH_CONTROLE: u"Validation DRH",
+    POSTE_ETAT_DRH_2: u"Validation DRH 2",
+    POSTE_ETAT_DEMANDE_MODIF: u"Demande de modification",
+    POSTE_ETAT_ACCIOR: u"ACCIOR",
+    POSTE_ETAT_ABF: u"ABF",
+    POSTE_ETAT_HAUTE_DIRECTION: u"Validation : Secrétaire général / Recteur",
+    POSTE_ETAT_DEMANDE_JUSTIF: u"Demande de justification",
+    POSTE_ETAT_REGION_FINALISATION: u'Retour à la région',
+    POSTE_ETAT_DRH_FINALISATION: u'Retour à la DRH',
+    POSTE_ETAT_FINALISE: u'Finalisée'
     }
 
 #libellés états pour boutons
 POSTE_ETATS_BOUTONS = {
-    POSTE_ETAT_DIRECTEUR_BUREAU : u"Envoyer au directeur de bureau",
-    POSTE_ETAT_SERVICE_UTILISATEURS : u"Envoyer au service utilisateurs",
-    POSTE_ETAT_ADMINISTRATEUR : u"Envoyer à l&#39;adminstrateur",
-    POSTE_ETAT_DRH_CONTROLE : u"Envoyer à la DRH (validation)",
-    POSTE_ETAT_DRH_2 : u"Envoyer à DRH 2",
-    POSTE_ETAT_DEMANDE_MODIF : u"Envoyer une demande de modification",
-    POSTE_ETAT_ACCIOR : u"Envoyer à l&#39;ACCIOR",
-    POSTE_ETAT_ABF : u"Envoyer à l&#39;ABF",
-    POSTE_ETAT_HAUTE_DIRECTION : u"Envoyer à la haute direction",
-    POSTE_ETAT_DEMANDE_JUSTIF : u"Envoyer une demande de justification",
-    POSTE_ETAT_REGION_FINALISATION : u"Retourner à la région pour finalisation",
-    POSTE_ETAT_DRH_FINALISATION : u'Retourner à la DRH pour finalisation',
-    POSTE_ETAT_FINALISE : u'Finaliser'
+    POSTE_ETAT_DIRECTEUR_BUREAU: u"Envoyer au directeur de bureau",
+    POSTE_ETAT_SERVICE_UTILISATEURS: u"Envoyer au service utilisateurs",
+    POSTE_ETAT_ADMINISTRATEUR: u"Envoyer à l&#39;adminstrateur",
+    POSTE_ETAT_DRH_CONTROLE: u"Envoyer à la DRH (validation)",
+    POSTE_ETAT_DRH_2: u"Envoyer à DRH 2",
+    POSTE_ETAT_DEMANDE_MODIF: u"Envoyer une demande de modification",
+    POSTE_ETAT_ACCIOR: u"Envoyer à l&#39;ACCIOR",
+    POSTE_ETAT_ABF: u"Envoyer à l&#39;ABF",
+    POSTE_ETAT_HAUTE_DIRECTION: u"Envoyer à la haute direction",
+    POSTE_ETAT_DEMANDE_JUSTIF: u"Envoyer une demande de justification",
+    POSTE_ETAT_REGION_FINALISATION: u"Retourner à la région pour finalisation",
+    POSTE_ETAT_DRH_FINALISATION: u'Retourner à la DRH pour finalisation',
+    POSTE_ETAT_FINALISE: u'Finaliser'
     }
 
 # définition du worflow séquentiel
 POSTE_ACTIONS = {
-    POSTE_ACTION_ENVOYER_BROUILLON : {
-        'nom' : u'Créer',
-        'etat_initial' : None,
-        'etat_final' : POSTE_ETAT_BROUILLON,
+    POSTE_ACTION_ENVOYER_BROUILLON: {
+        'nom': u'Créer',
+        'etat_initial': None,
+        'etat_final': POSTE_ETAT_BROUILLON,
     },
-    POSTE_ACTION_ENVOYER_ADMINISTRATEUR : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_BROUILLON,),
-        'etat_final' : POSTE_ETAT_ADMINISTRATEUR,
+    POSTE_ACTION_ENVOYER_ADMINISTRATEUR: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_BROUILLON,),
+        'etat_final': POSTE_ETAT_ADMINISTRATEUR,
     },
-    POSTE_ACTION_ENVOYER_SRV_UTILISATEURS : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
-        'etat_final' : POSTE_ETAT_SERVICE_UTILISATEURS,
+    POSTE_ACTION_ENVOYER_SRV_UTILISATEURS: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
+        'etat_final': POSTE_ETAT_SERVICE_UTILISATEURS,
     },
-    POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR,),
-        'etat_final' : POSTE_ETAT_DIRECTEUR_BUREAU,
+    POSTE_ACTION_ENVOYER_DIRECTEUR_BUREAU: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_ADMINISTRATEUR,),
+        'etat_final': POSTE_ETAT_DIRECTEUR_BUREAU,
     },
-    POSTE_ACTION_ENVOYER_DRH_CONTROLE : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU, POSTE_ETAT_SERVICE_UTILISATEURS),
-        'etat_final' : POSTE_ETAT_DRH_CONTROLE,
+    POSTE_ACTION_ENVOYER_DRH_CONTROLE: {
+        'nom': u'Envoyer',
+        'etat_initial': (
+            POSTE_ETAT_ADMINISTRATEUR, POSTE_ETAT_DIRECTEUR_BUREAU,
+            POSTE_ETAT_SERVICE_UTILISATEURS
+        ),
+        'etat_final': POSTE_ETAT_DRH_CONTROLE,
     },
-    POSTE_ACTION_ENVOYER_DRH_2 : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_DRH_CONTROLE,),
-        'etat_final' : POSTE_ETAT_DRH_2,
+    POSTE_ACTION_ENVOYER_DRH_2: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_DRH_CONTROLE,),
+        'etat_final': POSTE_ETAT_DRH_2,
     },
-    POSTE_ACTION_DEMANDE_MODIF : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
+    POSTE_ACTION_DEMANDE_MODIF: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2),
         'etat_final': POSTE_ETAT_DEMANDE_MODIF,
     },
-    POSTE_ACTION_RETOUR_DEMANDE_MODIF : {
+    POSTE_ACTION_RETOUR_DEMANDE_MODIF: {
         'nom': u'Retourner',
         'etat_initial': (POSTE_ETAT_DEMANDE_MODIF,),
         'etat_final': POSTE_ETAT_DRH_CONTROLE,
     },
-    POSTE_ACTION_ENVOYER_ACCIOR : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_DRH_2,),
-        'etat_final' : POSTE_ETAT_ACCIOR,
+    POSTE_ACTION_ENVOYER_ACCIOR: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_DRH_2,),
+        'etat_final': POSTE_ETAT_ACCIOR,
     },
-    POSTE_ACTION_ENVOYER_ABF : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_ACCIOR,),
-        'etat_final' : POSTE_ETAT_ABF,
+    POSTE_ACTION_ENVOYER_ABF: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_ACCIOR,),
+        'etat_final': POSTE_ETAT_ABF,
     },
-    POSTE_ACTION_ENVOYER_HAUTE_DIRECTION : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_ABF,),
-        'etat_final' : POSTE_ETAT_HAUTE_DIRECTION,
+    POSTE_ACTION_ENVOYER_HAUTE_DIRECTION: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_ABF,),
+        'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
     },
-    POSTE_ACTION_DEMANDE_JUSTIF : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION,),
+    POSTE_ACTION_DEMANDE_JUSTIF: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
         'etat_final': POSTE_ETAT_DEMANDE_JUSTIF,
     },
-    POSTE_ACTION_RETOUR_DEMANDE_JUSTIF : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_DEMANDE_JUSTIF,),
+    POSTE_ACTION_RETOUR_DEMANDE_JUSTIF: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_DEMANDE_JUSTIF,),
         'etat_final': POSTE_ETAT_HAUTE_DIRECTION,
     },
-    POSTE_ACTION_ENVOYER_REGION_FINALISATION : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_HAUTE_DIRECTION,),
-        'etat_final' : POSTE_ETAT_REGION_FINALISATION
+    POSTE_ACTION_ENVOYER_REGION_FINALISATION: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_HAUTE_DIRECTION,),
+        'etat_final': POSTE_ETAT_REGION_FINALISATION
     },
-    POSTE_ACTION_ENVOYER_DRH_FINALISATION : {
-        'nom' : u'Envoyer',
-        'etat_initial' : (POSTE_ETAT_REGION_FINALISATION,),
-        'etat_final' : POSTE_ETAT_DRH_FINALISATION,
+    POSTE_ACTION_ENVOYER_DRH_FINALISATION: {
+        'nom': u'Envoyer',
+        'etat_initial': (POSTE_ETAT_REGION_FINALISATION,),
+        'etat_final': POSTE_ETAT_DRH_FINALISATION,
     },
-    POSTE_ACTION_FINALISER : {
-        'nom' : u'Finaliser',
-        'etat_initial' : (POSTE_ETAT_DRH_FINALISATION,),
-        'etat_final' : POSTE_ETAT_FINALISE
+    POSTE_ACTION_FINALISER: {
+        'nom': u'Finaliser',
+        'etat_initial': (POSTE_ETAT_DRH_FINALISATION,),
+        'etat_final': POSTE_ETAT_FINALISE
     },
 }
 
@@ -170,13 +177,13 @@ class PosteWorkflow(WorkflowMixin):
     def acces_directeur_bureau(self, action, request):
         user_groups = request.user.groups.all()
         return grp_drh in user_groups or grp_drh2 in user_groups or \
-                (is_user_dans_services_centraux(request.user) and 
+                (is_user_dans_services_centraux(request.user) and
                  grp_administrateurs in user_groups)
 
     def acces_administrateur(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_correspondants_rh in user_groups or grp_drh in user_groups or \
-                grp_drh2 in user_groups
+        return grp_correspondants_rh in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_drh_controle(self, action, request):
         user_groups = request.user.groups.all()
@@ -199,8 +206,8 @@ class PosteWorkflow(WorkflowMixin):
         if not is_user_dans_services_centraux(request.user):
             return False
         user_groups = request.user.groups.all()
-        return grp_administrateurs in user_groups or grp_drh in user_groups or \
-               grp_drh2 in user_groups
+        return grp_administrateurs in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_accior(self, action, request):
         user_groups = request.user.groups.all()
@@ -208,16 +215,18 @@ class PosteWorkflow(WorkflowMixin):
 
     def acces_abf(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_accior in user_groups or grp_drh in user_groups or grp_drh2 in user_groups
+        return grp_accior in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_haute_direction(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_abf in user_groups or grp_drh in user_groups or grp_drh2 in user_groups
+        return grp_abf in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_region_finalisation(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_haute_direction in user_groups or grp_drh in user_groups or \
-                grp_drh2 in user_groups
+        return grp_haute_direction in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_drh_finalisation(self, action, request):
         user_groups = request.user.groups.all()
@@ -228,13 +237,13 @@ class PosteWorkflow(WorkflowMixin):
 
     def acces_demande_justif(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_haute_direction in user_groups or grp_drh in user_groups or \
-                grp_drh2 in user_groups
+        return grp_haute_direction in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_retour_demande_modif(self, action, request):
         user_groups = request.user.groups.all()
-        return grp_administrateurs in user_groups or grp_drh in user_groups or \
-                grp_drh2 in user_groups
+        return grp_administrateurs in user_groups or grp_drh in user_groups \
+                or grp_drh2 in user_groups
 
     def acces_retour_demande_justif(self, action, request):
         user_groups = request.user.groups.all()
@@ -261,6 +270,7 @@ DOSSIER_ETAT_REGION_FINALISATION = POSTE_ETAT_REGION_FINALISATION
 DOSSIER_ETAT_DRH_FINALISATION = POSTE_ETAT_DRH_FINALISATION
 DOSSIER_ETAT_FINALISE = POSTE_ETAT_FINALISE
 
+
 class DossierWorkflow(PosteWorkflow):
 
     class Meta:
@@ -268,39 +278,48 @@ class DossierWorkflow(PosteWorkflow):
 
 
 MAP_GROUPE_ETATS_A_FAIRE = {
-    grp_correspondants_rh : (POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
-                             POSTE_ETAT_REGION_FINALISATION,
-                             DOSSIER_ETAT_REGION_FINALISATION),
-    grp_service_utilisateurs : (POSTE_ETAT_SERVICE_UTILISATEURS,
-                                DOSSIER_ETAT_SERVICE_UTILISATEURS,),
-    grp_administrateurs : (POSTE_ETAT_ADMINISTRATEUR,
-                           DOSSIER_ETAT_ADMINISTRATEUR,
-                           POSTE_ETAT_DEMANDE_MODIF,
-                           DOSSIER_ETAT_DEMANDE_MODIF,
-                           POSTE_ETAT_REGION_FINALISATION,
-                           DOSSIER_ETAT_REGION_FINALISATION,
-                          ),
-    grp_directeurs_bureau : (POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU, ),
-    grp_drh : (POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_FINALISATION,
-               DOSSIER_ETAT_DRH_CONTROLE, DOSSIER_ETAT_DRH_FINALISATION,
-               POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_DEMANDE_JUSTIF),
-    grp_drh2 : (POSTE_ETAT_DRH_2, DOSSIER_ETAT_DRH_2),
-    grp_accior : (POSTE_ETAT_ACCIOR, DOSSIER_ETAT_ACCIOR, ),
-    grp_abf : (POSTE_ETAT_ABF, DOSSIER_ETAT_ABF, ),
-    grp_haute_direction : (POSTE_ETAT_HAUTE_DIRECTION, DOSSIER_ETAT_HAUTE_DIRECTION, ),
+    grp_correspondants_rh: (
+        POSTE_ETAT_BROUILLON, DOSSIER_ETAT_BROUILLON,
+        POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION
+    ),
+    grp_service_utilisateurs: (
+        POSTE_ETAT_SERVICE_UTILISATEURS,
+        DOSSIER_ETAT_SERVICE_UTILISATEURS
+    ),
+    grp_administrateurs: (
+        POSTE_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_ADMINISTRATEUR,
+        POSTE_ETAT_DEMANDE_MODIF, DOSSIER_ETAT_DEMANDE_MODIF,
+        POSTE_ETAT_REGION_FINALISATION, DOSSIER_ETAT_REGION_FINALISATION,
+    ),
+    grp_directeurs_bureau: (
+        POSTE_ETAT_DIRECTEUR_BUREAU, DOSSIER_ETAT_DIRECTEUR_BUREAU
+    ),
+    grp_drh: (
+        POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_FINALISATION,
+        DOSSIER_ETAT_DRH_CONTROLE, DOSSIER_ETAT_DRH_FINALISATION,
+        POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_DEMANDE_JUSTIF
+    ),
+    grp_drh2: (POSTE_ETAT_DRH_2, DOSSIER_ETAT_DRH_2),
+    grp_accior: (POSTE_ETAT_ACCIOR, DOSSIER_ETAT_ACCIOR),
+    grp_abf: (POSTE_ETAT_ABF, DOSSIER_ETAT_ABF),
+    grp_haute_direction: (
+        POSTE_ETAT_HAUTE_DIRECTION, DOSSIER_ETAT_HAUTE_DIRECTION
+    ),
 }
 
 
-ETATS_EDITABLE = (POSTE_ETAT_BROUILLON, POSTE_ETAT_ADMINISTRATEUR,
-                  POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2,
-                  POSTE_ETAT_DIRECTEUR_BUREAU,
-                  POSTE_ETAT_SERVICE_UTILISATEURS, POSTE_ETAT_DEMANDE_MODIF,
-                  POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_BROUILLON,
-                  DOSSIER_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_DRH_CONTROLE,
-                  DOSSIER_ETAT_DRH_2, DOSSIER_ETAT_DIRECTEUR_BUREAU,
-                  DOSSIER_ETAT_SERVICE_UTILISATEURS,
-                  DOSSIER_ETAT_DEMANDE_MODIF, DOSSIER_ETAT_DEMANDE_JUSTIF,
+ETATS_EDITABLE = (
+    POSTE_ETAT_BROUILLON, POSTE_ETAT_ADMINISTRATEUR,
+    POSTE_ETAT_DRH_CONTROLE, POSTE_ETAT_DRH_2, POSTE_ETAT_DIRECTEUR_BUREAU,
+    POSTE_ETAT_SERVICE_UTILISATEURS, POSTE_ETAT_DEMANDE_MODIF,
+    POSTE_ETAT_DEMANDE_JUSTIF, DOSSIER_ETAT_BROUILLON,
+    DOSSIER_ETAT_ADMINISTRATEUR, DOSSIER_ETAT_DRH_CONTROLE,
+    DOSSIER_ETAT_DRH_2, DOSSIER_ETAT_DIRECTEUR_BUREAU,
+    DOSSIER_ETAT_SERVICE_UTILISATEURS, DOSSIER_ETAT_DEMANDE_MODIF,
+    DOSSIER_ETAT_DEMANDE_JUSTIF,
 )
 
-ETATS_VALIDE = (DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
-                DOSSIER_ETAT_FINALISE)
+ETATS_VALIDE = (
+    DOSSIER_ETAT_REGION_FINALISATION, DOSSIER_ETAT_DRH_FINALISATION,
+    DOSSIER_ETAT_FINALISE
+)
index 84eeba9..cad8b21 100644 (file)
@@ -15,7 +15,6 @@ And to activate the app index dashboard::
 from admin_tools.dashboard import modules, Dashboard, AppIndexDashboard
 from django.utils.translation import ugettext_lazy as _
 
-
 class CustomIndexDashboard(Dashboard):
     """
     Custom index dashboard for SIGMA.
@@ -75,7 +74,6 @@ class CustomIndexDashboard(Dashboard):
             ),
         ))
 
-
 class CustomAppIndexDashboard(AppIndexDashboard):
     """
     Custom app index dashboard for project.
index 87ba763..700d158 100644 (file)
@@ -2,25 +2,17 @@
 """
 Décorateurs AUF
 """
-from django.contrib.auth.decorators import user_passes_test
-from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
-from permissions import is_employe, is_admin
 from django.conf import settings
+from django.contrib import messages
 from django.contrib.auth import REDIRECT_FIELD_NAME
+from django.contrib.auth.decorators import user_passes_test
+from django.core.urlresolvers import reverse
 from django.utils.http import urlquote
-from django.contrib import messages
 
-# Décorateurs des fonctions dans views (pour tester permissions dans views)
-    
-def admin_required(fn):
-    def inner(request, *args, **kwargs):
-        user = request.user
-        if is_admin(user):
-            return fn(request, *args, **kwargs)
-        else :
-            return redirect_interdiction(request)
-    return inner
+from project.groups import grp_drh, grp_drh2, grp_correspondants_rh
+from project.groups import get_employe_from_user
+
 
 def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
     """
@@ -31,5 +23,65 @@ def redirect_interdiction(request, msg=u"Vous n'avez pas accès à cette page"):
     tup = login_url, REDIRECT_FIELD_NAME, path
     messages.add_message(request, messages.ERROR, "Votre compte ne permet pas d'accéder à cette partie de l'application.")
     return HttpResponseRedirect('%s?%s=%s' % tup)
+    
+def in_drh_or_admin(user):
+    """
+    Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
+    """
+    groups = user.groups.all()
+    if user.is_superuser or \
+            grp_drh in groups or \
+            grp_drh2 in groups:
+        return True
+    else:
+        return False
+        
+def drh_or_admin_required(fn):
+    """
+    Teste si un user Django fait parti du groupe DRH, DRH2 ou s'il est admin
+    """
+    def inner(request, *args, **kwargs):
+        user = request.user
+        if in_drh_or_admin(user):
+            return fn(request, *args, **kwargs)
 
+        msg = u"Votre compte ne permet pas d'accéder à " \
+                u"cette partie de l'application."
+        return redirect_interdiction(request, msg)
 
+    return inner
+    
+def region_protected(model):
+    def wrapper(func):
+        def wrapped(request, id):
+            if request.user.is_superuser:
+                return func(request, id)
+            user_groups = request.user.groups.all()
+            if grp_drh in user_groups:
+                return func(request, id)
+            if grp_correspondants_rh in user_groups:
+                employe = get_employe_from_user(request.user)
+                q = Q(**{
+                    model.prefix_implantation: employe.implantation.region
+                })
+                qs = model.objects.filter(q)
+                if int(id) in [o.id for o in qs]:
+                    return func(request, id)
+            return redirect_interdiction(request)
+        return wrapped
+    return wrapper
+    
+def in_one_of_group(groups):
+    """
+    Test si le user appartient au moins 1 des ces groupes
+    """
+    def wrapper(fn):
+        def wrapped(request, *args, **kwargs):
+            user_groups = request.user.groups.all()
+            for g in user_groups:
+                if g in groups:
+                    return fn(request, *args, **kwargs)
+            msg = u"Votre compte ne permet pas d'accéder à cette partie de l'application."
+            return redirect_interdiction(request, msg)
+        return wrapped
+    return wrapper
index abacc3b..3293f64 100644 (file)
@@ -1,6 +1,7 @@
 # -*- encoding: utf-8 -*-
 
 from project.settings import *
+
 DEBUG=True
 TEMPLATE_DEBUG=DEBUG
 
diff --git a/project/groups.py b/project/groups.py
new file mode 100644 (file)
index 0000000..382a808
--- /dev/null
@@ -0,0 +1,58 @@
+# -*- encoding: utf-8 -*-
+
+from django.contrib.auth.models import Group
+import auf.django.references.models as ref
+
+def safe_create_groupe(name):
+    """
+    Création d'un groupe prédéfini. Retourne None, quand la création
+    ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
+    n'a pas été crée encore).
+    """
+    try:
+        grp, created = Group.objects.get_or_create(name=name)
+    except Exception, e:
+        return None
+    return grp
+
+CORRESPONDANT_RH = 'Correspondants RH'
+ADMINISTRATEURS ='Administrateurs' 
+DIRECTEUR_DE_BUREAU = 'Directeurs de bureau'
+DRH_NIVEAU_1 = 'DRH'
+DRH_NIVEAU_2 = 'DRH-2'
+ACCIOR = 'ACCIOR'
+ABF = 'ABF'
+HAUTE_DIRECTION = 'Haute direction'
+SERVICE_UTILISATEURS = 'Service utilisateurs'
+
+# Groupes impliqués dans le Worflow
+grp_correspondants_rh = safe_create_groupe(name=CORRESPONDANT_RH)
+grp_administrateurs = safe_create_groupe(name=ADMINISTRATEURS)
+grp_directeurs_bureau = safe_create_groupe(name=DIRECTEUR_DE_BUREAU)
+grp_drh = safe_create_groupe(name=DRH_NIVEAU_1)
+grp_drh2 = safe_create_groupe(name=DRH_NIVEAU_2)
+grp_accior = safe_create_groupe(name=ACCIOR)
+grp_abf = safe_create_groupe(name=ABF)
+grp_haute_direction = safe_create_groupe(name=HAUTE_DIRECTION)
+grp_service_utilisateurs = safe_create_groupe(name=SERVICE_UTILISATEURS)
+
+def get_employe_from_user(user):
+  """
+  Retourne un employé AUF à partir de son user Django. 
+  """
+  try:
+      employe = ref.Authentification.objects.get(courriel=user.email).id
+      # ajouter coordonnées via ref.Employe? (courriel, tel, etc.)
+  except:
+      raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email)
+  return employe
+
+def is_user_dans_services_centraux(user):
+    employe = get_employe_from_user(user)
+    if employe.id == 12: # monique chéry gère les DAE des amériques
+        return False
+    return employe.implantation_id in (15, 19)
+
+def is_user_dans_region(user):
+    employe = get_employe_from_user(user)
+    return not is_user_dans_services_centraux(user)
diff --git a/project/legacy/__init__.py b/project/legacy/__init__.py
deleted file mode 100644 (file)
index 380aecd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# coding: utf-8
-
-"""
-Application servant à l'importation des données du système de RH PHP4.
-"""
-
-class DatabaseRouter(object):
-
-    """
-    Routeur qui associe les modèles de l'app pg_db à la BD pg_db.
-    """
-
-    def db_for_read(self, model, **hints):
-        if model._meta.app_label == 'legacy':
-            return 'legacy'
-        return None
-
-    db_for_write = db_for_read
-
diff --git a/project/legacy/management/__init__.py b/project/legacy/management/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project/legacy/management/commands/__init__.py b/project/legacy/management/commands/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project/legacy/management/commands/rh_import_legacy.py b/project/legacy/management/commands/rh_import_legacy.py
deleted file mode 100644 (file)
index 1706bd1..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-# coding: utf-8
-
-from datetime import datetime, date, timedelta
-from decimal import Decimal
-
-from django.contrib.auth.models import User
-from django.core.management.base import BaseCommand
-from django.db import connection
-from django.db.models import Q, Max
-
-from auf.django.references import models as ref
-from project.legacy import models as legacy
-from project.rh import models as rh
-
-
-def clean_date(date):
-    if date == '2003-06-31':  # date inexistante (dossier 791-1)
-        return '2003-06-30'
-    elif date:
-        return date
-    else:
-        return None
-
-
-class Command(BaseCommand):
-    help = 'Importe les données du système RH legacy'
-
-    def handle(self, *args, **options):
-        self.stdout.write("Import de rh_classement...\n")
-        sync_classement()
-        self.stdout.write("Import de rh_employe...\n")
-        sync_employe()
-        self.stdout.write("Import de rh_familleemploi...\n")
-        sync_familleemploi()
-        self.stdout.write("Import de rh_typeposte...\n")
-        sync_typeposte()
-        self.stdout.write("Import de rh_service...\n")
-        sync_service()
-        self.stdout.write("Import de rh_poste...\n")
-        sync_poste()
-        self.stdout.write("Import de rh_organismebstg...\n")
-        sync_organismebstg()
-        self.stdout.write("Import de rh_statut...\n")
-        sync_statut()
-        self.stdout.write("Import de rh_tauxchange...\n")
-        sync_tauxchange()
-        self.stdout.write("Import de rh_valeurpoint...\n")
-        sync_valeurpoint()
-        self.stdout.write("Import de rh_typecontrat...\n")
-        sync_typecontrat()
-        self.stdout.write("Import de rh_typerevalorisation...\n")
-        sync_typerevalorisation()
-        self.stdout.write("Import de rh_typeremuneration...\n")
-        sync_typeremuneration()
-        self.stdout.write("Import de rh_dossier...\n")
-        sync_dossier()
-        self.stdout.write("Import de rh_ayantdroit...\n")
-        sync_ayantdroit()
-        self.stdout.write("Setup des devises dans rh.Poste...\n")
-        sync_devises()
-
-
-def sync_classement():
-    connection.cursor().execute('TRUNCATE rh_classement')
-    for classement in legacy.Classement.objects.all():
-        rh.Classement.objects.create(
-            id=classement.id_classement,
-            type=classement.type_classement,
-            echelon=classement.echelon or 0,
-            degre=classement.degre or 0,
-            coefficient=classement.coefficient,
-            commentaire=classement.commentaire,
-            date_modification=classement.date_modif,
-        )
-
-
-def sync_employe():
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_employe')
-    cursor.execute('TRUNCATE rh_employecommentaire')
-    odette = User.objects.get(username='odette.tremblay')
-    for fiche in legacy.Fiches.objects.extra():
-        employe = rh.Employe.objects.create(
-            id=fiche.no_employe,
-            nom=fiche.nom,
-            prenom=fiche.prenom,
-            nationalite_id=fiche.nationalite,
-            date_naissance=(fiche.date_naissance if fiche.date_naissance
-                            else None),
-            genre=fiche.sexe.upper(),
-            situation_famille=(None if fiche.situation_famille == '-1'
-                               else fiche.situation_famille),
-            date_entree=fiche.date_entree,
-            tel_domicile=fiche.tel_domicile,
-            tel_cellulaire=fiche.tel_cellulaire,
-            adresse=fiche.no_rue,
-            ville=fiche.ville,
-            province=fiche.etat_province,
-            code_postal=fiche.code_postal_cedex,
-            pays_id=fiche.pays_iso2 if fiche.pays_iso2 != '-1' else None,
-            date_creation=fiche.date_ouverture,
-            date_modification=fiche.date_maj,
-            supprime=False,
-            nb_postes=None,  # meta
-        )
-        if fiche.remarque:
-            rh.EmployeCommentaire.objects.create(
-                employe=employe,
-                texte=fiche.remarque,
-                owner=odette
-            )
-
-
-def sync_familleemploi():
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_familleemploi')
-    for famille in legacy.FamilleEmploi.objects.all():
-        rh.CategorieEmploi.objects.create(
-            id=famille.id_famille_emploi,
-            nom=famille.famille_emploi,
-        )
-
-
-def sync_typeposte():
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_typeposte')
-    for type in legacy.Postes.objects.all():
-        rh.TypePoste.objects.create(
-            id=type.id_poste,
-            nom=type.titre_poste_m,
-            nom_feminin=type.titre_poste_f,
-            is_responsable=bool(int(type.poste_responsable)),
-            famille_emploi_id=type.id_famille_emploi,
-            date_modification=type.datemaj,
-        )
-
-
-def sync_service():
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_service')
-
-    # Création des services à partir de la table de références
-    for s in ref.Service.objects.all():
-        rh.Service.objects.create(
-            id=s.id,
-            nom=s.nom,
-            archive=not bool(s.actif),
-        )
-
-
-def sync_poste():
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_poste')
-    for poste in legacy.ImplantationPostes.objects \
-                 .select_related('type_poste'):
-
-        # Aller chercher certaines informations dans le dernier dossier
-        # associé à ce poste
-        dossiers = legacy.Dossiers.objects.filter(
-            Q(poste_1=poste.id_implantation_postes) |
-            Q(poste_2=poste.id_implantation_postes)
-        ).order_by('-id_dossier')
-        complement = ''
-
-        if dossiers.count() == 0:
-            service = None
-            poste_du_responsable = None
-            date_debut = None
-            date_fin = None
-
-        if dossiers.count() > 0:
-
-            for d in dossiers:
-                if d.ids_direction_service not in (None, ''):
-                    dossier = d
-                    break
-
-            # Déterminer le service
-            services = dossier.ids_direction_service
-            service = int(services.split('|')[0]) if services else 1
-            if poste.id_implantation_postes == dossier.poste_1:
-                complement = dossier.complement_1
-            else:
-                complement = dossier.complement_2
-            complement = ' ' + complement if complement else ''
-
-            # Déterminer le poste du responsable
-            try:
-                responsable = dossier.responsable
-                dossiers_du_responsable = responsable.dossiers \
-                        .order_by('-id_dossier')
-                if dossiers_du_responsable.count() > 0:
-                    poste_du_responsable = dossiers_du_responsable[0].poste_1
-            except:
-                poste_du_responsable = None
-
-            date_debut = clean_date(min(d.date_debut_mandat for d in dossiers))
-            if '' in (d.date_fin_mandat for d in dossiers):
-                date_fin = None
-            else:
-                date_fin = clean_date(max(d.date_fin_mandat for d in dossiers))
-
-        # Créer le poste
-        rh_poste = rh.Poste.objects.create(
-            id=poste.id_implantation_postes,
-            nom=poste.type_poste.titre_poste_m + complement,
-            nom_feminin=poste.type_poste.titre_poste_f + complement,
-            implantation_id=poste.id_implantation,
-            type_poste_id=poste.type_poste_id,
-            date_modification=poste.date_maj,
-            service_id=service,
-            supprime=False,
-            responsable_id=poste_du_responsable,
-            date_debut=date_debut,
-            date_fin=date_fin,
-        )
-
-        if service is None and poste.actif in ('0', 0, False):
-            rh_poste.date_fin = rh_poste.date_modification
-            rh_poste.save()
-
-
-def sync_organismebstg():
-    connection.cursor().execute('TRUNCATE rh_organismebstg')
-    for organisme in legacy.OrganismesBstg.objects.all():
-        rh.OrganismeBstg.objects.create(
-            id=organisme.id_bstg,
-            nom=organisme.organisme_nom,
-            type=organisme.bstg_type,
-        )
-
-
-def sync_statut():
-    connection.cursor().execute('TRUNCATE rh_statut')
-    for statut in legacy.Statut.objects.all():
-        rh.Statut.objects.create(
-            id=statut.id_statut,
-            code=statut.statut_contractuel,
-            nom=statut.description_statut_contractuel,
-        )
-
-
-def sync_tauxchange():
-    connection.cursor().execute('TRUNCATE rh_tauxchange')
-    connection.cursor().execute('TRUNCATE rh_devise')
-
-    # Certaines devises ont besoin d'un id spécifique (#2581)
-    rh.Devise.objects.create(id=1, code='AMD', nom='Dram arménien')
-    rh.Devise.objects.create(id=2, code='CAD', nom='Dollar canadien')
-    rh.Devise.objects.create(id=3, code='CAN', nom='Dollar canadien')
-    rh.Devise.objects.create(id=4, code='DZD', nom='Dinar algérien')
-    rh.Devise.objects.create(id=5, code='EUR', nom='Euro')
-    rh.Devise.objects.create(id=6, code='GNF', nom='Franc Guinéen')
-    rh.Devise.objects.create(id=7, code='KMF', nom='Franc comorien')
-    rh.Devise.objects.create(id=8, code='LBP', nom='Livre libanaise')
-    rh.Devise.objects.create(id=9, code='MAD', nom='Dirham marocain')
-    rh.Devise.objects.create(id=10, code='MGF', nom='Franc Malgache')
-    rh.Devise.objects.create(id=11, code='MRO', nom='Ouguiya')
-    rh.Devise.objects.create(id=12, code='MUR', nom='Roupie mauricienne')
-    rh.Devise.objects.create(id=13, code='SYP', nom='Livre syrienne')
-    rh.Devise.objects.create(id=14, code='TND', nom='Dinar tunisien')
-    rh.Devise.objects.create(id=15, code='US ', nom='Dollar américain')
-    rh.Devise.objects.create(id=16, code='USD', nom='Dollar américain')
-    rh.Devise.objects.create(id=17, code='VUV', nom='Vatu')
-    rh.Devise.objects.create(id=18, code='XAF', nom='Franc CFA')
-    rh.Devise.objects.create(id=19, code='XOF', nom='Franc CFA')
-
-    for taux in legacy.TauxChangeAnnuel.objects.exclude(taux_annuel=None):
-
-        # Créer la devise
-        devise, created = rh.Devise.objects.get_or_create(
-            code=taux.code_devise
-        )
-        if created:
-            devise.nom = taux.nom_devise
-            devise.save()
-
-        # Créer le taux de change
-        rh.TauxChange.objects.get_or_create(
-            devise=devise,
-            annee=taux.annee,
-            taux=taux.taux_annuel,
-        )
-
-
-def sync_valeurpoint():
-    connection.cursor().execute('TRUNCATE rh_valeurpoint')
-    for vp in legacy.ValeurPoint.objects.all():
-
-        # Trouver la devise associée à cette implantation
-        annee = vp.date_actif[:4]
-        try:
-            taux = legacy.TauxChangeAnnuel.objects.get(
-                annee=annee, id_implantation=vp.id_implantation
-            )
-        except:
-            continue
-        devise = rh.Devise.objects.get(code=taux.code_devise)
-
-        rh.ValeurPoint.objects.create(
-            id=vp.id_valeur_point,
-            valeur=vp.valeur_point,
-            implantation_id=vp.id_implantation,
-            annee=vp.date_actif[:4],
-            devise=devise
-        )
-
-
-def sync_typecontrat():
-    connection.cursor().execute('TRUNCATE rh_typecontrat')
-    for type in legacy.TypeContrat.objects.all():
-        rh.TypeContrat.objects.create(
-            id=type.id_type_contrat,
-            nom=type.nom_contrat,
-            nom_long=type.description_contrat,
-        )
-
-
-def sync_typerevalorisation():
-    connection.cursor().execute('TRUNCATE rh_typerevalorisation')
-    for type in legacy.TypeRevalorisation.objects.all():
-        rh.TypeRevalorisation.objects.create(
-            id=type.id_type_revalorisation,
-            nom=type.type_revalorisation,
-        )
-
-
-def sync_typeremuneration():
-    connection.cursor().execute('TRUNCATE rh_typeremuneration')
-    for type in legacy.TypeRemuneration.objects.all():
-        rh.TypeRemuneration.objects.create(
-            id=type.id_type_remuneration,
-            nom=type.type_remuneration,
-            type_paiement=type.type_paiement,
-            nature_remuneration=type.nature_remuneration,
-        )
-
-
-def sync_dossier():
-    taux_cache = {}
-
-    def get_taux(annee, devise):
-        taux = taux_cache.get((annee, devise))
-        if taux is not None:
-            return taux
-        taux = rh.TauxChange.objects.filter(annee__gte=annee) \
-                .order_by('annee')[0].taux
-        taux_cache[(annee, devise)] = taux
-        return taux
-
-    cursor = connection.cursor()
-    cursor.execute('TRUNCATE rh_contrat')
-    cursor.execute('TRUNCATE rh_dossier')
-    cursor.execute('TRUNCATE rh_remuneration')
-    cursor.execute('TRUNCATE rh_dossiercommentaire')
-    cursor.execute('TRUNCATE rh_responsableimplantation')
-    odette = User.objects.get(username='odette.tremblay')
-    type_contrat_inconnu = rh.TypeContrat.objects.create(
-        nom='Inconnu',
-        nom_long='Inconnu',
-    )
-    dossiers = legacy.Dossiers.objects \
-            .annotate(timestamp_modif=Max('historique__stamp')) \
-            .order_by('no_dossier')
-    for dossier in dossiers:
-        date_modification = datetime.fromtimestamp(dossier.timestamp_modif) \
-                if dossier.timestamp_modif else None
-        dossier1 = rh.Dossier.objects.create(
-            employe_id=dossier.employe_id,
-            poste_id=dossier.poste_1,
-            statut_id=dossier.id_statut,
-            organisme_bstg_id=dossier.id_bstg,
-            statut_residence=('expat' if dossier.id_local_expatrie == 1
-                              else 'local'),
-            classement_id=dossier.id_classement,
-            regime_travail=dossier.regime_travail,
-            date_debut=clean_date(dossier.date_debut_mandat),
-            date_fin=clean_date(dossier.date_fin_mandat),
-            date_modification=date_modification,
-            remplacement=False,
-            supprime=False
-        )
-
-        # Commentaires
-        if dossier.remarque:
-            rh.DossierCommentaire.objects.create(
-                dossier=dossier1,
-                texte=dossier.remarque,
-                owner=odette
-            )
-
-        # Responsables d'implantation
-        today = date.today().isoformat()
-        if not dossier.date_fin_mandat or dossier.date_fin_mandat >= today:
-            if dossier.responsable_implantation_1:
-                responsable, created = rh.ResponsableImplantation.objects \
-                        .get_or_create(
-                            implantation_id=dossier.id_implantation_1
-                        )
-                responsable.employe_id = dossier.employe_id
-                responsable.save()
-            if dossier.responsable_implantation_2:
-                responsable, created = rh.ResponsableImplantation.objects \
-                        .get_or_create(
-                            implantation_id=dossier.id_implantation_2
-                        )
-                responsable.employe_id = dossier.employe_id
-                responsable.save()
-
-        # Contrats
-        rh.Contrat.objects.create(
-            dossier=dossier1,
-            type_contrat_id=dossier.id_type_contrat or type_contrat_inconnu.id,
-            date_debut=clean_date(dossier.date_debut_contrat),
-            date_fin=clean_date(dossier.date_fin_contrat),
-            supprime=False
-        )
-
-        # Rémunération
-        remuns_precedentes = {}
-        charges_precedentes = None
-        pourcentage_charges = 0
-        devise_charges = rh.Devise.objects.get(code='EUR')
-        for remun in legacy.HistoRemuneration.objects \
-                     .filter(no_dossier=dossier.no_dossier) \
-                     .order_by('id_histo_remuneration'):
-
-            # Calcul de la période
-            date_debut = remun.date_effective
-            if date_debut == '200-08-09':
-                date_debut = '2000-08-09'
-            elif date_debut == '2003-06-31':
-                date_debut = '2003-06-30'
-            date_debut = date(
-                int(date_debut[:4]), int(date_debut[5:7]), int(date_debut[8:])
-            )
-            if remun.type_remuneration.type_paiement == 'Ponctuel':
-                date_fin = date_debut
-            else:
-                date_fin = None
-                remun_precedente = remuns_precedentes.get(
-                    remun.type_remuneration_id
-                )
-                if remun_precedente:
-                    if str(remun_precedente.date_debut) == str(date_debut):
-                        remun_precedente.delete()
-                    else:
-                        remun_precedente.date_fin = \
-                                date_debut - timedelta(days=1)
-                        remun_precedente.save()
-
-            # Création de la ligne de rémunération
-            if remun.type_remuneration.nature_remuneration != 'Charges' \
-               and remun.montant != 0:
-                devise, created = rh.Devise.objects.get_or_create(
-                    code=remun.code_devise
-                )
-
-                rh_remun = rh.Remuneration.objects.create(
-                    dossier=dossier1,
-                    type_id=remun.type_remuneration_id,
-                    type_revalorisation_id=remun.id_type_revalorisation,
-                    montant=remun.montant,
-                    devise=devise,
-                    supprime=False,
-                    date_debut=date_debut,
-                    date_fin=date_fin
-                )
-
-                # Se souvenir de ce type de rémunération
-                if remun.type_remuneration.type_paiement == u'Régulier':
-                    remuns_precedentes[remun.type_remuneration_id] = rh_remun
-
-            # Charges patronales
-            if remun.type_remuneration.nature_remuneration == 'Charges':
-                pourcentage_charges = remun.pourcentage
-
-            if remun.type_remuneration.nature_remuneration == 'Traitement':
-                devise_charges = rh.Devise.objects.get(code=remun.code_devise)
-
-            if remun.type_remuneration.type_paiement == u'Régulier':
-                charges = 0
-                annee_charges = date_debut.year
-                taux2 = get_taux(annee_charges, devise_charges)
-                if pourcentage_charges:
-                    for remun_precedente in remuns_precedentes.values():
-                        montant = remun_precedente.montant
-                        devise = remun_precedente.devise
-                        if devise != devise_charges:
-                            taux1 = get_taux(annee_charges, devise)
-                            montant = (montant * Decimal(str(taux1)) /
-                                       Decimal(str(taux2)))
-                        if remun_precedente.type.nature_remuneration == \
-                           'Traitement':
-                            montant = (
-                                montant *
-                                remun_precedente.dossier.regime_travail / 100
-                            )
-                        montant = montant * pourcentage_charges / 100
-                        montant.quantize(remun_precedente.montant)
-                        charges += montant
-                    charges = charges * pourcentage_charges / 100
-                    if charges_precedentes:
-                        if charges_precedentes.date_debut == date_debut:
-                            charges_precedentes.delete()
-                        else:
-                            charges_precedentes.date_fin = date_debut - \
-                                    timedelta(days=1)
-                            charges_precedentes.save()
-                    if charges > 0 and \
-                       (not charges_precedentes or
-                        charges_precedentes.montant != charges or
-                        charges_precedentes.date_debut == date_debut):
-                        charges_precedentes = rh.Remuneration.objects.create(
-                            dossier=dossier1,
-                            type_id=17,
-                            type_revalorisation_id=None,
-                            montant=Decimal(str(charges)),
-                            devise=devise_charges,
-                            supprime=False,
-                            date_debut=date_debut,
-                            commentaire=(u'Charges patronales: %s%%' %
-                                         pourcentage_charges)
-                        )
-
-        # Dossier différent pour le deuxième poste
-        if dossier.poste_2:
-            dossier2 = rh.Dossier.objects.create(
-                employe_id=dossier.employe_id,
-                poste_id=dossier.poste_2,
-                statut_id=dossier.id_statut,
-                organisme_bstg_id=dossier.id_bstg,
-                statut_residence=('expat' if dossier.id_local_expatrie == 1
-                                  else 'local'),
-                classement_id=dossier.id_classement,
-                regime_travail=dossier.regime_travail,
-                date_debut=clean_date(dossier.date_debut_mandat),
-                date_fin=clean_date(dossier.date_fin_mandat),
-                remplacement=False,
-                supprime=False
-            )
-            if dossier.remarque:
-                rh.DossierCommentaire.objects.create(
-                    dossier=dossier2,
-                    texte=dossier.remarque,
-                    owner=odette
-                )
-            rh.Contrat.objects.create(
-                dossier=dossier2,
-                type_contrat_id=(dossier.id_type_contrat or
-                                 type_contrat_inconnu.id),
-                date_debut=clean_date(dossier.date_debut_contrat),
-                date_fin=clean_date(dossier.date_fin_contrat),
-                supprime=False
-            )
-
-
-def sync_ayantdroit():
-    connection.cursor().execute('TRUNCATE rh_ayantdroit')
-    odette = User.objects.get(username='odette.tremblay')
-    for ad in legacy.AyantDroit.objects.all():
-        rh_ad = rh.AyantDroit.objects.create(
-            id=ad.id_ayant_droit,
-            nom=ad.nom_ayant_droit,
-            prenom=ad.prenom_ayant_droit,
-            employe_id=ad.no_employe,
-            lien_parente=(None if ad.lien_parente == 'Autre'
-                          else ad.lien_parente),
-        )
-        if ad.commentaire_ayant_droit:
-            rh.AyantDroitCommentaire.objects.create(
-                ayant_droit=rh_ad,
-                texte=ad.commentaire_ayant_droit,
-                owner=odette
-            )
-
-
-def sync_devises():
-    for p in rh.Poste.objects.all():
-        if p.implantation is not None:
-            qs = rh.ValeurPoint.objects \
-                    .filter(implantation=p.implantation) \
-                    .order_by('-id')
-            if qs.exists():
-                point = qs[0]
-                p.devise_min = point.devise
-                p.devise_max = point.devise
-                p.devise_comparaison = point.devise
-                p.save()
diff --git a/project/legacy/models.py b/project/legacy/models.py
deleted file mode 100644 (file)
index f08a581..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-from django.db import models
-
-class Classement(models.Model):
-    id_classement = models.IntegerField(primary_key=True)
-    type_classement = models.CharField(max_length=4)
-    echelon = models.CharField(max_length=127)
-    degre = models.CharField(max_length=32)
-    commentaire = models.CharField(max_length=127)
-    coefficient = models.FloatField()
-    date_modif = models.CharField(max_length=10)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'classement'
-        managed = False
-
-class Fiches(models.Model):
-    no_employe = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=128)
-    prenom = models.CharField(max_length=128)
-    date_ouverture = models.CharField(max_length=10)
-    situation_famille = models.CharField(max_length=2)
-    nationalite = models.CharField(max_length=2)
-    tel_domicile = models.CharField(max_length=20)
-    tel_cellulaire = models.CharField(max_length=20)
-    no_rue = models.CharField(max_length=128)
-    ville = models.CharField(max_length=128)
-    etat_province = models.CharField(max_length=128)
-    code_postal_cedex = models.CharField(max_length=64)
-    pays_iso2 = models.CharField(max_length=2)
-    sexe = models.CharField(max_length=1)
-    date_entree = models.CharField(max_length=10)
-    remarque = models.TextField()
-    date_maj = models.CharField(max_length=10)
-    date_naissance = models.CharField(max_length=10)
-    class Meta:
-        db_table = u'fiches'
-        managed = False
-
-class Dossiers(models.Model):
-    id_dossier = models.IntegerField(primary_key=True)
-    no_dossier = models.CharField(max_length=10, unique=True)
-    employe = models.ForeignKey(Fiches, related_name='dossiers', db_column='no_employe')
-    id_implantation_1 = models.SmallIntegerField()
-    poste_1 = models.SmallIntegerField()
-    complement_1 = models.CharField(max_length=128)
-    id_implantation_2 = models.SmallIntegerField()
-    poste_2 = models.SmallIntegerField()
-    complement_2 = models.CharField(max_length=128)
-    ids_direction_service = models.CharField(max_length=128)
-    remplacement_de = models.IntegerField()
-    responsable = models.ForeignKey(Fiches, related_name='+', db_column='responsable')
-    id_local_expatrie = models.IntegerField()
-    date_debut_mandat = models.CharField(max_length=10)
-    date_fin_mandat = models.CharField(max_length=10)
-    id_statut = models.IntegerField()
-    id_bstg = models.IntegerField()
-    id_classement = models.IntegerField()
-    id_type_contrat = models.IntegerField()
-    regime_travail = models.SmallIntegerField()
-    date_debut_contrat = models.CharField(max_length=10)
-    date_fin_contrat = models.CharField(max_length=10)
-    remarque = models.TextField()
-    responsable_implantation_1 = models.IntegerField()
-    responsable_implantation_2 = models.IntegerField()
-    class Meta:
-        db_table = u'dossiers'
-        managed = False
-
-class TypeRemuneration(models.Model):
-    id_type_remuneration = models.IntegerField(primary_key=True)
-    type_remuneration = models.CharField(max_length=127)
-    type_paiement = models.CharField(max_length=127)
-    nature_remuneration = models.CharField(max_length=127)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'type_remuneration'
-        managed = False
-
-class HistoRemuneration(models.Model):
-    id_histo_remuneration = models.IntegerField(primary_key=True)
-    type_remuneration = models.ForeignKey(TypeRemuneration, db_column='id_type_remuneration',
-                                          related_name='+')
-    no_dossier = models.CharField(max_length=10)
-    montant = models.DecimalField(max_digits=20, decimal_places=4)
-    pourcentage = models.DecimalField(max_digits=20, decimal_places=4)
-    date_effective = models.CharField(max_length=10)
-    id_type_revalorisation = models.IntegerField()
-    code_devise = models.CharField(max_length=3)
-    usager = models.IntegerField()
-    stamp = models.IntegerField()
-    desactive = models.BooleanField()
-    desactive_par = models.IntegerField()
-    annule = models.BooleanField()
-    annule_par = models.IntegerField()
-    stamp_annule = models.IntegerField()
-    stamp_desactive = models.IntegerField()
-    class Meta:
-        db_table = u'histo_remuneration'
-        managed = False
-
-class HistoFiches(models.Model):
-    id_histo = models.IntegerField(primary_key=True)
-    fiche = models.ForeignKey(Fiches, db_column='no_employe', related_name='historique')
-    nom = models.CharField(max_length=128)
-    prenom = models.CharField(max_length=128)
-    date_ouverture = models.CharField(max_length=10)
-    situation_famille = models.CharField(max_length=2)
-    nationalite = models.CharField(max_length=2)
-    tel_domicile = models.CharField(max_length=20)
-    tel_cellulaire = models.CharField(max_length=20)
-    no_rue = models.CharField(max_length=128)
-    ville = models.CharField(max_length=128)
-    etat_province = models.CharField(max_length=128)
-    code_postal_cedex = models.CharField(max_length=64)
-    pays_iso2 = models.CharField(max_length=2)
-    sexe = models.CharField(max_length=1)
-    date_entree = models.CharField(max_length=10)
-    remarque = models.TextField()
-    date_maj = models.CharField(max_length=10)
-    date_naissance = models.CharField(max_length=10)
-    stamp = models.IntegerField()
-    ip = models.CharField(max_length=15)
-    usager = models.IntegerField()
-    action = models.CharField(max_length=1)
-    requete = models.TextField()
-    class Meta:
-        db_table = u'histo_fiches'
-        managed = False
-
-class HistoDossiers(models.Model):
-    id_histo = models.IntegerField(primary_key=True)
-    dossier = models.ForeignKey(Dossiers, db_column='no_dossier',
-                                related_name='historique',
-                                to_field='no_dossier')
-    no_employe = models.IntegerField()
-    id_implantation_1 = models.SmallIntegerField()
-    poste_1 = models.SmallIntegerField()
-    complement_1 = models.CharField(max_length=128)
-    id_implantation_2 = models.SmallIntegerField()
-    poste_2 = models.SmallIntegerField()
-    complement_2 = models.CharField(max_length=128)
-    ids_direction_service = models.CharField(max_length=128)
-    remplacement_de = models.IntegerField()
-    responsable = models.IntegerField()
-    id_local_expatrie = models.IntegerField()
-    date_debut_mandat = models.CharField(max_length=10)
-    date_fin_mandat = models.CharField(max_length=10)
-    id_statut = models.IntegerField()
-    id_bstg = models.IntegerField()
-    id_classement = models.IntegerField()
-    id_type_contrat = models.IntegerField()
-    regime_travail = models.SmallIntegerField()
-    date_debut_contrat = models.CharField(max_length=10)
-    date_fin_contrat = models.CharField(max_length=10)
-    remarque = models.TextField()
-    stamp = models.IntegerField()
-    ip = models.CharField(max_length=15)
-    usager = models.IntegerField()
-    action = models.CharField(max_length=1)
-    requete = models.TextField()
-    responsable_implantation_1 = models.IntegerField()
-    responsable_implantation_2 = models.IntegerField()
-    class Meta:
-        db_table = u'histo_dossiers'
-        managed = False
-
-class FamilleEmploi(models.Model):
-    id_famille_emploi = models.SmallIntegerField(primary_key=True)
-    famille_emploi = models.CharField(max_length=64)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'famille_emploi'
-        managed = False
-
-class DirectionService(models.Model):
-    id_direction_service = models.SmallIntegerField(primary_key=True)
-    direction_service = models.CharField(max_length=256)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'direction_service'
-        managed = False
-
-class Postes(models.Model):
-    id_poste = models.SmallIntegerField(primary_key=True)
-    id_famille_emploi = models.SmallIntegerField()
-    titre_poste_m = models.CharField(max_length=128)
-    titre_poste_f = models.CharField(max_length=128)
-    datemaj = models.CharField(max_length=10)
-    actif = models.CharField(max_length=1)
-    poste_responsable = models.CharField(max_length=1)
-    description = models.CharField(max_length=128)
-    class Meta:
-        db_table = u'postes'
-        managed = False
-
-class ImplantationPostes(models.Model):
-    id_implantation_postes = models.IntegerField(primary_key=True)
-    id_implantation = models.SmallIntegerField()
-    proportion = models.FloatField()
-    date_maj = models.CharField(max_length=10)
-    actif = models.TextField() # This field type is a guess.
-    type_poste = models.ForeignKey(Postes, db_column='id_poste')
-    class Meta:
-        db_table = u'implantation_postes'
-        managed = False
-
-class OrganismesBstg(models.Model):
-    id_bstg = models.IntegerField(primary_key=True)
-    organisme_nom = models.CharField(max_length=128)
-    actif = models.IntegerField()
-    bstg_type = models.CharField(max_length=3)
-    class Meta:
-        db_table = u'organismes_bstg'
-        managed = False
-
-class TauxChangeAnnuel(models.Model):
-    id_taux_change_annuel = models.IntegerField(primary_key=True)
-    code_devise = models.CharField(max_length=3)
-    nom_devise = models.CharField(max_length=32)
-    id_implantation = models.SmallIntegerField()
-    taux_annuel = models.DecimalField(max_digits=100, decimal_places=50)
-    annee = models.CharField(max_length=4)
-    class Meta:
-        db_table = u'taux_change_annuel'
-        managed = False
-
-class ValeurPoint(models.Model):
-    id_valeur_point = models.IntegerField(primary_key=True)
-    id_implantation = models.SmallIntegerField()
-    valeur_point = models.DecimalField(max_digits=100, decimal_places=50)
-    date_actif = models.CharField(max_length=10)
-    class Meta:
-        db_table = u'valeur_point'
-        managed = False
-
-class TypeContrat(models.Model):
-    id_type_contrat = models.IntegerField(primary_key=True)
-    nom_contrat = models.CharField(max_length=127)
-    categorie = models.CharField(max_length=1)
-    description_contrat = models.CharField(max_length=127)
-    actif_contrat = models.IntegerField()
-    class Meta:
-        db_table = u'type_contrat'
-        managed = False
-
-class TypeRevalorisation(models.Model):
-    id_type_revalorisation = models.IntegerField(primary_key=True)
-    type_revalorisation = models.CharField(max_length=127)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'type_revalorisation'
-        managed = False
-
-class Statut(models.Model):
-    id_statut = models.IntegerField(primary_key=True)
-    statut_contractuel = models.CharField(max_length=127)
-    type_contrat = models.CharField(max_length=1)
-    description_statut_contractuel = models.CharField(max_length=127)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'statut'
-        managed = False
-
-class TypeRemuneration(models.Model):
-    id_type_remuneration = models.IntegerField(primary_key=True)
-    type_remuneration = models.CharField(max_length=127)
-    type_paiement = models.CharField(max_length=127)
-    nature_remuneration = models.CharField(max_length=127)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'type_remuneration'
-        managed = False
-
-class AyantDroit(models.Model):
-    id_ayant_droit = models.IntegerField(primary_key=True)
-    no_employe = models.IntegerField()
-    nom_ayant_droit = models.CharField(max_length=128)
-    prenom_ayant_droit = models.CharField(max_length=128)
-    commentaire_ayant_droit = models.CharField(max_length=512)
-    lien_parente = models.CharField(max_length=10)
-    actif = models.IntegerField()
-    class Meta:
-        db_table = u'ayant_droit'
-        managed = False
-
diff --git a/project/lib.py b/project/lib.py
deleted file mode 100644 (file)
index a1a5481..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-import datamaster_modeles.models as ref
-import rh.models as rh
-from operator import itemgetter
-
-def get_employe_from_user(user):
-    """
-    Retourne un employé AUF (rh.Employe) à partir de son user Django. 
-    """
-    try:
-        ref_employe = ref.Authentification.objects.get(courriel=user.email).id
-        employe = rh.Employe.objects.get(id=ref_employe.id)
-        ref_employe = ref.Employe.objects.get(id=employe.id)
-        employe.courriel = ref_employe.courriel
-        employe.tel_pro_poste = ref_employe.telephone_poste
-        employe.tel_pro_ip = ref_employe.telephone_ip
-    except:
-        #raise Exception(u"L'employé avec le courriel %s n'a pas été trouvé dans le référentiel." % user.email)
-        employe = rh.Employe.objects.none()
-    return employe
-
-def get_employe_from_id(id):
-    """
-    Retourne un employé AUF (rh.Employe) à partir de son id. 
-    """
-    try:
-        employe = rh.Employe.objects.get(id=id)
-        employe.courriel = ref.Employe.objects.get(id=employe.id).courriel
-    except:
-        employe = rh.Employe.objects.none()
-    return employe
-    
-def safe_create_groupe(name=None, id=None):
-    """
-    Création d'un groupe prédéfini. Retourne None, quand la création
-    ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
-    n'a pas été créée encore).
-    """
-    try:
-        if name:
-            grp, created = Group.objects.get_or_create(name=name)
-        elif id :
-            grp, created = Group.objects.get_or_create(id=id)
-    except:
-        return None
-    return grp
-
index 5926f0c..07fc806 100644 (file)
@@ -12,8 +12,10 @@ from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _
 
 from admin_tools.menu import items, Menu
-from project.rh.decorators import in_drh_or_admin
-from project.rh import groups
+
+from project.decorators import in_drh_or_admin
+from project import groups
+
 
 class CustomMenu(Menu):
     """
@@ -69,6 +71,12 @@ class CustomMenu(Menu):
                         items.MenuItem('Organigramme par bureau', reverse('admin:rh_regionproxy_changelist')),
                         ]
                     ),
+                items.MenuItem('Requêtes',
+                    children=[
+                        items.MenuItem('Requêtes sauvegardées', reverse('admin:django_qbe_savedquery_changelist')),
+                        items.MenuItem('Constructeur de requêtes', reverse('qbe_form')),
+                        ]
+                    ),
             ]
         super(CustomMenu, self).init_with_context(context)
         
index a6a96e2..a283dc8 100644 (file)
@@ -1,23 +1,33 @@
 # -*- encoding: utf-8 -*-
 
-################################################################################
+############################################################################
 #
 # PATCH AJAX SELECT FIELD : pour gérer le fait que certaine FK ne sont pas
-# forcément mappé sur la PK du modèle, dans notre cas ici c'est le modèle 
-# Pays qui dispose d'un pk sur son id mais les fk sont mappé sur le champs 'code'
+# forcément mappé sur la PK du modèle, dans notre cas ici c'est le modèle
+# Pays qui dispose d'un pk sur son id mais les fk sont mappé sur le champs
+# 'code'
 #
-################################################################################
-from ajax_select import get_lookup
-from django.contrib.admin import site
-from django.db import models
+###########################################################################
+
+from django.conf import settings
+from django.core.urlresolvers import reverse
 from django.http import HttpResponse
+from django.forms.util import flatatt
+from django.utils.safestring import mark_safe
+from django.template.loader import render_to_string
+
 import ajax_select.views
+from ajax_select import get_lookup
+from ajax_select.fields import AutoCompleteSelectWidget
+
 
-def fk_ajax_lookup(request,channel):
-    """ this view supplies results for both foreign keys and many to many fields """
+def fk_ajax_lookup(request, channel):
+    """
+    this view supplies results for both foreign keys and many to many fields
+    """
 
-    # it should come in as GET unless global $.ajaxSetup({type:"POST"}) has been set
-    # in which case we'll support POST
+    # it should come in as GET unless global $.ajaxSetup({type:"POST"}) has
+    # been set in which case we'll support POST
     if request.method == "GET":
         # we could also insist on an ajax request
         if 'q' not in request.GET:
@@ -25,33 +35,30 @@ def fk_ajax_lookup(request,channel):
         query = request.GET['q']
     else:
         if 'q' not in request.POST:
-            return HttpResponse('') # suspicious
+            return HttpResponse('')  # suspicious
         query = request.POST['q']
-    
+
     lookup_channel = get_lookup(channel)
-    
+
     if query:
-        instances = lookup_channel.get_query(query,request)
+        instances = lookup_channel.get_query(query, request)
     else:
         instances = []
 
     results = []
     for item in instances:
         itemf = lookup_channel.format_item(item)
-        itemf = itemf.replace("\n","").replace("|","&brvbar;")
+        itemf = itemf.replace("\n", "").replace("|", "&brvbar;")
         resultf = lookup_channel.format_result(item)
-        resultf = resultf.replace("\n","").replace("|","&brvbar;")
+        resultf = resultf.replace("\n", "").replace("|", "&brvbar;")
         fk = getattr(lookup_channel, 'fk_key', None)
         if fk is not None:
             id = getattr(item, fk)
         else:
             id = item.pk
-        results.append( "|".join((unicode(id),itemf,resultf)) )
+        results.append("|".join((unicode(id), itemf, resultf)))
     return HttpResponse("\n".join(results))
 
-ajax_select.views.ajax_lookup = fk_ajax_lookup
-
-from ajax_select.fields import AutoCompleteSelectWidget
 
 def value_from_datadict(self, data, files, name):
 
@@ -64,17 +71,10 @@ def value_from_datadict(self, data, files, name):
     else:
         return None
 
-AutoCompleteSelectWidget.value_from_datadict = value_from_datadict
-
-from django.conf import settings
-from django.core.urlresolvers import reverse
-from django.utils.safestring import mark_safe
-from django.forms.util import flatatt
-from django.template.loader import render_to_string
 
 def patched_render(self, name, value, attrs=None):
     """
-    prevention contre les choses supprimees   
+    prevention contre les choses supprimees
     """
     # precheck existence valeur
     lookup = get_lookup(self.channel)
@@ -95,25 +95,32 @@ def patched_render(self, name, value, attrs=None):
             obj = objs[0]
         except IndexError:
             raise Exception("%s cannot find object:%s" % (lookup, value))
-        current_result = mark_safe(lookup.format_item( obj ) )
+        current_result = mark_safe(lookup.format_item(obj))
     else:
         current_result = ''
 
     context = {
             'name': name,
-            'html_id' : self.html_id,
-            'lookup_url': reverse('ajax_lookup',kwargs={'channel':self.channel}),
+            'html_id': self.html_id,
+            'lookup_url': reverse(
+                'ajax_lookup', kwargs={'channel': self.channel}
+            ),
             'current_id': value,
             'current_result': current_result,
             'help_text': self.help_text,
             'extra_attrs': mark_safe(flatatt(final_attrs)),
-            'func_slug': self.html_id.replace("-",""),
-            'add_link' : self.add_link,
-            'admin_media_prefix' : settings.ADMIN_MEDIA_PREFIX
+            'func_slug': self.html_id.replace("-", ""),
+            'add_link': self.add_link,
+            'admin_media_prefix': settings.ADMIN_MEDIA_PREFIX
             }
 
-    return mark_safe(render_to_string(('autocompleteselect_%s.html' % self.channel, 'autocompleteselect.html'),context))
-
+    return mark_safe(render_to_string((
+        'autocompleteselect_%s.html' % self.channel,
+        'autocompleteselect.html'
+    ), context))
 
 
-AutoCompleteSelectWidget.render = patched_render
+def patch_ajax_selects():
+    ajax_select.views.ajax_lookup = fk_ajax_lookup
+    AutoCompleteSelectWidget.render = patched_render
+    AutoCompleteSelectWidget.value_from_datadict = value_from_datadict
diff --git a/project/old_rh_v1/__init__.py b/project/old_rh_v1/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project/old_rh_v1/migrations/0001_initial.py b/project/old_rh_v1/migrations/0001_initial.py
deleted file mode 100644 (file)
index 7842892..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-# 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 'Employe'
-        db.create_table('rh_v1_employe', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('prenom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('nationalite', self.gf('django.db.models.fields.related.ForeignKey')(related_name='nationalite', db_column='nationalite', to=orm['datamaster_modeles.Pays'])),
-            ('date_naissance', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
-            ('genre', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)),
-            ('situation_famille', self.gf('django.db.models.fields.CharField')(max_length=1, null=True, blank=True)),
-            ('date_entree', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
-            ('tel_domicile', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('tel_cellulaire', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('adresse', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('no_rue', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('ville', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('province', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('code_postal', self.gf('django.db.models.fields.CharField')(max_length=255, null=True, blank=True)),
-            ('pays', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='pays', null=True, db_column='pays', to=orm['datamaster_modeles.Pays'])),
-            ('date_creation', self.gf('django.db.models.fields.DateField')(auto_now_add=True, blank=True)),
-            ('date_maj', self.gf('django.db.models.fields.DateField')(auto_now=True, blank=True)),
-            ('commentaire', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('rh_v1', ['Employe'])
-
-        # Adding model 'Dossier'
-        db.create_table('rh_v1_dossier', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=10)),
-            ('employe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Employe'], db_column='employe')),
-            ('poste1', self.gf('django.db.models.fields.related.ForeignKey')(related_name='poste1', db_column='poste1', to=orm['rh_v1.Poste'])),
-            ('implantation1', self.gf('django.db.models.fields.related.ForeignKey')(related_name='implantation1', db_column='implantation1', to=orm['datamaster_modeles.Implantation'])),
-            ('complement1', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('responsable_implantation1', self.gf('django.db.models.fields.IntegerField')()),
-            ('poste2', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='poste2', null=True, db_column='poste2', to=orm['rh_v1.Poste'])),
-            ('implantation2', self.gf('django.db.models.fields.related.ForeignKey')(related_name='implantation2', db_column='implantation2', to=orm['datamaster_modeles.Implantation'])),
-            ('complement2', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('responsable_implantation2', self.gf('django.db.models.fields.IntegerField')()),
-            ('service', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Service'], db_column='service')),
-            ('responsable', self.gf('django.db.models.fields.related.ForeignKey')(related_name='responsable', db_column='responsable', to=orm['rh_v1.Employe'])),
-            ('remplacement_de', self.gf('django.db.models.fields.related.ForeignKey')(related_name='remplacement_de', db_column='remplacement_de', to=orm['rh_v1.Employe'])),
-            ('type', self.gf('django.db.models.fields.CharField')(max_length=1)),
-            ('statut', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Statut'], db_column='statut')),
-            ('organisme_bstg', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.OrganismeBstg'], db_column='organisme_bstg')),
-            ('classement', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Classement'], db_column='classement')),
-            ('regime_travail', self.gf('django.db.models.fields.IntegerField')()),
-            ('mandat_date_debut', self.gf('django.db.models.fields.DateField')()),
-            ('mandat_date_fin', self.gf('django.db.models.fields.DateField')()),
-            ('contrat_date_debut', self.gf('django.db.models.fields.DateField')()),
-            ('contrat_date_fin', self.gf('django.db.models.fields.DateField')()),
-            ('type_contrat', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypeContrat'], db_column='type_contrat')),
-            ('date_creation', self.gf('django.db.models.fields.DateField')(auto_now_add=True, blank=True)),
-            ('date_maj', self.gf('django.db.models.fields.DateField')(auto_now=True, blank=True)),
-            ('commentaire', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('rh_v1', ['Dossier'])
-
-        # Adding model 'AyantDroit'
-        db.create_table('rh_v1_ayantdroit', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('prenom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('employe', self.gf('django.db.models.fields.related.ForeignKey')(related_name='employe', db_column='employe', to=orm['rh_v1.Employe'])),
-            ('lien_parente', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)),
-            ('commentaire', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['AyantDroit'])
-
-        # Adding model 'Remuneration'
-        db.create_table('rh_v1_remuneration', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('dossier', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Dossier'], db_column='dossier')),
-            ('type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypeRemuneration'], db_column='type')),
-            ('type_revalorisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypeRevalorisation'], db_column='type_revalorisation')),
-            ('montant', self.gf('django.db.models.fields.FloatField')()),
-            ('devise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Devise'], to_field='code', db_column='devise')),
-            ('date_effective', self.gf('django.db.models.fields.DateField')()),
-            ('pourcentage', self.gf('django.db.models.fields.IntegerField')()),
-            ('date_creation', self.gf('django.db.models.fields.DateField')(auto_now_add=True, blank=True)),
-            ('user_creation', self.gf('django.db.models.fields.IntegerField')()),
-            ('desactivation', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('date_desactivation', self.gf('django.db.models.fields.DateField')()),
-            ('user_desactivation', self.gf('django.db.models.fields.IntegerField')()),
-            ('annulation', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('date_annulation', self.gf('django.db.models.fields.DateField')()),
-            ('user_annulation', self.gf('django.db.models.fields.IntegerField')()),
-        ))
-        db.send_create_signal('rh_v1', ['Remuneration'])
-
-        # Adding model 'FamilleEmploi'
-        db.create_table('rh_v1_familleemploi', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['FamilleEmploi'])
-
-        # Adding model 'TypePoste'
-        db.create_table('rh_v1_typeposte', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('nom_feminin', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('description', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('is_responsable', self.gf('django.db.models.fields.BooleanField')(default=False)),
-            ('famille_emploi', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.FamilleEmploi'], db_column='famille_emploi')),
-            ('date_modification', self.gf('django.db.models.fields.DateField')(auto_now=True, blank=True)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['TypePoste'])
-
-        # Adding model 'TypeRemuneration'
-        db.create_table('rh_v1_typeremuneration', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('type_paiement', self.gf('django.db.models.fields.CharField')(max_length=30)),
-            ('nature_remuneration', self.gf('django.db.models.fields.CharField')(max_length=30)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['TypeRemuneration'])
-
-        # Adding model 'TypeRevalorisation'
-        db.create_table('rh_v1_typerevalorisation', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['TypeRevalorisation'])
-
-        # Adding model 'Poste'
-        db.create_table('rh_v1_poste', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('implantation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['datamaster_modeles.Implantation'], db_column='implantation')),
-            ('type_poste', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypePoste'], db_column='type_poste')),
-            ('proportion', self.gf('django.db.models.fields.CharField')(max_length=10)),
-            ('date_modification', self.gf('django.db.models.fields.DateField')(auto_now=True, blank=True)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['Poste'])
-
-        # Adding model 'Service'
-        db.create_table('rh_v1_service', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['Service'])
-
-        # Adding model 'OrganismeBstg'
-        db.create_table('rh_v1_organismebstg', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('type', self.gf('django.db.models.fields.CharField')(max_length=10)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['OrganismeBstg'])
-
-        # Adding model 'Statut'
-        db.create_table('rh_v1_statut', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=25)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('type_contrat_categorie', self.gf('django.db.models.fields.CharField')(max_length=10)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['Statut'])
-
-        # Adding model 'Classement'
-        db.create_table('rh_v1_classement', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('type', self.gf('django.db.models.fields.CharField')(max_length=10)),
-            ('echelon', self.gf('django.db.models.fields.IntegerField')()),
-            ('degre', self.gf('django.db.models.fields.IntegerField')()),
-            ('coefficient', self.gf('django.db.models.fields.FloatField')()),
-            ('commentaire', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('date_modification', self.gf('django.db.models.fields.DateField')(auto_now=True, blank=True)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['Classement'])
-
-        # Adding model 'ValeurPoint'
-        db.create_table('rh_v1_valeurpoint', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('valeur', self.gf('django.db.models.fields.FloatField')()),
-            ('implantation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['datamaster_modeles.Implantation'], db_column='implantation')),
-            ('annee', self.gf('django.db.models.fields.IntegerField')()),
-        ))
-        db.send_create_signal('rh_v1', ['ValeurPoint'])
-
-        # Adding model 'TauxChange'
-        db.create_table('rh_v1_tauxchange', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('devise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Devise'], to_field='code', db_column='devise')),
-            ('annee', self.gf('django.db.models.fields.IntegerField')()),
-            ('taux', self.gf('django.db.models.fields.FloatField')()),
-            ('implantation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['datamaster_modeles.Implantation'], db_column='implantation')),
-        ))
-        db.send_create_signal('rh_v1', ['TauxChange'])
-
-        # Adding model 'Devise'
-        db.create_table('rh_v1_devise', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('code', self.gf('django.db.models.fields.CharField')(unique=True, max_length=10)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-        ))
-        db.send_create_signal('rh_v1', ['Devise'])
-
-        # Adding model 'TypeContrat'
-        db.create_table('rh_v1_typecontrat', (
-            ('id', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('nom', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('nom_long', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('categorie', self.gf('django.db.models.fields.CharField')(max_length=10)),
-            ('actif', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('rh_v1', ['TypeContrat'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'Employe'
-        db.delete_table('rh_v1_employe')
-
-        # Deleting model 'Dossier'
-        db.delete_table('rh_v1_dossier')
-
-        # Deleting model 'AyantDroit'
-        db.delete_table('rh_v1_ayantdroit')
-
-        # Deleting model 'Remuneration'
-        db.delete_table('rh_v1_remuneration')
-
-        # Deleting model 'FamilleEmploi'
-        db.delete_table('rh_v1_familleemploi')
-
-        # Deleting model 'TypePoste'
-        db.delete_table('rh_v1_typeposte')
-
-        # Deleting model 'TypeRemuneration'
-        db.delete_table('rh_v1_typeremuneration')
-
-        # Deleting model 'TypeRevalorisation'
-        db.delete_table('rh_v1_typerevalorisation')
-
-        # Deleting model 'Poste'
-        db.delete_table('rh_v1_poste')
-
-        # Deleting model 'Service'
-        db.delete_table('rh_v1_service')
-
-        # Deleting model 'OrganismeBstg'
-        db.delete_table('rh_v1_organismebstg')
-
-        # Deleting model 'Statut'
-        db.delete_table('rh_v1_statut')
-
-        # Deleting model 'Classement'
-        db.delete_table('rh_v1_classement')
-
-        # Deleting model 'ValeurPoint'
-        db.delete_table('rh_v1_valeurpoint')
-
-        # Deleting model 'TauxChange'
-        db.delete_table('rh_v1_tauxchange')
-
-        # Deleting model 'Devise'
-        db.delete_table('rh_v1_devise')
-
-        # Deleting model 'TypeContrat'
-        db.delete_table('rh_v1_typecontrat')
-
-
-    models = {
-        'datamaster_modeles.bureau': {
-            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.implantation': {
-            'Meta': {'ordering': "('nom',)", 'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            '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'", 'db_column': "'adresse_physique_pays'", 'to': "orm['datamaster_modeles.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', 'blank': 'True'}),
-            'adresse_postale_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
-            'adresse_postale_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '20', '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', 'blank': 'True'}),
-            'adresse_postale_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_postale'", 'db_column': "'adresse_postale_pays'", 'to': "orm['datamaster_modeles.Pays']"}),
-            'adresse_postale_precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
-            'adresse_postale_precision_avant': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
-            'adresse_postale_region': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
-            'adresse_postale_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
-            'adresse_postale_ville': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'bureau_rattachement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'bureau_rattachement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            '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.IntegerField', [], {'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['datamaster_modeles.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'})
-        },
-        'datamaster_modeles.pays': {
-            'Meta': {'ordering': "('nom',)", 'object_name': 'Pays', 'db_table': "u'ref_pays'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'primary_key': 'True'}),
-            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Bureau']", 'to_field': "'code'", 'db_column': "'code_bureau'"}),
-            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'blank': 'True'}),
-            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {}),
-            '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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.region': {
-            'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'gere_region'", 'db_column': "'implantation_bureau'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.ayantdroit': {
-            'Meta': {'object_name': 'AyantDroit'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employe'", 'db_column': "'employe'", 'to': "orm['rh_v1.Employe']"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.classement': {
-            'Meta': {'object_name': 'Classement'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'coefficient': ('django.db.models.fields.FloatField', [], {}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'degre': ('django.db.models.fields.IntegerField', [], {}),
-            'echelon': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.devise': {
-            'Meta': {'object_name': 'Devise'},
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.dossier': {
-            'Meta': {'object_name': 'Dossier'},
-            'classement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Classement']", 'db_column': "'classement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement1': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement2': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'contrat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Employe']", 'db_column': "'employe'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation1'", 'db_column': "'implantation1'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'implantation2': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation2'", 'db_column': "'implantation2'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'mandat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'mandat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.OrganismeBstg']", 'db_column': "'organisme_bstg'"}),
-            'poste1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'poste1'", 'db_column': "'poste1'", 'to': "orm['rh_v1.Poste']"}),
-            'poste2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste2'", 'null': 'True', 'db_column': "'poste2'", 'to': "orm['rh_v1.Poste']"}),
-            'regime_travail': ('django.db.models.fields.IntegerField', [], {}),
-            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'remplacement_de'", 'db_column': "'remplacement_de'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responsable'", 'db_column': "'responsable'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable_implantation1': ('django.db.models.fields.IntegerField', [], {}),
-            'responsable_implantation2': ('django.db.models.fields.IntegerField', [], {}),
-            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Service']", 'db_column': "'service'"}),
-            'statut': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Statut']", 'db_column': "'statut'"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeContrat']", 'db_column': "'type_contrat'"})
-        },
-        'rh_v1.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'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nationalite'", 'db_column': "'nationalite'", 'to': "orm['datamaster_modeles.Pays']"}),
-            'no_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'pays': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'pays'", 'null': 'True', 'db_column': "'pays'", 'to': "orm['datamaster_modeles.Pays']"}),
-            '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'}),
-            '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'}),
-            'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.familleemploi': {
-            'Meta': {'object_name': 'FamilleEmploi'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.organismebstg': {
-            'Meta': {'object_name': 'OrganismeBstg'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.poste': {
-            'Meta': {'object_name': 'Poste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'proportion': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypePoste']", 'db_column': "'type_poste'"})
-        },
-        'rh_v1.remuneration': {
-            'Meta': {'object_name': 'Remuneration'},
-            'annulation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_annulation': ('django.db.models.fields.DateField', [], {}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_desactivation': ('django.db.models.fields.DateField', [], {}),
-            'date_effective': ('django.db.models.fields.DateField', [], {}),
-            'desactivation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'db_column': "'devise'"}),
-            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Dossier']", 'db_column': "'dossier'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'montant': ('django.db.models.fields.FloatField', [], {}),
-            'pourcentage': ('django.db.models.fields.IntegerField', [], {}),
-            'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRemuneration']", 'db_column': "'type'"}),
-            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRevalorisation']", 'db_column': "'type_revalorisation'"}),
-            'user_annulation': ('django.db.models.fields.IntegerField', [], {}),
-            'user_creation': ('django.db.models.fields.IntegerField', [], {}),
-            'user_desactivation': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'rh_v1.service': {
-            'Meta': {'object_name': 'Service'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.statut': {
-            'Meta': {'object_name': 'Statut'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_contrat_categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.tauxchange': {
-            'Meta': {'object_name': 'TauxChange'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'db_column': "'devise'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'taux': ('django.db.models.fields.FloatField', [], {})
-        },
-        'rh_v1.typecontrat': {
-            'Meta': {'object_name': 'TypeContrat'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeposte': {
-            'Meta': {'object_name': 'TypePoste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.FamilleEmploi']", 'db_column': "'famille_emploi'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeremuneration': {
-            'Meta': {'object_name': 'TypeRemuneration'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'})
-        },
-        'rh_v1.typerevalorisation': {
-            'Meta': {'object_name': 'TypeRevalorisation'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.valeurpoint': {
-            'Meta': {'object_name': 'ValeurPoint'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'valeur': ('django.db.models.fields.FloatField', [], {})
-        }
-    }
-
-    complete_apps = ['rh_v1']
diff --git a/project/old_rh_v1/migrations/0002_auto__chg_field_employe_nationalite__chg_field_employe_pays__chg_field.py b/project/old_rh_v1/migrations/0002_auto__chg_field_employe_nationalite__chg_field_employe_pays__chg_field.py
deleted file mode 100644 (file)
index abe5ea2..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-# 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):
-        
-        # Changing field 'Employe.nationalite'
-        db.alter_column('rh_v1_employe', 'nationalite', self.gf('django.db.models.fields.related.ForeignKey')(to_field='code', db_column='nationalite', to=orm['datamaster_modeles.Pays']))
-
-        # Changing field 'Employe.pays'
-        db.alter_column('rh_v1_employe', 'pays', self.gf('django.db.models.fields.related.ForeignKey')(db_column='pays', to_field='code', to=orm['datamaster_modeles.Pays'], null=True))
-
-        # Changing field 'Remuneration.user_annulation'
-        db.alter_column('rh_v1_remuneration', 'user_annulation', self.gf('django.db.models.fields.IntegerField')(null=True))
-
-        # Changing field 'Remuneration.date_desactivation'
-        db.alter_column('rh_v1_remuneration', 'date_desactivation', self.gf('django.db.models.fields.DateField')(null=True))
-
-        # Changing field 'Remuneration.pourcentage'
-        db.alter_column('rh_v1_remuneration', 'pourcentage', self.gf('django.db.models.fields.IntegerField')(null=True))
-
-        # Changing field 'Remuneration.montant'
-        db.alter_column('rh_v1_remuneration', 'montant', self.gf('django.db.models.fields.FloatField')(null=True))
-
-        # Changing field 'Remuneration.user_creation'
-        db.alter_column('rh_v1_remuneration', 'user_creation', self.gf('django.db.models.fields.IntegerField')(null=True))
-
-        # Changing field 'Remuneration.user_desactivation'
-        db.alter_column('rh_v1_remuneration', 'user_desactivation', self.gf('django.db.models.fields.IntegerField')(null=True))
-
-        # Changing field 'Remuneration.annulation'
-        db.alter_column('rh_v1_remuneration', 'annulation', self.gf('django.db.models.fields.NullBooleanField')(null=True))
-
-        # Changing field 'Remuneration.devise'
-        db.alter_column('rh_v1_remuneration', 'devise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Devise'], to_field='code', null=True, db_column='devise'))
-
-        # Changing field 'Remuneration.date_effective'
-        db.alter_column('rh_v1_remuneration', 'date_effective', self.gf('django.db.models.fields.DateField')(null=True))
-
-        # Changing field 'Remuneration.type_revalorisation'
-        db.alter_column('rh_v1_remuneration', 'type_revalorisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypeRevalorisation'], null=True, db_column='type_revalorisation'))
-
-        # Changing field 'Remuneration.date_annulation'
-        db.alter_column('rh_v1_remuneration', 'date_annulation', self.gf('django.db.models.fields.DateField')(null=True))
-
-        # Changing field 'Remuneration.desactivation'
-        db.alter_column('rh_v1_remuneration', 'desactivation', self.gf('django.db.models.fields.NullBooleanField')(null=True))
-
-
-    def backwards(self, orm):
-        
-        # Changing field 'Employe.nationalite'
-        db.alter_column('rh_v1_employe', 'nationalite', self.gf('django.db.models.fields.related.ForeignKey')(db_column='nationalite', to=orm['datamaster_modeles.Pays']))
-
-        # Changing field 'Employe.pays'
-        db.alter_column('rh_v1_employe', 'pays', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['datamaster_modeles.Pays'], db_column='pays'))
-
-        # Changing field 'Remuneration.user_annulation'
-        db.alter_column('rh_v1_remuneration', 'user_annulation', self.gf('django.db.models.fields.IntegerField')(default=False))
-
-        # Changing field 'Remuneration.date_desactivation'
-        db.alter_column('rh_v1_remuneration', 'date_desactivation', self.gf('django.db.models.fields.DateField')(default=datetime.date(2011, 4, 5)))
-
-        # Changing field 'Remuneration.pourcentage'
-        db.alter_column('rh_v1_remuneration', 'pourcentage', self.gf('django.db.models.fields.IntegerField')(default=0))
-
-        # Changing field 'Remuneration.montant'
-        db.alter_column('rh_v1_remuneration', 'montant', self.gf('django.db.models.fields.FloatField')(default=0))
-
-        # Changing field 'Remuneration.user_creation'
-        db.alter_column('rh_v1_remuneration', 'user_creation', self.gf('django.db.models.fields.IntegerField')(default=datetime.date(2011, 4, 5)))
-
-        # Changing field 'Remuneration.user_desactivation'
-        db.alter_column('rh_v1_remuneration', 'user_desactivation', self.gf('django.db.models.fields.IntegerField')(default=0))
-
-        # Changing field 'Remuneration.annulation'
-        db.alter_column('rh_v1_remuneration', 'annulation', self.gf('django.db.models.fields.BooleanField')())
-
-        # Changing field 'Remuneration.devise'
-        db.alter_column('rh_v1_remuneration', 'devise', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.Devise'], to_field='code', db_column='devise'))
-
-        # Changing field 'Remuneration.date_effective'
-        db.alter_column('rh_v1_remuneration', 'date_effective', self.gf('django.db.models.fields.DateField')(default=datetime.date(2011, 4, 5)))
-
-        # Changing field 'Remuneration.type_revalorisation'
-        db.alter_column('rh_v1_remuneration', 'type_revalorisation', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.TypeRevalorisation'], db_column='type_revalorisation'))
-
-        # Changing field 'Remuneration.date_annulation'
-        db.alter_column('rh_v1_remuneration', 'date_annulation', self.gf('django.db.models.fields.DateField')(default=datetime.date(2011, 4, 5)))
-
-        # Changing field 'Remuneration.desactivation'
-        db.alter_column('rh_v1_remuneration', 'desactivation', self.gf('django.db.models.fields.BooleanField')())
-
-
-    models = {
-        'datamaster_modeles.bureau': {
-            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.implantation': {
-            'Meta': {'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            '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['datamaster_modeles.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['datamaster_modeles.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['datamaster_modeles.Implantation']", 'db_column': "'bureau_rattachement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            '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.IntegerField', [], {'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['datamaster_modeles.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'})
-        },
-        'datamaster_modeles.pays': {
-            'Meta': {'object_name': 'Pays', 'db_table': "u'ref_pays'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
-            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Bureau']", 'to_field': "'code'", 'db_column': "'code_bureau'"}),
-            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'blank': 'True'}),
-            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.region': {
-            'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'gere_region'", 'db_column': "'implantation_bureau'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.ayantdroit': {
-            'Meta': {'object_name': 'AyantDroit'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employe'", 'db_column': "'employe'", 'to': "orm['rh_v1.Employe']"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.classement': {
-            'Meta': {'object_name': 'Classement'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'coefficient': ('django.db.models.fields.FloatField', [], {}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'degre': ('django.db.models.fields.IntegerField', [], {}),
-            'echelon': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.devise': {
-            'Meta': {'object_name': 'Devise'},
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.dossier': {
-            'Meta': {'object_name': 'Dossier'},
-            'classement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Classement']", 'db_column': "'classement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement1': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement2': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'contrat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Employe']", 'db_column': "'employe'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation1'", 'db_column': "'implantation1'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'implantation2': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation2'", 'db_column': "'implantation2'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'mandat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'mandat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.OrganismeBstg']", 'db_column': "'organisme_bstg'"}),
-            'poste1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'poste1'", 'db_column': "'poste1'", 'to': "orm['rh_v1.Poste']"}),
-            'poste2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste2'", 'null': 'True', 'db_column': "'poste2'", 'to': "orm['rh_v1.Poste']"}),
-            'regime_travail': ('django.db.models.fields.IntegerField', [], {}),
-            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'remplacement_de'", 'db_column': "'remplacement_de'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responsable'", 'db_column': "'responsable'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable_implantation1': ('django.db.models.fields.IntegerField', [], {}),
-            'responsable_implantation2': ('django.db.models.fields.IntegerField', [], {}),
-            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Service']", 'db_column': "'service'"}),
-            'statut': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Statut']", 'db_column': "'statut'"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeContrat']", 'db_column': "'type_contrat'"})
-        },
-        'rh_v1.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'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nationalite'", 'to_field': "'code'", 'db_column': "'nationalite'", 'to': "orm['datamaster_modeles.Pays']"}),
-            'no_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pays'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['datamaster_modeles.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'}),
-            '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'}),
-            'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.familleemploi': {
-            'Meta': {'object_name': 'FamilleEmploi'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.organismebstg': {
-            'Meta': {'object_name': 'OrganismeBstg'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.poste': {
-            'Meta': {'object_name': 'Poste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'proportion': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypePoste']", 'db_column': "'type_poste'"})
-        },
-        'rh_v1.remuneration': {
-            'Meta': {'object_name': 'Remuneration'},
-            'annulation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'date_annulation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_desactivation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_effective': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'desactivation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'null': 'True', 'db_column': "'devise'", 'blank': 'True'}),
-            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Dossier']", 'db_column': "'dossier'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'montant': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
-            'pourcentage': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRemuneration']", 'db_column': "'type'"}),
-            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRevalorisation']", 'null': 'True', 'db_column': "'type_revalorisation'", 'blank': 'True'}),
-            'user_annulation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_desactivation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.service': {
-            'Meta': {'object_name': 'Service'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.statut': {
-            'Meta': {'object_name': 'Statut'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_contrat_categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.tauxchange': {
-            'Meta': {'object_name': 'TauxChange'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'db_column': "'devise'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'taux': ('django.db.models.fields.FloatField', [], {})
-        },
-        'rh_v1.typecontrat': {
-            'Meta': {'object_name': 'TypeContrat'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeposte': {
-            'Meta': {'object_name': 'TypePoste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.FamilleEmploi']", 'db_column': "'famille_emploi'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeremuneration': {
-            'Meta': {'object_name': 'TypeRemuneration'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'})
-        },
-        'rh_v1.typerevalorisation': {
-            'Meta': {'object_name': 'TypeRevalorisation'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.valeurpoint': {
-            'Meta': {'object_name': 'ValeurPoint'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'valeur': ('django.db.models.fields.FloatField', [], {})
-        }
-    }
-
-    complete_apps = ['rh_v1']
diff --git a/project/old_rh_v1/migrations/0003_auto__chg_field_tauxchange_devise.py b/project/old_rh_v1/migrations/0003_auto__chg_field_tauxchange_devise.py
deleted file mode 100644 (file)
index 51781c9..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-# 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):
-        
-        # Changing field 'TauxChange.devise'
-        db.alter_column('rh_v1_tauxchange', 'devise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Devise'], db_column='devise'))
-
-
-    def backwards(self, orm):
-        
-        # Changing field 'TauxChange.devise'
-        db.alter_column('rh_v1_tauxchange', 'devise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Devise'], to_field='code', db_column='devise'))
-
-
-    models = {
-        'datamaster_modeles.bureau': {
-            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.implantation': {
-            'Meta': {'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            '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['datamaster_modeles.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['datamaster_modeles.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['datamaster_modeles.Implantation']", 'db_column': "'bureau_rattachement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            '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.IntegerField', [], {'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['datamaster_modeles.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'})
-        },
-        'datamaster_modeles.pays': {
-            'Meta': {'object_name': 'Pays', 'db_table': "u'ref_pays'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
-            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Bureau']", 'to_field': "'code'", 'db_column': "'code_bureau'"}),
-            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'blank': 'True'}),
-            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.region': {
-            'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'gere_region'", 'db_column': "'implantation_bureau'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.ayantdroit': {
-            'Meta': {'object_name': 'AyantDroit'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employe'", 'db_column': "'employe'", 'to': "orm['rh_v1.Employe']"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.classement': {
-            'Meta': {'object_name': 'Classement'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'coefficient': ('django.db.models.fields.FloatField', [], {}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'degre': ('django.db.models.fields.IntegerField', [], {}),
-            'echelon': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.devise': {
-            'Meta': {'object_name': 'Devise'},
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.dossier': {
-            'Meta': {'object_name': 'Dossier'},
-            'classement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Classement']", 'db_column': "'classement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement1': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement2': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'contrat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Employe']", 'db_column': "'employe'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation1'", 'db_column': "'implantation1'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'implantation2': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'implantation2'", 'db_column': "'implantation2'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'mandat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'mandat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.OrganismeBstg']", 'db_column': "'organisme_bstg'"}),
-            'poste1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'poste1'", 'db_column': "'poste1'", 'to': "orm['rh_v1.Poste']"}),
-            'poste2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste2'", 'null': 'True', 'db_column': "'poste2'", 'to': "orm['rh_v1.Poste']"}),
-            'regime_travail': ('django.db.models.fields.IntegerField', [], {}),
-            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'remplacement_de'", 'db_column': "'remplacement_de'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responsable'", 'db_column': "'responsable'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable_implantation1': ('django.db.models.fields.IntegerField', [], {}),
-            'responsable_implantation2': ('django.db.models.fields.IntegerField', [], {}),
-            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Service']", 'db_column': "'service'"}),
-            'statut': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Statut']", 'db_column': "'statut'"}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeContrat']", 'db_column': "'type_contrat'"})
-        },
-        'rh_v1.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'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nationalite'", 'to_field': "'code'", 'db_column': "'nationalite'", 'to': "orm['datamaster_modeles.Pays']"}),
-            'no_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pays'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['datamaster_modeles.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'}),
-            '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'}),
-            'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.familleemploi': {
-            'Meta': {'object_name': 'FamilleEmploi'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.organismebstg': {
-            'Meta': {'object_name': 'OrganismeBstg'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.poste': {
-            'Meta': {'object_name': 'Poste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'proportion': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypePoste']", 'db_column': "'type_poste'"})
-        },
-        'rh_v1.remuneration': {
-            'Meta': {'object_name': 'Remuneration'},
-            'annulation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'date_annulation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_desactivation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_effective': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'desactivation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'null': 'True', 'db_column': "'devise'", 'blank': 'True'}),
-            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Dossier']", 'db_column': "'dossier'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'montant': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
-            'pourcentage': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRemuneration']", 'db_column': "'type'"}),
-            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRevalorisation']", 'null': 'True', 'db_column': "'type_revalorisation'", 'blank': 'True'}),
-            'user_annulation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_desactivation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.service': {
-            'Meta': {'object_name': 'Service'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.statut': {
-            'Meta': {'object_name': 'Statut'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_contrat_categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.tauxchange': {
-            'Meta': {'object_name': 'TauxChange'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'db_column': "'devise'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'taux': ('django.db.models.fields.FloatField', [], {})
-        },
-        'rh_v1.typecontrat': {
-            'Meta': {'object_name': 'TypeContrat'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeposte': {
-            'Meta': {'object_name': 'TypePoste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.FamilleEmploi']", 'db_column': "'famille_emploi'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeremuneration': {
-            'Meta': {'object_name': 'TypeRemuneration'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'})
-        },
-        'rh_v1.typerevalorisation': {
-            'Meta': {'object_name': 'TypeRevalorisation'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.valeurpoint': {
-            'Meta': {'object_name': 'ValeurPoint'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'valeur': ('django.db.models.fields.FloatField', [], {})
-        }
-    }
-
-    complete_apps = ['rh_v1']
diff --git a/project/old_rh_v1/migrations/0004_auto__chg_field_dossier_classement__chg_field_dossier_responsable__chg.py b/project/old_rh_v1/migrations/0004_auto__chg_field_dossier_classement__chg_field_dossier_responsable__chg.py
deleted file mode 100644 (file)
index 0ffbdcc..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-# 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):
-        
-        # Changing field 'Dossier.classement'
-        db.alter_column('rh_v1_dossier', 'classement', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Classement'], null=True, db_column='classement'))
-
-        # Changing field 'Dossier.responsable'
-        db.alter_column('rh_v1_dossier', 'responsable', self.gf('django.db.models.fields.related.ForeignKey')(null=True, db_column='responsable', to=orm['rh_v1.Employe']))
-
-        # Changing field 'Dossier.type_contrat'
-        db.alter_column('rh_v1_dossier', 'type_contrat', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.TypeContrat'], null=True, db_column='type_contrat'))
-
-        # Changing field 'Dossier.organisme_bstg'
-        db.alter_column('rh_v1_dossier', 'organisme_bstg', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.OrganismeBstg'], null=True, db_column='organisme_bstg'))
-
-        # Changing field 'Dossier.service'
-        db.alter_column('rh_v1_dossier', 'service', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Service'], null=True, db_column='service'))
-
-        # Changing field 'Dossier.implantation1'
-        db.alter_column('rh_v1_dossier', 'implantation1', self.gf('django.db.models.fields.related.ForeignKey')(null=True, db_column='implantation1', to=orm['datamaster_modeles.Implantation']))
-
-        # Changing field 'Dossier.implantation2'
-        db.alter_column('rh_v1_dossier', 'implantation2', self.gf('django.db.models.fields.related.ForeignKey')(null=True, db_column='implantation2', to=orm['datamaster_modeles.Implantation']))
-
-        # Changing field 'Dossier.statut'
-        db.alter_column('rh_v1_dossier', 'statut', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rh_v1.Statut'], null=True, db_column='statut'))
-
-        # Changing field 'Dossier.remplacement_de'
-        db.alter_column('rh_v1_dossier', 'remplacement_de', self.gf('django.db.models.fields.related.ForeignKey')(null=True, db_column='remplacement_de', to=orm['rh_v1.Employe']))
-
-        # Changing field 'Dossier.mandat_date_fin'
-        db.alter_column('rh_v1_dossier', 'mandat_date_fin', self.gf('django.db.models.fields.DateField')(null=True))
-
-
-    def backwards(self, orm):
-        
-        # Changing field 'Dossier.classement'
-        db.alter_column('rh_v1_dossier', 'classement', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.Classement'], db_column='classement'))
-
-        # Changing field 'Dossier.responsable'
-        db.alter_column('rh_v1_dossier', 'responsable', self.gf('django.db.models.fields.related.ForeignKey')(default=0, db_column='responsable', to=orm['rh_v1.Employe']))
-
-        # Changing field 'Dossier.type_contrat'
-        db.alter_column('rh_v1_dossier', 'type_contrat', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.TypeContrat'], db_column='type_contrat'))
-
-        # Changing field 'Dossier.organisme_bstg'
-        db.alter_column('rh_v1_dossier', 'organisme_bstg', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.OrganismeBstg'], db_column='organisme_bstg'))
-
-        # Changing field 'Dossier.service'
-        db.alter_column('rh_v1_dossier', 'service', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.Service'], db_column='service'))
-
-        # Changing field 'Dossier.implantation1'
-        db.alter_column('rh_v1_dossier', 'implantation1', self.gf('django.db.models.fields.related.ForeignKey')(default=0, db_column='implantation1', to=orm['datamaster_modeles.Implantation']))
-
-        # Changing field 'Dossier.implantation2'
-        db.alter_column('rh_v1_dossier', 'implantation2', self.gf('django.db.models.fields.related.ForeignKey')(default=0, db_column='implantation2', to=orm['datamaster_modeles.Implantation']))
-
-        # Changing field 'Dossier.statut'
-        db.alter_column('rh_v1_dossier', 'statut', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['rh_v1.Statut'], db_column='statut'))
-
-        # Changing field 'Dossier.remplacement_de'
-        db.alter_column('rh_v1_dossier', 'remplacement_de', self.gf('django.db.models.fields.related.ForeignKey')(default=0, db_column='remplacement_de', to=orm['rh_v1.Employe']))
-
-        # Changing field 'Dossier.mandat_date_fin'
-        db.alter_column('rh_v1_dossier', 'mandat_date_fin', self.gf('django.db.models.fields.DateField')(default=0))
-
-
-    models = {
-        'datamaster_modeles.bureau': {
-            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.implantation': {
-            'Meta': {'object_name': 'Implantation', 'db_table': "u'ref_implantation'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            '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['datamaster_modeles.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['datamaster_modeles.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['datamaster_modeles.Implantation']", 'db_column': "'bureau_rattachement'"}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            '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.IntegerField', [], {'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['datamaster_modeles.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'})
-        },
-        'datamaster_modeles.pays': {
-            'Meta': {'object_name': 'Pays', 'db_table': "u'ref_pays'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
-            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Bureau']", 'to_field': "'code'", 'db_column': "'code_bureau'"}),
-            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'blank': 'True'}),
-            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'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['datamaster_modeles.Region']", 'db_column': "'region'"})
-        },
-        'datamaster_modeles.region': {
-            'Meta': {'object_name': 'Region', 'db_table': "u'ref_region'"},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'gere_region'", 'db_column': "'implantation_bureau'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.ayantdroit': {
-            'Meta': {'object_name': 'AyantDroit'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employe'", 'db_column': "'employe'", 'to': "orm['rh_v1.Employe']"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.classement': {
-            'Meta': {'object_name': 'Classement'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'coefficient': ('django.db.models.fields.FloatField', [], {}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'degre': ('django.db.models.fields.IntegerField', [], {}),
-            'echelon': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.devise': {
-            'Meta': {'object_name': 'Devise'},
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.dossier': {
-            'Meta': {'object_name': 'Dossier'},
-            'classement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Classement']", 'null': 'True', 'db_column': "'classement'", 'blank': 'True'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement1': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'complement2': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'contrat_date_fin': ('django.db.models.fields.DateField', [], {}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'employe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Employe']", 'db_column': "'employe'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation1': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'implantation1'", 'null': 'True', 'db_column': "'implantation1'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'implantation2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'implantation2'", 'null': 'True', 'db_column': "'implantation2'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'mandat_date_debut': ('django.db.models.fields.DateField', [], {}),
-            'mandat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.OrganismeBstg']", 'null': 'True', 'db_column': "'organisme_bstg'", 'blank': 'True'}),
-            'poste1': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'poste1'", 'db_column': "'poste1'", 'to': "orm['rh_v1.Poste']"}),
-            'poste2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste2'", 'null': 'True', 'db_column': "'poste2'", 'to': "orm['rh_v1.Poste']"}),
-            'regime_travail': ('django.db.models.fields.IntegerField', [], {}),
-            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'remplacement_de'", 'null': 'True', 'db_column': "'remplacement_de'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsable'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh_v1.Employe']"}),
-            'responsable_implantation1': ('django.db.models.fields.IntegerField', [], {}),
-            'responsable_implantation2': ('django.db.models.fields.IntegerField', [], {}),
-            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Service']", 'null': 'True', 'db_column': "'service'", 'blank': 'True'}),
-            'statut': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Statut']", 'null': 'True', 'db_column': "'statut'", 'blank': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeContrat']", 'null': 'True', 'db_column': "'type_contrat'", 'blank': 'True'})
-        },
-        'rh_v1.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'}),
-            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_maj': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nationalite'", 'to_field': "'code'", 'db_column': "'nationalite'", 'to': "orm['datamaster_modeles.Pays']"}),
-            'no_rue': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pays'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['datamaster_modeles.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'}),
-            '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'}),
-            'ville': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.familleemploi': {
-            'Meta': {'object_name': 'FamilleEmploi'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.organismebstg': {
-            'Meta': {'object_name': 'OrganismeBstg'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.poste': {
-            'Meta': {'object_name': 'Poste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
-            'proportion': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypePoste']", 'db_column': "'type_poste'"})
-        },
-        'rh_v1.remuneration': {
-            'Meta': {'object_name': 'Remuneration'},
-            'annulation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'date_annulation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'date_desactivation': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'date_effective': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
-            'desactivation': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'to_field': "'code'", 'null': 'True', 'db_column': "'devise'", 'blank': 'True'}),
-            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Dossier']", 'db_column': "'dossier'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'montant': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
-            'pourcentage': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRemuneration']", 'db_column': "'type'"}),
-            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.TypeRevalorisation']", 'null': 'True', 'db_column': "'type_revalorisation'", 'blank': 'True'}),
-            'user_annulation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'user_desactivation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'rh_v1.service': {
-            'Meta': {'object_name': 'Service'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.statut': {
-            'Meta': {'object_name': 'Statut'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_contrat_categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'})
-        },
-        'rh_v1.tauxchange': {
-            'Meta': {'object_name': 'TauxChange'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.Devise']", 'db_column': "'devise'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'taux': ('django.db.models.fields.FloatField', [], {})
-        },
-        'rh_v1.typecontrat': {
-            'Meta': {'object_name': 'TypeContrat'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'categorie': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeposte': {
-            'Meta': {'object_name': 'TypePoste'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'date_modification': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'famille_emploi': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh_v1.FamilleEmploi']", 'db_column': "'famille_emploi'"}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.typeremuneration': {
-            'Meta': {'object_name': 'TypeRemuneration'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'})
-        },
-        'rh_v1.typerevalorisation': {
-            'Meta': {'object_name': 'TypeRevalorisation'},
-            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
-        },
-        'rh_v1.valeurpoint': {
-            'Meta': {'object_name': 'ValeurPoint'},
-            'annee': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'db_column': "'implantation'"}),
-            'valeur': ('django.db.models.fields.FloatField', [], {})
-        }
-    }
-
-    complete_apps = ['rh_v1']
diff --git a/project/old_rh_v1/migrations/__init__.py b/project/old_rh_v1/migrations/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project/old_rh_v1/models.py b/project/old_rh_v1/models.py
deleted file mode 100644 (file)
index 71e0ce5..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-# -=- encoding: utf-8 -=-
-
-import datetime
-from django.db import models
-from datamaster_modeles.models import Pays, Implantation
-from dae.managers import SecurityManager
-
-GENRE_CHOICES = (
-    ('m', 'Homme'),
-    ('f', 'Femme'),
-)
-SITUATION_CHOICES = (
-    ('C', 'Célibataire'),
-    ('F', 'Fiancé'),
-    ('M', 'Marié'),
-)
-
-class Employe(models.Model):   
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255)
-    nationalite = models.ForeignKey('datamaster_modeles.Pays', to_field='code', 
-                            related_name='nationalite', 
-                            db_column='nationalite')
-    date_naissance = models.DateField(null=True, blank=True)
-    # Infos personnelles
-    genre = models.CharField(max_length=1, null=True, blank=True,
-                            choices=GENRE_CHOICES)
-    situation_famille = models.CharField(max_length=1, null=True, blank=True,
-                            choices=SITUATION_CHOICES)
-    date_entree = models.DateField(null=True, blank=True) #devrait pas être là
-    # Coordonnées
-    tel_domicile = models.CharField(max_length=255, null=True, blank=True)
-    tel_cellulaire = models.CharField(max_length=255, null=True, blank=True)
-    adresse = models.CharField(max_length=255, null=True, blank=True)
-    no_rue = 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('datamaster_modeles.Pays', to_field='code', 
-                            null=True, blank=True, 
-                            related_name='pays', db_column='pays')
-    # Métas
-    date_creation = models.DateField(auto_now_add=True)
-    date_maj = models.DateField(auto_now=True)
-    commentaire = models.TextField(null=True, blank=True)
-
-    def __unicode__(self):
-        return u'%s %s' % (self.prenom, self.nom)
-
-
-TYPE_DOSSIER_CHOICES = (
-    ('2', 'Local'),
-    ('1', 'Expatrié'),
-)
-
-class DossierManager(models.Manager):
-    """
-    Chargement de tous les objets FK existants sur chaque QuerySet.
-    """
-    prefixe_service = "poste1__service"
-    prefixe_implantation = "poste1__implantation__region"
-
-    def get_query_set(self):
-        fkeys = (
-            'employe',
-            'poste1',
-            'implantation1',
-            'poste2',
-            'implantation2',
-            'service',
-            'responsable',
-            'remplacement_de',
-            'statut',
-            'organisme_bstg',
-            'classement',
-            'type_contrat',
-        )
-        return super(DossierManager, self).get_query_set().select_related(*fkeys).all()
-
-class Dossier(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    code = models.CharField(max_length=10, unique=True)
-    employe = models.ForeignKey('Employe', db_column='employe')
-    # Postes
-    poste1 = models.ForeignKey('Poste', db_column='poste1', 
-                            related_name='poste1')
-    implantation1 = models.ForeignKey('datamaster_modeles.Implantation', 
-                            db_column='implantation1', 
-                            related_name='implantation1', 
-                            blank=True, null=True)
-    complement1 = models.TextField(null=True, blank=True)
-    responsable_implantation1 = models.IntegerField()
-    poste2 = models.ForeignKey('Poste', db_column='poste2', 
-                            related_name='poste2', 
-                            blank=True, null=True)
-    implantation2 = models.ForeignKey('datamaster_modeles.Implantation', 
-                            db_column='implantation2', 
-                            related_name='implantation2', 
-                            null=True, blank=True)
-    complement2 = models.TextField(null=True, blank=True)
-    responsable_implantation2 = models.IntegerField() 
-    # Relations
-    service = models.ForeignKey('Service', db_column='service', 
-                            blank=True, null=True)
-    responsable = models.ForeignKey('Employe', db_column='responsable', 
-                            related_name='responsable', 
-                            blank=True, null=True)
-    remplacement_de = models.ForeignKey('Employe', db_column='remplacement_de', 
-                            related_name='remplacement_de', 
-                            blank=True, null=True)
-    type = models.CharField(max_length=1, choices=TYPE_DOSSIER_CHOICES)
-    statut = models.ForeignKey('Statut', db_column='statut', 
-                            blank=True, null=True)
-    organisme_bstg = models.ForeignKey('OrganismeBstg', 
-                            db_column='organisme_bstg', 
-                            blank=True, null=True)
-    # Rémunération
-    classement = models.ForeignKey('Classement', db_column='classement', 
-                            blank=True, null=True)
-    regime_travail = models.IntegerField()
-    # Mandat
-    mandat_date_debut = models.DateField()
-    mandat_date_fin = models.DateField(null=True, blank=True)
-    # Contrat
-    contrat_date_debut = models.DateField()
-    contrat_date_fin = models.DateField()
-    type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat', 
-                            blank=True, null=True)
-    # Meta
-    date_creation = models.DateField(auto_now_add=True)
-    date_maj = models.DateField(auto_now=True)
-    commentaire = models.TextField(null=True, blank=True) 
-
-    # Managers
-    objects = DossierManager()
-    
-    def __unicode__(self):
-        return u'%s : %s %s' % (self.employe, self.poste1, self.complement1)
-
-    def get_dernier_salaire_remun(self):
-        remun = [r for r in self.remuneration_set.all().order_by('-id') if r.type_id == 1] # type salaire de base
-        if len(remun) == 0:
-            return None
-        else:
-            return remun[0]
-
-    def get_salaire(self):
-        remun = self.get_dernier_salaire_remun()
-        if remun is not None:
-            return int(remun.montant)
-        else:
-            return None
-
-    def get_salaire_display(self):
-        """
-        Moyen rapide de récupérer le salaire correspodant à un dossier. Par contre,
-        toutes les rémuérations n'ont pas de devise associées, c'est pourquoi on récupère
-        les anciennes rémunérations pour rechercher si elle existait auparavant.
-        """
-        if self.dernier_salaire_remun() is not None:
-            devise_code = self.dernier_salaire_remun().devise.code
-        else:
-            devise_code = '???'
-        return "%s %s" % (self.get_salaire(), devise_code, )
-
-    def get_salaire_euro_display(self):
-        """
-        Moyen rapide de récupérer le salaire correspodant à un dossier. Par contre,
-        toutes les rémuérations n'ont pas de devise associées, c'est pourquoi on récupère
-        les anciennes rémunérations pour rechercher si elle existait auparavant.
-        La valeur est est affichée en Euros en se servant du taux actuel.
-        """
-        return "%s EUR" % (self.get_dernier_salaire_remun().en_euros())
-
-LIEN_PARENTE_CHOICES = (
-    ('Conjoint', 'Conjoint'),
-    ('Conjointe', 'Conjointe'),
-    ('Fille', 'Fille'),
-    ('Fils', 'Fils'),
-)
-
-class AyantDroit(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255)
-    # Relation
-    employe = models.ForeignKey('Employe', db_column='employe', 
-                            related_name='employe')
-    lien_parente = models.CharField(max_length=10, null=True, blank=True, 
-                            choices=LIEN_PARENTE_CHOICES)
-    # Méta
-    commentaire = models.TextField(null=True, blank=True) 
-    actif = models.BooleanField()
-    
-    
-class Remuneration(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    dossier = models.ForeignKey('Dossier', db_column='dossier')
-    type = models.ForeignKey('TypeRemuneration', db_column='type')
-    type_revalorisation = models.ForeignKey('TypeRevalorisation', 
-                            db_column='type_revalorisation', 
-                            null=True, blank=True)
-    montant = models.FloatField(null=True, blank=True)
-    devise = models.ForeignKey('Devise', to_field='id', db_column='devise', null=True, blank=True)
-    date_effective = models.DateField(null=True, blank=True)
-    pourcentage = models.IntegerField(null=True, blank=True)
-    # Méta
-    date_creation = models.DateField(auto_now_add=True)
-    user_creation = models.IntegerField(null=True, blank=True) #User ou employé
-    desactivation = models.NullBooleanField(null=True, blank=True) #
-    date_desactivation = models.DateField(null=True, blank=True)
-    user_desactivation = models.IntegerField(null=True, blank=True) #User ou employé
-    annulation = models.NullBooleanField(null=True, blank=True)
-    date_annulation = models.DateField(null=True, blank=True)
-    user_annulation = models.IntegerField(null=True, blank=True) #User ou employé
-    
-    def __unicode__(self):
-        try:
-            devise = self.devise.code
-        except:
-            devise = "???"
-        return "%s %s (%s EUR - %s)" % (self.montant, devise, self.en_euros(), self.get_taux_historique(), )
-
-    def get_taux_historique(self):
-        """
-        Retourne le taux en vigueur durant l'année considérée. Un taux de 0 est crée, si le taux de change
-        n'existe pas.
-        """
-        taux = TauxChange.objects.filter(devise=self.devise, annee=self.date_creation.year)
-        if len(taux) > 0:
-            return taux[0]
-        else:   
-            return None
-
-    def en_euros(self):
-        tauxchange = self.get_taux_historique()
-        if tauxchange is not None:
-            return int(self.montant * tauxchange.taux)
-        else:
-            return 0
-
-class FamilleEmploi(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    # Méta
-    actif = models.BooleanField()
-
-class TypePoste(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    nom_feminin = models.CharField(max_length=255)
-    description = models.CharField(max_length=255)
-    is_responsable = models.BooleanField()
-    famille_emploi = models.ForeignKey('FamilleEmploi', 
-                            db_column='famille_emploi')
-    # Méta
-    date_modification = models.DateField(auto_now=True)
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s' % self.nom
-        
-    class Meta:
-        ordering = ['nom']
-
-
-TYPE_PAIEMENT_CHOICES = (
-    ('Régulier', 'Régulier'),
-    ('Ponctuel', 'Ponctuel'),
-)
-
-NATURE_REMUNERATION_CHOICES = (
-    ('Accessoire', 'Accessoire'),
-    ('Charges', 'Charges'),
-    ('Indemnité', 'Indemnité'),
-    ('RAS', 'RAS'),
-    ('Traitement', 'Traitement'),
-)
-
-class TypeRemuneration(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    type_paiement = models.CharField(max_length=30, 
-                            choices=TYPE_PAIEMENT_CHOICES)
-    nature_remuneration = models.CharField(max_length=30, 
-                            choices=NATURE_REMUNERATION_CHOICES)
-    # Méta
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s' % self.nom
-
-
-class TypeRevalorisation(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    # Méta
-    actif = models.BooleanField()
-    
-PROPORTION_CHOICES = (
-    ('0.5', '0.5'),
-    ('1', '1'),
-)
-
-class PosteManager(SecurityManager):
-    """
-    Chargement de tous les objets FK existants sur chaque QuerySet.
-    """
-    prefixe_implantation = "implantation__region"
-
-    def get_query_set(self):
-        fkeys = (
-            'implantation',
-            'type_poste',
-        )
-        return super(PosteManager, self).get_query_set().select_related(*fkeys).all()
-
-class Poste(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    implantation = models.ForeignKey('datamaster_modeles.Implantation',
-                            db_column='implantation', related_name='+')
-    type_poste = models.ForeignKey('TypePoste', db_column='type_poste')
-    proportion = models.CharField(max_length=10, choices=PROPORTION_CHOICES)
-    #(sert à quoi?) renommer "regime_travail" ou autre?    convertir data en % (data * 100; ex: 1 = 100%)
-    # Méta
-    date_modification = models.DateField(auto_now=True)
-    actif = models.BooleanField()
-
-    # Managers
-    objects = PosteManager()
-
-    def __unicode__(self):
-        return u'%s - %s [%s]' % (self.implantation, self.type_poste.nom, 
-                            self.id)
-
-
-class Service(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    # Méta
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s' % self.nom
-        
-    class Meta:
-        ordering = ['nom']
-
-
-TYPE_ORGANISME_CHOICES = (
-    ('MAD', 'Mise à disposition'),
-    ('DET', 'Détachement'),
-)
-
-class OrganismeBstg(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    type = models.CharField(max_length=10, choices=TYPE_ORGANISME_CHOICES)
-    # Méta
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s (%s)' % (self.nom, self.type)
-
-    class Meta:
-        ordering = ['type', 'nom']
-
-
-CONTRAT_CATEGORIE_CHOICES= (
-    ('A', 'A'),
-    ('C', 'C'),
-)
-class Statut(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    code = models.CharField(max_length=25, unique=True)
-    nom = models.CharField(max_length=255)
-    type_contrat_categorie = models.CharField(max_length=10, 
-                            choices=CONTRAT_CATEGORIE_CHOICES)
-    #CHOICES A, C (veut dire quoi?) voir TypeContrat.categorie
-    # Méta
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s : %s' % (self.code, self.nom)
-
-TYPE_CLASSEMENT_CHOICES = (
-    ('S', 'S'),
-    ('T', 'T'),
-)
-
-class ClassementManager(models.Manager):
-    """
-    Ordonner les spcéfiquement les classements.
-    """
-    def get_query_set(self):
-        qs = super(self.__class__, self).get_query_set()
-        qs = qs.extra(select={'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'})
-        qs = qs.extra(order_by=('ponderation', ))
-        return qs.all()
-
-
-class Classement(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
-    echelon = models.IntegerField()
-    degre = models.IntegerField()
-    coefficient = models.FloatField()
-    # Méta
-    commentaire = models.TextField(null=True, blank=True) 
-    date_modification = models.DateField(auto_now=True)
-    actif = models.BooleanField()
-
-    # managers
-    objects = ClassementManager()
-
-    def __unicode__(self):
-        return u'%s.%s.%s' % (self.type, self.echelon, self.degre )
-
-    class Meta:
-        ordering = ['type','echelon','degre','coefficient']
-
-class TauxChange(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    devise = models.ForeignKey('Devise', to_field='id', db_column='devise')
-    annee = models.IntegerField()
-    taux = models.FloatField()
-    # Relations
-    implantation = models.ForeignKey('datamaster_modeles.Implantation', 
-                            db_column='implantation',
-                            related_name='taux_change')
-
-    def __unicode__(self):
-        return u"%s %s : %s" % (self.devise, self.annee, self.taux)
-
-class ValeurPointManager(models.Manager):
-    """
-    Manager qui travaille uniquement sur les valeurs du point de l'année en cours.
-    """
-    mois = datetime.datetime.now().month
-    annee_courante = datetime.datetime.now().year
-
-    # Pour le mois de janvier et décembre on mets les 2 années pour faire la transition
-    if mois == 1:
-        filtre_annee = (annee_courante-1, annee_courante)
-    elif mois == 12:
-        filtre_annee = (annee_courante, annee_courante+1)
-    else:
-        filtre_annee = (annee_courante,)
-
-    def get_query_set(self):
-        return super(ValeurPointManager, self).get_query_set().select_related('implantation').filter(annee__in=self.filtre_annee)
-
-
-class ValeurPoint(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    valeur = models.FloatField()
-    implantation = models.ForeignKey('datamaster_modeles.Implantation', 
-                            db_column='implantation', 
-                            related_name='valeurs_point')
-    # Méta
-    annee = models.IntegerField()
-
-    # Stockage de tous les taux de change pour optimiser la recherche de la devise associée
-    annee_courante = datetime.datetime.now().year
-    tauxchange = TauxChange.objects.select_related('devise').filter(annee=annee_courante)
-    
-    def get_tauxchange_courant(self):
-        """
-        Recherche le taux courant associé à la valeur d'un point.
-        Tous les taux de l'année courante sont chargés, pour optimiser un affichage en liste.
-        (On pourrait probablement améliorer le manager pour lui greffer le taux courant sous forme de JOIN)
-        """
-        for tauxchange in self.tauxchange:
-            if tauxchange.implantation_id == self.implantation_id:
-                return tauxchange
-        return None
-
-    def __unicode__(self):
-        tx = self.get_tauxchange_courant()
-        if tx:
-            devise_code = tx.devise.code
-        else:
-            devise_code = "??"
-        return u'%s %s (%s-%s)' % (self.valeur, devise_code, self.implantation.nom, self.annee)
-        
-    class Meta:
-        ordering = ['valeur']
-
-    objects = models.Manager()
-    actuelles = ValeurPointManager()
-
-class DeviseManager(models.Manager):
-    """
-    On oublie le US et le CAN
-    """
-    def get_query_set(self):
-        return super(DeviseManager, self).get_query_set().exclude(id__in=(3, 15))
-
-class Devise(models.Model):
-
-    objects = DeviseManager()
-
-    id = models.IntegerField(primary_key=True)
-    code =  models.CharField(max_length=10, unique=True)
-    nom = models.CharField(max_length=255)
-
-    def __unicode__(self):
-        return u'%s - %s' % (self.code, self.nom)
-
-
-class TypeContrat(models.Model):
-    # Identification
-    id = models.IntegerField(primary_key=True)
-    nom = models.CharField(max_length=255)
-    nom_long = models.CharField(max_length=255) #description
-    categorie = models.CharField(max_length=10, 
-                            choices=CONTRAT_CATEGORIE_CHOICES)
-    # Méta
-    actif = models.BooleanField()
-
-    def __unicode__(self):
-        return u'%s' % (self.nom)
diff --git a/project/permissions.py b/project/permissions.py
deleted file mode 100644 (file)
index 4ea1554..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from django.contrib.auth.decorators import user_passes_test
-from django.contrib.auth.models import Group
-
-# Logique AUF des permissions
-
-def is_employe(user):
-    return user.is_authenticated() and user.is_active and user.is_staff
-
-def is_admin(user):
-    """
-    Un admin est un employé qui est superuser
-    """
-    return is_employe(user) and user.is_superuser
index ac47ca2..1524e16 100644 (file)
@@ -1,30 +1,39 @@
 # -*- encoding: utf-8 -*-
 
 import textwrap
-from django.core.urlresolvers import reverse
-from django.http import HttpResponseRedirect
+
+from django.conf import settings
 from django.contrib import admin
-from django.forms.models import BaseInlineFormSet
+from django.core.urlresolvers import reverse
 from django.db.models import Avg
-from django.conf import settings
-
+from django.forms.models import BaseInlineFormSet
+from django.http import HttpResponseRedirect
+from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
-from datamaster_modeles.models import Region, Bureau
-from project.rh import models as rh
 
-from project.dae.utils import get_employe_from_user as get_emp
-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_haute_direction_recrutement
+from auf.django.emploi.models import OffreEmploi, Candidat, CandidatPiece
+from auf.django.references.models import Region, Bureau
+
+from project.groups import get_employe_from_user as get_emp
+from project.rh import models as rh
 
-from recrutement.forms import *
+from project.recrutement.forms import OffreEmploiForm
+from project.recrutement.groups import \
+        grp_drh, grp_drh2, \
+        grp_directeurs_bureau, \
+        grp_administrateurs, \
+        grp_correspondants_rh, \
+        grp_haute_direction
+from project.recrutement.models import \
+        Evaluateur, CandidatEvaluation, \
+        ProxyOffreEmploi, ProxyCandidat, MesCandidatEvaluation, \
+        CourrielTemplate
+        
 
 ### CONSTANTES
 IMPLANTATIONS_CENTRALES = [15, 19]
 
+
 class BaseAdmin(admin.ModelAdmin):
 
     class Media:
@@ -47,10 +56,13 @@ class OrderedChangeList(admin.views.main.ChangeList):
         qs = qs.order_by('-moyenne')
         return qs
 
+
 class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
     date_hierarchy = 'date_creation'
-    list_display = ('nom', 'date_limite', 'region',  'statut', 
-                    'est_affiche', '_candidatsList', )
+    list_display = (
+        'nom', 'date_limite', 'region',  'statut', 'est_affiche',
+        '_candidatsList'
+    )
     exclude = ('actif', 'poste_nom', 'resume',)
     list_filter = ('statut',)
     actions = ['affecter_evaluateurs_offre_emploi', ]
@@ -63,18 +75,22 @@ class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
         return actions
 
     ### Affecter un évaluateurs à des offres d'emploi
-    def affecter_evaluateurs_offre_emploi(modeladmin, obj, candidats):   
+    def affecter_evaluateurs_offre_emploi(modeladmin, obj, candidats):
         selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
 
-        return HttpResponseRedirect(reverse('affecter_evaluateurs_offre_emploi')+
-                "?ids=%s" % (",".join(selected)))
-    affecter_evaluateurs_offre_emploi.short_description = u'Affecter évaluateur(s)'
+        return HttpResponseRedirect(
+            reverse('affecter_evaluateurs_offre_emploi') +
+            "?ids=%s" % (",".join(selected))
+        )
+
+    affecter_evaluateurs_offre_emploi.short_description = \
+            u'Affecter évaluateur(s)'
 
     ### Afficher la liste des candidats pour l'offre d'emploi
-    def _candidatsList(self, obj):     
+    def _candidatsList(self, obj):
         return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats \
             </a>" % (reverse('admin:recrutement_candidat_changelist'), obj.id)
-    _candidatsList.allow_tags = True 
+    _candidatsList.allow_tags = True
     _candidatsList.short_description = "Afficher la liste des candidats"
 
     ### Formulaire
@@ -82,72 +98,77 @@ class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
         form = super(OffreEmploiAdmin, self).get_form(request, obj, **kwargs)
         employe = get_emp(request.user)
         user_groupes = request.user.groups.all()
-        
-    
+
         # Region
-        if form.declared_fields.has_key('region'):
+        if 'region' in form.declared_fields:
             region_field = form.declared_fields['region']
         else:
             region_field = form.base_fields['region']
 
-        if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_haute_direction in user_groupes:
             region_field.queryset = Region.objects.all()
         else:
             region_field.queryset = Region.objects.\
                                     filter(id=employe.implantation.region.id)
-        
+
         # Poste
-        if form.declared_fields.has_key('poste'):
+        if 'poste' in form.declared_fields:
             poste_field = form.declared_fields['poste']
         else:
             poste_field = form.base_fields['poste']
 
-        if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_haute_direction in user_groupes:
             poste_field.queryset = rh.Poste.objects.all()
         else:
             poste_field.queryset = rh.Poste.objects.\
                     filter(implantation__region=employe.implantation.region).\
                     exclude(implantation__in=IMPLANTATIONS_CENTRALES)
-        
+
         # Bureau
-        if form.declared_fields.has_key('bureau'):
+        if 'bureau' in form.declared_fields:
             bureau_field = form.declared_fields['bureau']
         else:
             bureau_field = form.base_fields['bureau']
 
-        if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_haute_direction in user_groupes:
             bureau_field.queryset = Bureau.objects.all()
         else:
-            bureau_field.queryset = Bureau.objects.\
-                                    filter(region=employe.implantation.region)   
-         
+            bureau_field.queryset = \
+                    Bureau.objects.filter(region=employe.implantation.region)
+
         return form
-        
+
     ### Queryset
+
     def queryset(self, request):
-        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
+        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 or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_haute_direction in user_groupes:
             return qs
 
-        if grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+        if grp_directeurs_bureau in user_groupes or \
+            grp_correspondants_rh in user_groupes or \
+            grp_administrateurs in user_groupes:
             employe = get_emp(request.user)
             return qs.filter(region=employe.implantation.region)
 
         if  Evaluateur.objects.filter(user=request.user).exists():
             evaluateur = Evaluateur.objects.get(user=request.user)
-            offre_ids = [e.candidat.offre_emploi_id for e in
-                    CandidatEvaluation.objects.select_related('candidat').filter(evaluateur=evaluateur)]
+            offre_ids = [
+                e.candidat.offre_emploi_id
+                for e in CandidatEvaluation.objects
+                .select_related('candidat')
+                .filter(evaluateur=evaluateur)
+            ]
             return qs.filter(id__in=offre_ids)
 
         return qs.none()
@@ -156,64 +177,67 @@ class OffreEmploiAdmin(BaseAdmin, VersionAdmin):
     def has_add_permission(self, request):
         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 or \
-            grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
-        return False  
+        return False
 
     def has_delete_permission(self, request, obj=None):
         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 or \
-            grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
 
     def has_change_permission(self, request, obj=None):
         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 or \
-            grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
+
 
 class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
-    list_display = ('nom', 'date_limite', 'region', 'statut', 
-                    'est_affiche')
-    readonly_fields = ('description', 'bureau', 'duree_affectation', 
-                        'renumeration', 'debut_affectation', 'lieu_affectation',
-                        'nom', 'resume', 'date_limite', 'region', 'poste')
+    list_display = (
+        'nom', 'date_limite', 'region', 'statut', 'est_affiche'
+    )
+    readonly_fields = (
+        'description', 'bureau', 'duree_affectation', 'renumeration',
+        'debut_affectation', 'lieu_affectation', 'nom', 'resume',
+        'date_limite', 'region', 'poste'
+    )
     fieldsets = (
         ('Nom', {
-            'fields': ('nom', )        
+            'fields': ('nom',)
         }),
         ('Description générale', {
-            'fields': ('description', 'date_limite', )        
+            'fields': ('description', 'date_limite',)
         }),
         ('Coordonnées', {
             'fields': ('lieu_affectation', 'bureau', 'region', 'poste',)
         }),
         ('Autre', {
-            'fields': ('debut_affectation', 'duree_affectation',
-                        'renumeration', )
+            'fields': (
+                'debut_affectation', 'duree_affectation', 'renumeration',
+            )
         }),
-    )        
+    )
     inlines = []
 
-
-    ### Lieu de redirection après le change 
+    ### Lieu de redirection après le change
     def response_change(self, request, obj):
-        return HttpResponseRedirect(reverse\
-                            ('admin:recrutement_proxyoffreemploi_changelist'))
+        return redirect('admin:recrutement_proxyoffreemploi_changelist')
 
     ### Formulaire
     def get_form(self, request, obj=None, **kwargs):
@@ -230,12 +254,12 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_correspondants_rh in user_groupes or \
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
 
         if obj is not None:
@@ -243,12 +267,14 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
 
         return False
 
+
 class CandidatPieceInline(admin.TabularInline):
     model = CandidatPiece
     fields = ('candidat', 'nom', 'path',)
     extra = 1
     max_num = 3
 
+
 class ReadOnlyCandidatPieceInline(CandidatPieceInline):
     readonly_fields = ('candidat', 'nom', 'path', )
     cand_delete = False
@@ -260,7 +286,8 @@ class CandidatEvaluationInlineFormSet(BaseInlineFormSet):
     """
     def __init__(self, *args, **kwargs):
         super(CandidatEvaluationInlineFormSet, self).__init__(*args, **kwargs)
-        self.can_delete = False 
+        self.can_delete = False
+
 
 class CandidatEvaluationInline(admin.TabularInline):
     model = CandidatEvaluation
@@ -269,17 +296,18 @@ class CandidatEvaluationInline(admin.TabularInline):
     extra = 0
     formset = CandidatEvaluationInlineFormSet
 
-    ### Fields readonly    
+    ### Fields readonly
     def get_readonly_fields(self, request, obj=None):
         """
         Empêche la modification des évaluations
         """
         if obj:
-            return self.readonly_fields+('evaluateur', 'note', 'commentaire')
+            return self.readonly_fields + ('evaluateur', 'note', 'commentaire')
         return self.readonly_fields
 
+
 class CandidatAdmin(BaseAdmin, VersionAdmin):
-    search_fields = ('nom', 'prenom' )
+    search_fields = ('nom', 'prenom')
     exclude = ('actif', )
     list_editable = ('statut', )
     list_display = ('_candidat', 'offre_emploi',
@@ -292,17 +320,23 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
             'fields': ('offre_emploi', )
         }),
         ('Informations personnelles', {
-            'fields': ('prenom','nom','genre', 'nationalite',
-                        'situation_famille', 'nombre_dependant',)        
+            'fields': (
+                'prenom', 'nom', 'genre', 'nationalite',
+                'situation_famille', 'nombre_dependant'
+            )
         }),
         ('Coordonnées', {
-            'fields': ('telephone', 'email', 'adresse', 'ville', 
-                        'etat_province', 'code_postal', 'pays', )
+            'fields': (
+                'telephone', 'email', 'adresse', 'ville', 'etat_province',
+                'code_postal', 'pays'
+            )
         }),
         ('Informations professionnelles', {
-            'fields': ('niveau_diplome','employeur_actuel', 
-                        'poste_actuel', 'domaine_professionnel',)
-        }),  
+            'fields': (
+                'niveau_diplome', 'employeur_actuel', 'poste_actuel',
+                'domaine_professionnel'
+            )
+        }),
         ('Traitement', {
             'fields': ('statut', )
         }),
@@ -314,8 +348,7 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
     actions = ['envoyer_courriel_candidats']
 
     def _candidat(self, obj):
-        txt = u"%s %s (%s)" % ( obj.nom.upper(), obj.prenom,
-                obj.genre)
+        txt = u"%s %s (%s)" % (obj.nom.upper(), obj.prenom, obj.genre)
         txt = textwrap.wrap(txt, 30)
         return "<br/>".join(txt)
     _candidat.short_description = "Candidat"
@@ -334,19 +367,22 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
         return actions
 
     ### Envoyer un courriel à des candidats
-    def envoyer_courriel_candidats(modeladmin, obj, candidats):   
+    def envoyer_courriel_candidats(modeladmin, obj, candidats):
         selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
 
-        return HttpResponseRedirect(reverse('selectionner_template')+
-                "?ids=%s" % (",".join(selected)))
+        return HttpResponseRedirect(
+            reverse('selectionner_template') + "?ids=%s" % (",".join(selected))
+        )
     envoyer_courriel_candidats.short_description = u'Envoyer courriel'
 
     ### Évaluer un candidat
     def evaluer_candidat(self, obj):
-        return "<a href='%s?candidat__id__exact=%s'>Évaluer le candidat</a>" % \
-            (reverse('admin:recrutement_candidatevaluation_changelist'), 
-            obj.id)
-    evaluer_candidat.allow_tags = True    
+        return "<a href='%s?candidat__id__exact=%s'>" \
+                "Évaluer le candidat</a>" % (
+                    reverse('admin:recrutement_candidatevaluation_changelist'),
+                    obj.id
+                )
+    evaluer_candidat.allow_tags = True
     evaluer_candidat.short_description = 'Évaluation'
 
     ### Afficher un candidat
@@ -354,17 +390,19 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
         items = [u"<li><a href='%s%s'>%s</li>" % \
                 (settings.OE_PRIVE_MEDIA_URL, pj.path, pj.get_nom_display()) \
                 for pj in obj.pieces_jointes()]
-        html =  "<a href='%s'>Voir le candidat</a>" % \
-            (reverse('admin:recrutement_proxycandidat_change', args=(obj.id,)))
+        html = "<a href='%s'>Voir le candidat</a>" % (
+            reverse('admin:recrutement_proxycandidat_change', args=(obj.id,))
+        )
         return "%s<ul>%s</ul>" % (html, "\n".join(items))
-    afficher_candidat.allow_tags = True    
+    afficher_candidat.allow_tags = True
     afficher_candidat.short_description = u'Détails du candidat'
 
     ### Voir l'offre d'emploi
     def voir_offre_emploi(self, obj):
-        return "<a href='%s'>Voir l'offre d'emploi</a>" % \
-        (reverse('admin:recrutement_proxyoffreemploi_change', 
-                    args=(obj.offre_emploi.id,)))
+        return "<a href='%s'>Voir l'offre d'emploi</a>" % (reverse(
+            'admin:recrutement_proxyoffreemploi_change',
+            args=(obj.offre_emploi.id,)
+        ))
     voir_offre_emploi.allow_tags = True
     voir_offre_emploi.short_description = "Afficher l'offre d'emploi"
 
@@ -374,7 +412,7 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
 
         notes = [evaluation.note for evaluation in evaluations \
                     if evaluation.note is not None]
+
         if len(notes) > 0:
             moyenne_votes = round(float(sum(notes)) / len(notes), 2)
         else:
@@ -383,7 +421,7 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
         totales = len(evaluations)
         faites = len(notes)
 
-        if obj.statut  == 'REC':
+        if obj.statut == 'REC':
             if totales == faites:
                 color = "green"
             elif faites > 0 and float(totales) / float(faites) >= 2:
@@ -393,7 +431,9 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
         else:
             color = "black"
 
-        return """<span style="color: %s;">%s (%s/%s)</span>""" % (color, moyenne_votes, faites, totales)
+        return """<span style="color: %s;">%s (%s/%s)</span>""" % (
+            color, moyenne_votes, faites, totales
+        )
     calculer_moyenne.allow_tags = True
     calculer_moyenne.short_description = "Moyenne"
     calculer_moyenne.admin_order_field = ""
@@ -402,36 +442,36 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
     def has_add_permission(self, request):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_correspondants_rh in user_groupes or \
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
 
     def has_delete_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_correspondants_rh in user_groupes or \
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
 
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_correspondants_rh in user_groupes or \
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
         return False
 
@@ -440,25 +480,25 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
 
     def queryset(self, request):
         """
-        Spécifie un queryset limité, autrement Django exécute un 
-        select_related() sans paramètre, ce qui a pour effet de charger tous 
-        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
-        modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
+        Spécifie un queryset limité, autrement Django exécute un
+        select_related() sans paramètre, ce qui a pour effet de charger tous
+        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les
+        modèles de Region, il existe plusieurs boucles, ce qui conduit à la
         génération d'une requête infinie.
-        
         """
-        
-        qs = self.model._default_manager.get_query_set().select_related('offre_emploi').annotate(moyenne=Avg('evaluations__note'))
+        qs = self.model._default_manager.get_query_set() \
+                .select_related('offre_emploi') \
+                .annotate(moyenne=Avg('evaluations__note'))
 
         user_groupes = request.user.groups.all()
-        if grp_drh_recrutement in user_groupes or \
-            grp_drh2_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_haute_direction in user_groupes:
             return qs
 
-        if grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+        if grp_directeurs_bureau in user_groupes or \
+            grp_correspondants_rh in user_groupes or \
+            grp_administrateurs in user_groupes:
             employe = get_emp(request.user)
             return qs.filter(offre_emploi__region=employe.implantation.region)
 
@@ -467,33 +507,40 @@ class CandidatAdmin(BaseAdmin, VersionAdmin):
             candidat_ids = [e.candidat.id for e in
                     CandidatEvaluation.objects.filter(evaluateur=evaluateur)]
             return qs.filter(id__in=candidat_ids)
-        return qs.none()    
+        return qs.none()
 
 
 class ProxyCandidatAdmin(CandidatAdmin):
     list_editable = ()
-    readonly_fields = ('statut', 'offre_emploi', 'prenom', 'nom',
-                        'genre', 'nationalite', 'situation_famille', 
-                        'nombre_dependant', 'telephone', 'email', 'adresse', 
-                        'ville', 'etat_province', 'code_postal', 'pays', 
-                        'niveau_diplome', 'employeur_actuel', 'poste_actuel',
-                        'domaine_professionnel', 'pieces_jointes',)
+    readonly_fields = (
+        'statut', 'offre_emploi', 'prenom', 'nom', 'genre', 'nationalite',
+        'situation_famille', 'nombre_dependant', 'telephone', 'email',
+        'adresse', 'ville', 'etat_province', 'code_postal', 'pays',
+        'niveau_diplome', 'employeur_actuel', 'poste_actuel',
+        'domaine_professionnel', 'pieces_jointes'
+    )
     fieldsets = (
         ("Offre d'emploi", {
             'fields': ('offre_emploi', )
         }),
         ('Informations personnelles', {
-            'fields': ('prenom','nom','genre', 'nationalite',
-                        'situation_famille', 'nombre_dependant',)        
+            'fields': (
+                'prenom', 'nom', 'genre', 'nationalite', 'situation_famille',
+                'nombre_dependant'
+            )
         }),
         ('Coordonnées', {
-            'fields': ('telephone', 'email', 'adresse', 'ville', 
-                        'etat_province', 'code_postal', 'pays', )
+            'fields': (
+                'telephone', 'email', 'adresse', 'ville', 'etat_province',
+                'code_postal', 'pays'
+            )
         }),
         ('Informations professionnelles', {
-            'fields': ('niveau_diplome','employeur_actuel', 
-                        'poste_actuel', 'domaine_professionnel',)
-        }),   
+            'fields': (
+                'niveau_diplome', 'employeur_actuel', 'poste_actuel',
+                'domaine_professionnel'
+            )
+        }),
     )
     inlines = (CandidatEvaluationInline, )
 
@@ -506,12 +553,12 @@ class ProxyCandidatAdmin(CandidatAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if request.user.is_superuser is True or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_correspondants_rh in user_groupes or \
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return True
 
         if obj is not None:
@@ -525,23 +572,24 @@ class ProxyCandidatAdmin(CandidatAdmin):
     def get_actions(self, request):
         return None
 
+
 class CandidatPieceAdmin(admin.ModelAdmin):
     list_display = ('nom', 'candidat', )
 
     ### Queryset
     def queryset(self, request):
         """
-        Spécifie un queryset limité, autrement Django exécute un 
-        select_related() sans paramètre, ce qui a pour effet de charger tous 
-        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les 
-        modèles de Region, il existe plusieurs boucles, ce qui conduit à la 
-        génération d'une requête infinie.
-        Affiche la liste de candidats que si le user connecté 
-        possède un Evaluateur
+        Spécifie un queryset limité, autrement Django exécute un
+        select_related() sans paramètre, ce qui a pour effet de charger tous
+        les objets FK, sans limite de profondeur. Dès qu'on arrive, dans les
+        modèles de Region, il existe plusieurs boucles, ce qui conduit à la
+        génération d'une requête infinie.  Affiche la liste de candidats que
+        si le user connecté possède un Evaluateur
         """
         qs = self.model._default_manager.get_query_set()
         return qs.select_related('candidat')
 
+
 class EvaluateurAdmin(BaseAdmin, VersionAdmin):
     fieldsets = (
         ("Utilisateur", {
@@ -559,39 +607,42 @@ class EvaluateurAdmin(BaseAdmin, VersionAdmin):
     def has_add_permission(self, request):
         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 or \
-                grp_haute_direction_recrutement in user_groupes:
+                grp_drh in user_groupes or \
+                grp_drh2 in user_groupes or \
+                grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
 
     def has_delete_permission(self, request, obj=None):
         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 or \
-                grp_haute_direction_recrutement in user_groupes:
+                grp_drh in user_groupes or \
+                grp_drh2 in user_groupes or \
+                grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
 
     def has_change_permission(self, request, obj=None):
         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 or \
-                grp_haute_direction_recrutement in user_groupes:
+                grp_drh in user_groupes or \
+                grp_drh2 in user_groupes or \
+                grp_haute_direction in user_groupes:
             return True
-        return False   
+        return False
+
 
 class CandidatEvaluationAdmin(BaseAdmin):
-    search_fields = ('candidat__nom', 'candidat__prenom' )
-    list_display = ('_candidat', '_statut', '_offre_emploi', 'evaluateur', '_note', 
-                    '_commentaire', )
+    search_fields = ('candidat__nom', 'candidat__prenom')
+    list_display = (
+        '_candidat', '_statut', '_offre_emploi', 'evaluateur', '_note',
+        '_commentaire'
+    )
     readonly_fields = ('candidat', 'evaluateur')
     list_filter = ('candidat__statut', 'candidat__offre_emploi',)
     fieldsets = (
         ('Évaluation du candidat', {
-            'fields': ('candidat', 'evaluateur', 'note', 'commentaire', )        
+            'fields': ('candidat', 'evaluateur', 'note', 'commentaire', )
         }),
     )
 
@@ -615,32 +666,33 @@ class CandidatEvaluationAdmin(BaseAdmin):
         """
         page = self.model.__name__.lower()
         redirect_url = 'admin:recrutement_%s_change' % page
-        
+
         if obj.note is None:
             label = "Candidat non évalué"
         else:
             label = obj.note
 
         if self.evaluateur == obj.evaluateur:
-            return "<a href='%s'>%s</a>" % (reverse(redirect_url,  args=(obj.id,)), label)
+            return "<a href='%s'>%s</a>" % (
+                reverse(redirect_url,  args=(obj.id,)), label
+            )
         else:
             return label
     _note.allow_tags = True
-    _note.short_description = "Note"    
-    _note.admin_order_field = 'note'    
+    _note.short_description = "Note"
+    _note.admin_order_field = 'note'
 
     def _statut(self, obj):
         return obj.candidat.get_statut_display()
     _statut.order_field = 'candidat__statut'
     _statut.short_description = 'Statut'
 
-
     ### Lien en lecture seule vers le candidat
     def _candidat(self, obj):
         return "<a href='%s'>%s</a>" \
-            % (reverse('admin:recrutement_proxycandidat_change', 
+            % (reverse('admin:recrutement_proxycandidat_change',
                         args=(obj.candidat.id,)), obj.candidat)
-    _candidat.allow_tags = True    
+    _candidat.allow_tags = True
     _candidat.short_description = 'Candidat'
 
     ### Afficher commentaire
@@ -654,16 +706,16 @@ class CandidatEvaluationAdmin(BaseAdmin):
             return "Aucun"
         return obj.commentaire
     _commentaire.allow_tags = True
-    _commentaire.short_description = "Commentaire"   
+    _commentaire.short_description = "Commentaire"
 
     ### Afficher offre d'emploi
     def _offre_emploi(self, obj):
         return "<a href='%s'>%s</a>" % \
-        (reverse('admin:recrutement_proxyoffreemploi_change', 
+        (reverse('admin:recrutement_proxyoffreemploi_change',
             args=(obj.candidat.offre_emploi.id,)), obj.candidat.offre_emploi)
     _offre_emploi.allow_tags = True
     _offre_emploi.short_description = "Voir offre d'emploi"
-    
+
     def has_add_permission(self, request):
         return False
 
@@ -679,12 +731,12 @@ class CandidatEvaluationAdmin(BaseAdmin):
         user_groupes = request.user.groups.all()
 
         if request.user.is_superuser or \
-            grp_drh_recrutement in user_groupes or \
-            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 or \
-            grp_haute_direction_recrutement in user_groupes:
+            grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_correspondants_rh in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             is_recrutement = True
         else:
             is_recrutement = False
@@ -693,21 +745,22 @@ class CandidatEvaluationAdmin(BaseAdmin):
 
     def queryset(self, request):
         """
-        Afficher uniquement les évaluations de l'évaluateur, sauf si 
+        Afficher uniquement les évaluations de l'évaluateur, sauf si
         l'utilisateur est dans les groupes suivants.
         """
-        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
+        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 or \
-            grp_correspondants_rh_recrutement in user_groupes or \
-            grp_directeurs_bureau_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes or \
-            grp_haute_direction_recrutement in user_groupes:
+        if grp_drh in user_groupes or \
+            grp_drh2 in user_groupes or \
+            grp_correspondants_rh in user_groupes or \
+            grp_directeurs_bureau in user_groupes or \
+            grp_administrateurs in user_groupes or \
+            grp_haute_direction in user_groupes:
             return qs
 
-        evaluateur = Evaluateur.objects.get(user=request.user) 
+        evaluateur = Evaluateur.objects.get(user=request.user)
         candidats_evaluations = \
             CandidatEvaluation.objects.filter(evaluateur=evaluateur,
                     candidat__statut__in=('REC', ))
@@ -733,8 +786,9 @@ class MesCandidatEvaluationAdmin(CandidatEvaluationAdmin):
             return False
 
     def queryset(self, request):
-        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
-        evaluateur = Evaluateur.objects.get(user=request.user) 
+        qs = self.model._default_manager.get_query_set() \
+                .select_related('offre_emploi')
+        evaluateur = Evaluateur.objects.get(user=request.user)
         candidats_evaluations = \
             CandidatEvaluation.objects.filter(evaluateur=evaluateur,
                     candidat__statut__in=('REC', ))
index 7d8af53..8e7c5fb 100644 (file)
@@ -1,21 +1,23 @@
 # -*- encoding: utf-8 -*
-from django.core import serializers
+
 from datetime import date
+
+from django.contrib import messages
+from django.core import serializers
 from django.http import HttpResponse
-from django.template import RequestContext, Template
 from django.shortcuts import render_to_response, redirect, get_object_or_404
+from django.template import RequestContext, Template
 from django.utils import simplejson
-from django.contrib import messages
 
-import datamaster_modeles.models as ref
-from auf.django.emploi import models as emploi
 from auf.django.emploi import forms as emploiForms
+from auf.django.emploi import models as emploi
+
 from project.recrutement.models import Evaluateur, CandidatEvaluation, \
                                 CourrielTemplate
 from project.recrutement.views import send_templated_email
 
-STATUS_OK = 200
 
+STATUS_OK = 200
 STATUS_ERROR = 400
 STATUS_ERROR_NOT_FOUND = 404
 STATUS_ERROR_PERMISSIONS = 403
diff --git a/project/recrutement/context_processors.py b/project/recrutement/context_processors.py
deleted file mode 100644 (file)
index 69b8c6e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- encoding: utf-8 -*-
-from recrutement.permissions import user_in_recrutement_groupes as in_recrutement_groupes
-
-# Ajout de variables accessibles dans les templates (pour tester permissions dans templates)
-   
-def user_in_recrutement_groupes(request):
-    return {'user_in_recrutement_groupes': in_recrutement_groupes(request.user)}
-
index 5599e5e..e3ff7d7 100644 (file)
@@ -2,12 +2,14 @@
 
 from django import forms
 from django.forms import ModelForm
-from recrutement import models as recr
+
 from auf.django.emploi import forms as emploi
 
-################################################################################
+from project.recrutement import models as recr
+
+########################################################################
 # EVALUATION
-################################################################################
+########################################################################
 class CandidatEvaluationForm(ModelForm):
     def __init__(self, *args, **kwargs):   
         self.candidat = kwargs.pop('candidat')    
@@ -62,9 +64,9 @@ class EvaluateurForm(forms.Form):
                     candidat_evaluation.save()
         
 
-################################################################################
+########################################################################
 # OFFRE EMPLOI
-################################################################################
+########################################################################
 class CandidatPieceForm(emploi.CandidatPieceForm):
     pass
 
@@ -72,24 +74,6 @@ class PostulerOffreEmploiForm(emploi.PostulerOffreEmploiForm):
     pass
 
 class OffreEmploiForm(ModelForm):
-    #poste = ModelChoiceField(queryset=rh.Poste.objects.all())
-
-    #class Meta:
-    #    model = recr.OffreEmploi  
-
-    #def __init__(self, *args, **kwargs):
-    #    super(OffreEmploiForm, self).__init__(*args, **kwargs)
-    #
-    #def save(self, *args, **kwargs):
-    #    kwargs2 = kwargs.copy()
-    #    kwargs2['commit'] = False
-    #    offre = super(OffreEmploiForm, self).save(*args, **kwargs2)
-    #    offre.poste = self.cleaned_data.get("poste").id
-    #    offre.poste_nom = self.cleaned_data.get("poste").nom
-    #    if 'commit' not in kwargs or kwargs['commit']:
-    #        offre.save()
-    #    return offre
-
     def clean(self):
         cleaned_data = self.cleaned_data
         date_limite = cleaned_data.get("date_limite")
@@ -101,9 +85,9 @@ class OffreEmploiForm(ModelForm):
                         supérieure à la date d'affection.")
         return cleaned_data
 
-################################################################################
+########################################################################
 # TEMPLATE COURRIEL
-################################################################################
+########################################################################
 class CandidatCourrielTemplateForm(ModelForm):
     def get_template(self):
         return self.data['template']
diff --git a/project/recrutement/groups.py b/project/recrutement/groups.py
new file mode 100644 (file)
index 0000000..b7fe562
--- /dev/null
@@ -0,0 +1,22 @@
+# -*- encoding: utf-8 -*-
+
+from project.groups import safe_create_groupe
+from project.groups import grp_correspondants_rh, \
+        grp_drh, \
+        grp_drh2, \
+        grp_directeurs_bureau, \
+        grp_administrateurs, \
+        grp_haute_direction
+
+EVALUATEURS = 'Évaluateurs'
+grp_evaluateurs = safe_create_groupe(name=EVALUATEURS)
+
+recrutement_groupes = (
+    grp_evaluateurs,
+    grp_correspondants_rh,
+    grp_drh,
+    grp_drh2,
+    grp_directeurs_bureau,
+    grp_administrateurs,
+    grp_haute_direction,
+)
index 0b84870..dc01130 100644 (file)
@@ -1,17 +1,17 @@
 # -=- encoding: utf-8 -=-
 
 from django.contrib.auth.models import User
-from tinymce import models as tinymce_models
 from django.db import models
 from django.db.models.signals import pre_save, pre_delete
 from django.dispatch import receiver
 
-
+from tinymce import models as tinymce_models
 from south.modelsinspector import add_introspection_rules
 add_introspection_rules([], ["^tinymce.models.HTMLField"])
 
 from auf.django.emploi import models as emploi
-from recrutement.workflow import  grp_evaluateurs_recrutement
+
+from project.recrutement.groups import  grp_evaluateurs
 
 ### CONSTANTES
 #NOTES
@@ -29,18 +29,21 @@ HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
                             automatiquement remplacés par les informations de \
                             chaque candidat."
 
+
 # Abstracts
 class Metadata(models.Model):
-    """Méta-données AUF.
+    """
+    Méta-données AUF.
     Metadata.actif = flag remplaçant la suppression.
     actif == False : objet réputé supprimé.
     """
     actif = models.BooleanField(default=True)
     date_creation = models.DateField(auto_now_add=True, )
-    
+
     class Meta:
         abstract = True
 
+
 class Candidat(emploi.Candidat):
     class Meta:
         proxy = True
@@ -56,14 +59,6 @@ class Candidat(emploi.Candidat):
             moyenne_votes = "Non disponible"
         return moyenne_votes
 
-class OffreEmploi(emploi.OffreEmploi):
-    class Meta:
-        proxy = True
-
-
-class CandidatPiece(emploi.CandidatPiece):
-    class Meta:
-        proxy = True
 
 class OffreEmploiManager(models.Manager):
     def get_query_set(self):
@@ -71,6 +66,7 @@ class OffreEmploiManager(models.Manager):
         return super(OffreEmploiManager, self).get_query_set().\
                     select_related(*fkeys).all()
 
+
 class ProxyOffreEmploi(emploi.OffreEmploi):
     class Meta:
         proxy = True
@@ -80,6 +76,7 @@ class ProxyOffreEmploi(emploi.OffreEmploi):
     def __unicode__(self):
         return '%s [%s] - View' % (self.nom, self.id)
 
+
 class ProxyCandidat(emploi.Candidat):
     class Meta:
         proxy = True
@@ -89,6 +86,7 @@ class ProxyCandidat(emploi.Candidat):
     def __unicode__(self):
         return '%s %s [%s]' % (self.prenom, self.nom, self.id)
 
+
 class Evaluateur(models.Model):
     user = models.ForeignKey(User, unique=True, verbose_name=u"Évaluateur")
 
@@ -98,30 +96,32 @@ class Evaluateur(models.Model):
     def __unicode__(self):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
+
 # Synchro des objets évaluateurs pour mettre les users Django dans le groupe
 # évaluateurs, afin d'y mettre des permissions
 @receiver(pre_save, sender=Evaluateur)
 def sync_add_groupe_evaluateur(sender, **kwargs):
     instance = kwargs['instance']
-    if grp_evaluateurs_recrutement not in instance.user.groups.all():
-        instance.user.groups.add(grp_evaluateurs_recrutement)
+    if grp_evaluateurs not in instance.user.groups.all():
+        instance.user.groups.add(grp_evaluateurs)
         instance.user.save()
 
+
 @receiver(pre_delete, sender=Evaluateur)
 def sync_delete_groupe_evaluateur(sender, **kwargs):
     instance = kwargs['instance']
-    instance.user.groups.remove(grp_evaluateurs_recrutement)
+    instance.user.groups.remove(grp_evaluateurs)
     instance.user.save()
 
 
 class CandidatEvaluation(models.Model):
-    candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', 
-                related_name='evaluations',) 
-    evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', 
-                    related_name='+', verbose_name=u'Évaluateur') 
+    candidat = models.ForeignKey(emploi.Candidat, db_column='candidat',
+                related_name='evaluations',)
+    evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur',
+                    related_name='+', verbose_name=u'Évaluateur')
     note = models.IntegerField(choices=NOTES, blank=True, null=True)
     commentaire = models.TextField(null=True, blank=True, default='Aucun')
-    date = models.DateField(auto_now_add=True,)  
+    date = models.DateField(auto_now_add=True,)
 
     class Meta:
         verbose_name = u'évaluation du candidat'
@@ -135,6 +135,7 @@ class CandidatEvaluation(models.Model):
             return u"non disponible"
         return u"%s %s" % (self.note, self.commentaire,)
 
+
 class MesCandidatEvaluation(CandidatEvaluation):
 
     class Meta:
@@ -149,34 +150,40 @@ TEMPLATE_CHOICES = (
     ('REF', 'Refusé'),
 )
 
-class CourrielTemplate(models.Model):
-    nom_modele = models.CharField(max_length=100, verbose_name=u'Nom du modèle',)
-    sujet = models.CharField(max_length=100, verbose_name=u'Sujet du courriel')
-    plain_text = models.TextField(verbose_name=u'Texte', 
-                                    help_text=HELP_TEXT_TAGS_ACCEPTES,  )
 
+class CourrielTemplate(models.Model):
+    nom_modele = models.CharField(u'nom du modèle', max_length=100)
+    sujet = models.CharField(u'sujet du courriel', max_length=100)
+    plain_text = models.TextField(u'texte', help_text=HELP_TEXT_TAGS_ACCEPTES)
 
     def __unicode__(self):
-        return u'%s' % self.nom_modele
+        return self.nom_modele
 
     class Meta:
-        ordering = ['nom_modele',]
+        ordering = ('nom_modele',)
         verbose_name = "Modèle de courriel"
         verbose_name_plural = "Modèles de courriel"
 
+
 class CandidatCourriel(models.Model):
-    candidats = models.ManyToManyField(Candidat, verbose_name=u"Candidats", )
-    template = models.ForeignKey(CourrielTemplate, db_column='template', 
-                related_name='+', verbose_name=u"Modèle de courriel", )
-    sujet = models.CharField(max_length=255, blank=True, 
-                                help_text=HELP_TEXT_TAGS_ACCEPTES, )
-    plain_text = models.TextField(verbose_name=u'Texte', blank=True,
-                                    help_text=HELP_TEXT_TAGS_ACCEPTES,  )
-    html = tinymce_models.HTMLField(verbose_name=u'Texte en HTML', null=True, 
-                                blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
+    candidats = models.ManyToManyField(Candidat, verbose_name=u"Candidats")
+    template = models.ForeignKey(
+        CourrielTemplate, db_column='template', related_name='+',
+        verbose_name=u"Modèle de courriel"
+    )
+    sujet = models.CharField(
+        max_length=255, blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES
+    )
+    plain_text = models.TextField(
+        u'texte', blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES
+    )
+    html = tinymce_models.HTMLField(
+        verbose_name=u'texte en HTML', null=True, blank=True,
+        help_text=HELP_TEXT_TAGS_ACCEPTES
+    )
 
     def __unicode__(self):
-        return '%s' % (self.titre)
+        return self.titre
 
     class Meta:
         verbose_name = u"modèle de courriel"
diff --git a/project/recrutement/permissions.py b/project/recrutement/permissions.py
deleted file mode 100644 (file)
index 510734c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- encoding: utf-8 -*-
-from django.contrib.auth.models import Group
-
-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 recrutement.
-    """
-    if user.is_superuser:
-        return True
-    for g in user.groups.all():
-        if g in recrutement_groupes:
-            return True
-    return False
diff --git a/project/recrutement/tests.py b/project/recrutement/tests.py
deleted file mode 100644 (file)
index 2247054..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-class SimpleTest(TestCase):
-    def test_basic_addition(self):
-        """
-        Tests that 1 + 1 always equals 2.
-        """
-        self.failUnlessEqual(1 + 1, 2)
-
-__test__ = {"doctest": """
-Another way to test that 1 + 1 is equal to 2.
-
->>> 1 + 1 == 2
-True
-"""}
-
index 6db004b..625502d 100644 (file)
@@ -1,25 +1,19 @@
 # -*- encoding: utf-8 -*
 
 from django.conf.urls.defaults import patterns, url
+
 from auf.django.emploi import settings
 
-urlpatterns = patterns('recrutement.views',
+urlpatterns = patterns('project.recrutement.views',
     url(r'^$', 'index', name='recrutement_index'),
-
-    (r'^prive/(?P<path>.*)$', 'mediaserve', {'document_root': settings.OE_PRIVE_MEDIA_ROOT}),
-
-    url(r'^affecter_evaluateurs_offre_emploi/$', 
-        'affecter_evaluateurs_offre_emploi', 
+    url(r'^prive/(?P<path>.*)$', 'mediaserve',
+        {'document_root': settings.OE_PRIVE_MEDIA_ROOT}),
+    url(r'^affecter_evaluateurs_offre_emploi/$',
+        'affecter_evaluateurs_offre_emploi',
         name='affecter_evaluateurs_offre_emploi'),
-
-    url(r'^envoyer_courriel_candidats/$', 
-        'envoyer_courriel_candidats', 
+    url(r'^envoyer_courriel_candidats/$', 'envoyer_courriel_candidats',
         name='envoyer_courriel_candidats'),
-
-    url(r'^selectionner_template/$', 
-        'selectionner_template', 
+    url(r'^selectionner_template/$', 'selectionner_template',
         name='selectionner_template'),
-
-    url(r'candidat_pdf/$', 'candidat_pdf', 
-        name='candidat_pdf'),
+    url(r'candidat_pdf/$', 'candidat_pdf', name='candidat_pdf'),
 )
index 217180f..e751c55 100644 (file)
@@ -1,21 +1,23 @@
 # -*- encoding: utf-8 -*-
 
-from django.core.urlresolvers import reverse
 from django.contrib import messages
-from django.views.static import serve
-from django.http import HttpResponseRedirect
-from django.shortcuts import render_to_response, redirect
-from django.template import Context, RequestContext, Template
 from django.core.mail import EmailMultiAlternatives
+from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect
+from django.shortcuts import render, redirect
+from django.template import Context, Template
+from django.views.static import serve
 
-from forms import *
-from models import *
-from recrutement.workflow import recrutement_groupes
+from auf.django.emploi import models as emploi
 
-################################################################################
-# MEDIA PRIVE
-################################################################################
+from project.decorators import redirect_interdiction
+
+from project.recrutement import forms
+from project.recrutement import models
+from project.recrutement.groups import recrutement_groupes
 
+
+# MEDIA PRIVE
 def mediaserve(request, path, document_root=None, show_indexes=False):
     """
     Sécuriser l'accès aux fichiers uploadés
@@ -33,104 +35,123 @@ def mediaserve(request, path, document_root=None, show_indexes=False):
 
     return serve(request, path, document_root, show_indexes)
 
+
 def index(request):
-    return render_to_response('recrutement/index.html', {}, 
-                                RequestContext(request))
+    c = {}
+    return render(request, 'recrutement/index.html', c)
+
 
 def selectionner_template(request):
     candidat_ids = request.GET.get('ids')
     if request.method == "POST":
-        form = CandidatCourrielTemplateForm(request.POST)
+        form = forms.CandidatCourrielTemplateForm(request.POST)
         if form.is_valid():
             form.save()
             courriel_template_id = form.get_template()
-            
-            return HttpResponseRedirect(reverse('envoyer_courriel_candidats')+
-            "?ids_cand=%s&id_temp=%s" % (candidat_ids, courriel_template_id))
+
+            return HttpResponseRedirect(
+                reverse('envoyer_courriel_candidats') +
+                "?ids_cand=%s&id_temp=%s" %
+                (candidat_ids, courriel_template_id)
+            )
     else:
-        form = CandidatCourrielTemplateForm()
+        form = forms.CandidatCourrielTemplateForm()
+
+    c = {
+        'form': form,
+    }
+    return render(request, "recrutement/selectionner_template.html", c)
 
-    c = {'form' : form}   
-    return render_to_response("recrutement/selectionner_template.html", 
-            Context(c), context_instance = RequestContext(request))
 
 def envoyer_courriel_candidats(request):
     candidat_ids = request.GET.get('ids_cand').split(',')
-    candidats = Candidat.objects.filter(id__in=candidat_ids)
+    candidats = models.Candidat.objects.filter(id__in=candidat_ids)
     template_id = request.GET.get('id_temp')
-    template = CourrielTemplate.objects.get(id=template_id) 
+    template = models.CourrielTemplate.objects.get(id=template_id)
 
     if request.method == "POST":
-        form = CandidatCourrielForm(request.POST, instance=template,
-                                    candidats=candidats, template=template)
+        form = forms.CandidatCourrielForm(
+            request.POST, instance=template, candidats=candidats,
+            template=template
+        )
 
         if form.is_valid():
             form.save()
-            courriel_template = CourrielTemplate()
+            courriel_template = models.CourrielTemplate()
             courriel_template.nom_modele = template.nom_modele
             courriel_template.sujet = form.data['sujet']
             courriel_template.plain_text = form.data['plain_text']
-            for cand in candidats:     
+            for cand in candidats:
                 send_templated_email(cand, courriel_template)
-            messages.add_message(request, messages.SUCCESS, 
-                            "Le email a été envoyé aux candidats.")
+            messages.add_message(
+                request, messages.SUCCESS,
+                "Le email a été envoyé aux candidats."
+            )
             return redirect("admin:recrutement_candidat_changelist")
     else:
-        form = CandidatCourrielForm(candidats=candidats, template=template,
-                                    initial={'sujet': template.sujet,
-                                    'plain_text': template.plain_text,})
+        form = forms.CandidatCourrielForm(
+            candidats=candidats, template=template,
+            initial={
+                'sujet': template.sujet,
+                'plain_text': template.plain_text
+            }
+        )
+    c = {
+        'form': form,
+    }
+    return render(request, "recrutement/envoyer_courriel_candidats.html", c)
 
-    c = {'form' : form}   
-    return render_to_response("recrutement/envoyer_courriel_candidats.html", 
-            Context(c), context_instance = RequestContext(request))
 
 def affecter_evaluateurs_offre_emploi(request):
     offre_emploi_ids = request.GET.get('ids').split(',')
-    offres_emploi = OffreEmploi.objects.filter(id__in=offre_emploi_ids)
+    offres_emploi = emploi.OffreEmploi.objects.filter(id__in=offre_emploi_ids)
     if request.method == "POST":
-        form = EvaluateurForm(request.POST, offres_emploi=offres_emploi)
+        form = forms.EvaluateurForm(request.POST, offres_emploi=offres_emploi)
         if form.is_valid():
             form.save()
-            messages.add_message(request, messages.SUCCESS, 
-                        "Les évaluateurs ont été affectés aux offres d'emploi.")
+            messages.add_message(
+                request, messages.SUCCESS,
+                "Les évaluateurs ont été affectés aux offres d'emploi."
+            )
             return redirect("admin:recrutement_proxyoffreemploi_changelist")
     else:
-        form = EvaluateurForm(offres_emploi=offres_emploi)
+        form = forms.EvaluateurForm(offres_emploi=offres_emploi)
+    c = {
+        'form': form,
+    }
+    return render(request, "recrutement/affecter_evaluateurs.html", c)
 
-    c = {'form' : form}   
-    return render_to_response("recrutement/affecter_evaluateurs.html", 
-            Context(c), context_instance = RequestContext(request))
 
 def send_templated_email(candidat, template):
     from django.conf import settings
     # Sujet
     sujet_template = Template(template.sujet)
-    dict_sujet = {"offre_emploi": candidat.offre_emploi.nom,}            
+    dict_sujet = {"offre_emploi": candidat.offre_emploi.nom}
     sujet = Context(dict_sujet)
     # Plain text
     texte_template = Template(template.plain_text)
-    dict_texte = {"nom_candidat": candidat.nom, 
-                    "prenom_candidat": candidat.prenom, 
-                    "offre_emploi": candidat.offre_emploi.nom,
-                    "genre_candidat": "Monsieur" if candidat.genre == "M" \
-                                     else "Madame",
-                    }
+    dict_texte = {
+        "nom_candidat": candidat.nom,
+        "prenom_candidat": candidat.prenom,
+        "offre_emploi": candidat.offre_emploi.nom,
+        "genre_candidat": "Monsieur" if candidat.genre == "M" else "Madame",
+    }
     texte = Context(dict_texte)
     if getattr(settings, 'MAILING_ACTIF', False):
-        dst_emails = [candidat.email, ]
+        dst_emails = [candidat.email]
     else:
-        dst_emails = ['developpeurs@ca.auf.org', ]
-    msg = EmailMultiAlternatives(sujet_template.render(sujet), 
-                                texte_template.render(texte),
-                                'recrutement@auf.org', 
-                                dst_emails,              
-                                )
+        dst_emails = ['developpeurs@ca.auf.org']
+    msg = EmailMultiAlternatives(
+        sujet_template.render(sujet), texte_template.render(texte),
+        'recrutement@auf.org', dst_emails
+    )
     msg.send()
 
 
 def candidat_pdf(request):
     candidat_id = request.GET.get('id')
-    candidat = Candidat.objects.get(id=candidat_id)
-
-    return render_to_response("recrutement/candidat_pdf.html", 
-            Context({'candidat' : candidat}), context_instance = RequestContext(request))
+    candidat = models.Candidat.objects.get(id=candidat_id)
+    c = {
+        'candidat': candidat,
+    }
+    return render(request, "recrutement/candidat_pdf.html", c)
diff --git a/project/recrutement/workflow.py b/project/recrutement/workflow.py
deleted file mode 100644 (file)
index f0ae148..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-from rh.groups import safe_create_groupe
-from rh.groups import CORRESPONDANT_RH, DRH_NIVEAU_1, DRH_NIVEAU_2, \
-        DIRECTEUR_DE_BUREAU, ADMINISTRATEURS, HAUTE_DIRECTION
-
-grp_evaluateurs_recrutement = safe_create_groupe(name='Évaluateurs')
-grp_correspondants_rh_recrutement = safe_create_groupe(name=CORRESPONDANT_RH)
-grp_drh_recrutement = safe_create_groupe(name=DRH_NIVEAU_1)
-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,
-    grp_correspondants_rh_recrutement,
-    grp_drh_recrutement,
-    grp_drh2_recrutement,
-    grp_directeurs_bureau_recrutement,
-    grp_administrateurs_recrutement,
-    grp_haute_direction_recrutement,
-)
index 0d4f547..4d63671 100644 (file)
@@ -1,25 +1,28 @@
 # -*- encoding: utf-8 -*-
 
 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, Count
 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
 import auf.django.references.models as ref
-import models as rh
-from forms import \
+
+from project import groups
+from project.decorators import in_drh_or_admin
+from project.groups import get_employe_from_user
+
+import project.rh.models as rh
+from project.rh.forms import \
         ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect, DossierForm
-from dae.utils import get_employe_from_user
-from change_list import ChangeList
-from project.rh import groups
-from decorators import in_drh_or_admin
+from project.rh.change_list import ChangeList
 
 
 class BaseAdmin(admin.ModelAdmin):
@@ -418,7 +421,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
         apercu_link = u"""<a title="Aperçu du dossier"
                              onclick="return showAddAnotherPopup(this);"
                              href='%s'>
-                             <img src="%simg/loupe.png" />
+                             <img src="%simg/dossier-apercu.png" />
                              </a>""" % \
                 (reverse('dossier_apercu', args=(d.id,)),
                  settings.STATIC_URL,
@@ -464,7 +467,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
     def _poste(self, dossier):
         link = u"""<a title="Aperçu du poste"
                       onclick="return showAddAnotherPopup(this);"
-                      href='%s'><img src="%simg/loupe.png" />
+                      href='%s'><img src="%simg/poste-apercu.png" />
                     </a>
                     <a href="%s" title="Modifier le poste">%s</a>""" % \
                 (reverse('poste_apercu', args=(dossier.poste.id,)),
@@ -486,7 +489,7 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin,
         view = u"""<a href="%s"
                       title="Aperçu l'employé"
                       onclick="return showAddAnotherPopup(this);">
-                      <img src="%simg/loupe.png" />
+                      <img src="%simg/employe-apercu.png" />
                     </a>""" % (view_link, settings.STATIC_URL,)
         return u"""%s<a href='%s' style="%s;">%s</a>""" % \
         (view, edit_link, style, employe)
@@ -573,7 +576,7 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
         return u"""<a title="Aperçu de l'employé"
                       onclick="return showAddAnotherPopup(this);"
                       href='%s'>
-                      <img src="%simg/loupe.png" />
+                      <img src="%simg/employe-apercu.png" />
                     </a>""" % \
             (reverse('employe_apercu', args=(obj.id,)), settings.STATIC_URL)
     _apercu.allow_tags = True
@@ -605,7 +608,7 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
                              href="%s"
                              onclick="return showAddAnotherPopup(this);"
                              title="Aperçu du dossier">
-                             <img src="%simg/loupe.png" />
+                             <img src="%simg/dossier-apercu.png" />
                           </a>
                           <a href="%s">Dossier</a>
                           &nbsp;""" % \
@@ -617,7 +620,7 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin,
                            href="%s"
                            onclick="return showAddAnotherPopup(this);"
                            title="Aperçu du poste">
-                           <img src="%simg/loupe.png" />
+                           <img src="%simg/poste-apercu.png" />
                         </a>
                         <a href="%s">Poste</a>
                         &nbsp;""" % \
@@ -865,7 +868,7 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin,
         view_link = u"""<a onclick="return showAddAnotherPopup(this);"
                            title="Aperçu du poste"
                            href='%s'>
-                        <img src="%simg/loupe.png" />
+                        <img src="%simg/poste-apercu.png" />
                         </a>""" % \
                 (reverse('poste_apercu', args=(poste.id,)),
                  settings.STATIC_URL,)
@@ -905,7