merge dev
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 10 Aug 2011 16:10:47 +0000 (12:10 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Wed, 10 Aug 2011 16:10:47 +0000 (12:10 -0400)
80 files changed:
.gitignore
buildout.cfg
project/context_processors.py
project/dae/context_processors.py [new file with mode: 0644]
project/dae/migrations/0044_auto__del_field_dossiercomparaison_montant_euros__del_field_postecompa.py [new file with mode: 0644]
project/dae/migrations/0045_auto__add_field_dossiercomparaison_classement__add_field_dossiercompar.py [new file with mode: 0644]
project/dae/migrations/0046_auto__add_field_postecomparaison_classement__add_field_postecomparaiso.py [new file with mode: 0644]
project/dae/migrations/0047_auto__chg_field_poste_date_debut.py [new file with mode: 0644]
project/dae/models.py
project/dae/templates/dae/embauche-dossier-consulter.html
project/dae/templates/dae/embauche-remun-consulter.html
project/dae/templates/dae/embauche.html
project/dae/templates/dae/embauche_consulter.html
project/dae/templates/dae/embauches_liste.html
project/dae/templates/dae/index.html
project/dae/templates/dae/poste.html
project/dae/templates/dae/poste_consulter.html
project/dae/templates/dae/poste_resume.html
project/dae/templates/dae/postes_liste.html
project/dae/utils.py
project/dae/views.py
project/dae/workflow.py
project/dashboard.py
project/decorators.py
project/lib.py [new file with mode: 0644]
project/media/css/sgrh.css [new file with mode: 0644]
project/media/js/dae-embauche.js
project/recrutement/admin.py
project/recrutement/api.py [new file with mode: 0644]
project/recrutement/context_processors.py [new file with mode: 0644]
project/recrutement/forms.py
project/recrutement/models.py
project/recrutement/permissions.py [new file with mode: 0644]
project/recrutement/templates/admin/recrutement/proxycandidat/change_form.html [new file with mode: 0644]
project/recrutement/templates/recrutement/affecter_evaluateurs.html
project/recrutement/templates/recrutement/envoyer_courriel_candidats.html
project/recrutement/templates/recrutement/index.html
project/recrutement/templates/recrutement/postuler_appel_offre.html
project/recrutement/templates/recrutement/selectionner_template.html
project/recrutement/urls.py
project/recrutement/views.py
project/rh/admin.py
project/rh/forms.py [new file with mode: 0644]
project/rh/lib.py
project/rh/models.py
project/rh/templates/rh/employe.html [new file with mode: 0644]
project/rh/templates/rh/employes_liste.html [new file with mode: 0644]
project/rh/templates/rh/include/dossier.html [new file with mode: 0644]
project/rh/templates/rh/index.html [deleted file]
project/rh/templates/rh/profil.html [new file with mode: 0644]
project/rh/urls.py
project/rh/validators.py [new file with mode: 0644]
project/rh/views.py
project/settings.py
project/templates/404.html [new file with mode: 0644]
project/templates/500.html [new file with mode: 0644]
project/templates/550.html [new file with mode: 0644]
project/templates/accueil.html [new file with mode: 0644]
project/templates/actions.html [new file with mode: 0644]
project/templates/autocompleteselect.html
project/templates/index.html [deleted file]
project/templates/menu.html
project/templates/sgrh.html [new file with mode: 0644]
project/urls.py
project/views.py
src/auf.django.emploi/.gitignore [new file with mode: 0644]
src/auf.django.emploi/CHANGES [new file with mode: 0644]
src/auf.django.emploi/MANIFEST.in [new file with mode: 0644]
src/auf.django.emploi/README [new file with mode: 0644]
src/auf.django.emploi/auf/__init__.py [new file with mode: 0644]
src/auf.django.emploi/auf/django/__init__.py [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/__init__.py [new file with mode: 0755]
src/auf.django.emploi/auf/django/emploi/api.py [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/forms.py [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/models.py [new file with mode: 0755]
src/auf.django.emploi/auf/django/emploi/settings.py [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html [new file with mode: 0644]
src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html [new file with mode: 0644]
src/auf.django.emploi/setup.cfg [new file with mode: 0644]
src/auf.django.emploi/setup.py [new file with mode: 0644]

index 51ce3bd..ec755d5 100644 (file)
@@ -6,7 +6,7 @@
 .*.swp
 *~
 \#*#
-src/*
+# src/*
 
 # DB de dev
 *.db
@@ -32,3 +32,4 @@ tmp
 
 # extra
 project/media_prive/*
+src/auf.django.emploi/auf/django/emploi/media_prive/*
index dbdfc44..6107390 100644 (file)
@@ -21,6 +21,7 @@ eggs =
     auf.django.skin
     auf.django.workflow
     auf.django.admingroup
+    auf.django.emploi
     datamaster_modeles
     auf.django.auth
     django-reversion
@@ -46,10 +47,11 @@ django = 1.2.5
 south = 0.7
 auf.django.skin = 0.15dev
 auf.django.auth = 0.5.5dev
+auf.django.metadata = 0.2dev
 django-reversion = 1.3.3
 auf.django.workflow = 0.14dev
 django-ajax-selects = 1.1.4
-django-alphafilter = 0.5.3auf2
+django-alphafilter = 0.5.3auf4
 #reportlab = 2.5
 #html5lib = 0.90
 #pyPDF = 1.13
index 566b745..58db668 100644 (file)
@@ -1,4 +1,6 @@
 # -*- 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)
@@ -6,6 +8,11 @@ from permissions import is_admin
 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)}
 
diff --git a/project/dae/context_processors.py b/project/dae/context_processors.py
new file mode 100644 (file)
index 0000000..40dce68
--- /dev/null
@@ -0,0 +1,8 @@
+# -*- encoding: utf-8 -*-
+from dae.decorators import user_in_dae_groupes as in_dae_groupes
+
+# Ajout de variables accessibles dans les templates (pour tester permissions dans templates)
+   
+def user_in_dae_groupes(request):
+    return {'user_in_dae_groupes': in_dae_groupes(request.user)}
+
diff --git a/project/dae/migrations/0044_auto__del_field_dossiercomparaison_montant_euros__del_field_postecompa.py b/project/dae/migrations/0044_auto__del_field_dossiercomparaison_montant_euros__del_field_postecompa.py
new file mode 100644 (file)
index 0000000..8109f0e
--- /dev/null
@@ -0,0 +1,422 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+    
+    def forwards(self, orm):
+        
+        # Deleting field 'DossierComparaison.montant_euros'
+        db.delete_column('dae_dossiercomparaison', 'montant_euros')
+
+        # Deleting field 'PosteComparaison.montant_euros'
+        db.delete_column('dae_postecomparaison', 'montant_euros')
+    
+    
+    def backwards(self, orm):
+        
+        # Adding field 'DossierComparaison.montant_euros'
+        db.add_column('dae_dossiercomparaison', 'montant_euros', self.gf('django.db.models.fields.IntegerField')(null=True), keep_default=False)
+
+        # Adding field 'PosteComparaison.montant_euros'
+        db.add_column('dae_postecomparaison', 'montant_euros', self.gf('django.db.models.fields.IntegerField')(null=True), keep_default=False)
+    
+    
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'dae.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+            'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Employe']"}),
+            'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.OrganismeBstg']"}),
+            'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dossiers'", 'to': "orm['dae.Poste']"}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Statut']"}),
+            'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10'}),
+            'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.TypeContrat']"})
+        },
+        'dae.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+        },
+        'dae.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'expatrie': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Poste']"}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']"}),
+            'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {}),
+            'local': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Service']"}),
+            'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.TypePoste']"}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"})
+        },
+        'dae.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons_internes'", 'to': "orm['dae.Poste']"})
+        },
+        'dae.postefinancement': {
+            'Meta': {'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'financements'", 'to': "orm['dae.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'dae.postepiece': {
+            'Meta': {'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Poste']"})
+        },
+        'dae.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to_field': "'code'", 'db_column': "'devise'", 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']", 'db_column': "'dossier'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh_v1.TypeRemuneration']"}),
+            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'datamaster_modeles.bureau': {
+            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': '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'"}),
+            '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', 'blank': 'True'}),
+            'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['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', [], {'max_length': '255', 'unique': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'unique': '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', [], {'max_length': '3', 'unique': 'True', '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}),
+            '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.classement': {
+            'Meta': {'object_name': 'Classement'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', [], {'max_length': '10', 'unique': 'True'}),
+            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.service': {
+            'Meta': {'object_name': 'Service'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '25', 'unique': 'True'}),
+            '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.typecontrat': {
+            'Meta': {'object_name': 'TypeContrat'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.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', [], {'related_name': "'valeurs_point'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {})
+        },
+        'workflow.workflowcommentaire': {
+            'Meta': {'object_name': 'WorkflowCommentaire'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+    
+    complete_apps = ['dae']
diff --git a/project/dae/migrations/0045_auto__add_field_dossiercomparaison_classement__add_field_dossiercompar.py b/project/dae/migrations/0045_auto__add_field_dossiercomparaison_classement__add_field_dossiercompar.py
new file mode 100644 (file)
index 0000000..300d90b
--- /dev/null
@@ -0,0 +1,424 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+    
+    def forwards(self, orm):
+        
+        # Adding field 'DossierComparaison.classement'
+        db.add_column('dae_dossiercomparaison', 'classement', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', blank=True, null=True, to=orm['rh_v1.Classement']), keep_default=False)
+
+        # Adding field 'DossierComparaison.statut'
+        db.add_column('dae_dossiercomparaison', 'statut', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', blank=True, null=True, to=orm['rh_v1.Statut']), keep_default=False)
+    
+    
+    def backwards(self, orm):
+        
+        # Deleting field 'DossierComparaison.classement'
+        db.delete_column('dae_dossiercomparaison', 'classement_id')
+
+        # Deleting field 'DossierComparaison.statut'
+        db.delete_column('dae_dossiercomparaison', 'statut_id')
+    
+    
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'dae.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+            'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Employe']"}),
+            'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.OrganismeBstg']"}),
+            'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dossiers'", 'to': "orm['dae.Poste']"}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Statut']"}),
+            'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10'}),
+            'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.TypeContrat']"})
+        },
+        'dae.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"})
+        },
+        'dae.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'expatrie': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Poste']"}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']"}),
+            'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {}),
+            'local': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Service']"}),
+            'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.TypePoste']"}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"})
+        },
+        'dae.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons_internes'", 'to': "orm['dae.Poste']"})
+        },
+        'dae.postefinancement': {
+            'Meta': {'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'financements'", 'to': "orm['dae.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'dae.postepiece': {
+            'Meta': {'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Poste']"})
+        },
+        'dae.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to_field': "'code'", 'db_column': "'devise'", 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']", 'db_column': "'dossier'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh_v1.TypeRemuneration']"}),
+            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'datamaster_modeles.bureau': {
+            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': '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'"}),
+            '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', 'blank': 'True'}),
+            'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['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', [], {'max_length': '255', 'unique': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'unique': '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', [], {'max_length': '3', 'unique': 'True', '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}),
+            '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.classement': {
+            'Meta': {'object_name': 'Classement'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', [], {'max_length': '10', 'unique': 'True'}),
+            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.service': {
+            'Meta': {'object_name': 'Service'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '25', 'unique': 'True'}),
+            '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.typecontrat': {
+            'Meta': {'object_name': 'TypeContrat'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.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', [], {'related_name': "'valeurs_point'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {})
+        },
+        'workflow.workflowcommentaire': {
+            'Meta': {'object_name': 'WorkflowCommentaire'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+    
+    complete_apps = ['dae']
diff --git a/project/dae/migrations/0046_auto__add_field_postecomparaison_classement__add_field_postecomparaiso.py b/project/dae/migrations/0046_auto__add_field_postecomparaison_classement__add_field_postecomparaiso.py
new file mode 100644 (file)
index 0000000..a5f1554
--- /dev/null
@@ -0,0 +1,426 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+    
+    def forwards(self, orm):
+        
+        # Adding field 'PosteComparaison.classement'
+        db.add_column('dae_postecomparaison', 'classement', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', blank=True, null=True, to=orm['rh_v1.Classement']), keep_default=False)
+
+        # Adding field 'PosteComparaison.statut'
+        db.add_column('dae_postecomparaison', 'statut', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', blank=True, null=True, to=orm['rh_v1.Statut']), keep_default=False)
+    
+    
+    def backwards(self, orm):
+        
+        # Deleting field 'PosteComparaison.classement'
+        db.delete_column('dae_postecomparaison', 'classement_id')
+
+        # Deleting field 'PosteComparaison.statut'
+        db.delete_column('dae_postecomparaison', 'statut_id')
+    
+    
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'dae.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+            'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Employe']"}),
+            'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.OrganismeBstg']"}),
+            'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dossiers'", 'to': "orm['dae.Poste']"}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Statut']"}),
+            'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10'}),
+            'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.TypeContrat']"})
+        },
+        'dae.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"})
+        },
+        'dae.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'expatrie': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Poste']"}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']"}),
+            'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {}),
+            'local': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Service']"}),
+            'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.TypePoste']"}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"})
+        },
+        'dae.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons_internes'", 'to': "orm['dae.Poste']"}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"})
+        },
+        'dae.postefinancement': {
+            'Meta': {'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'financements'", 'to': "orm['dae.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'dae.postepiece': {
+            'Meta': {'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Poste']"})
+        },
+        'dae.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to_field': "'code'", 'db_column': "'devise'", 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']", 'db_column': "'dossier'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh_v1.TypeRemuneration']"}),
+            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'datamaster_modeles.bureau': {
+            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': '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'"}),
+            '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', 'blank': 'True'}),
+            'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['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', [], {'max_length': '255', 'unique': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'unique': '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', [], {'max_length': '3', 'unique': 'True', '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}),
+            '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.classement': {
+            'Meta': {'object_name': 'Classement'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', [], {'max_length': '10', 'unique': 'True'}),
+            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.service': {
+            'Meta': {'object_name': 'Service'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '25', 'unique': 'True'}),
+            '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.typecontrat': {
+            'Meta': {'object_name': 'TypeContrat'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.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', [], {'related_name': "'valeurs_point'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {})
+        },
+        'workflow.workflowcommentaire': {
+            'Meta': {'object_name': 'WorkflowCommentaire'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+    
+    complete_apps = ['dae']
diff --git a/project/dae/migrations/0047_auto__chg_field_poste_date_debut.py b/project/dae/migrations/0047_auto__chg_field_poste_date_debut.py
new file mode 100644 (file)
index 0000000..62d4126
--- /dev/null
@@ -0,0 +1,420 @@
+# 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 'Poste.date_debut'
+        db.alter_column('dae_poste', 'date_debut', self.gf('django.db.models.fields.DateField')(null=True, blank=True))
+    
+    
+    def backwards(self, orm):
+        
+        # Changing field 'Poste.date_debut'
+        db.alter_column('dae_poste', 'date_debut', self.gf('django.db.models.fields.DateField')())
+    
+    
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'dae.dossier': {
+            'Meta': {'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'contrat_date_debut': ('django.db.models.fields.DateField', [], {}),
+            'contrat_date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dae.Employe']"}),
+            'employe_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'justif_nouveau_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_statut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_nouveau_tmp_remplacement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_evaluation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_salaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_statut_employe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'justif_rempl_type_contrat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.OrganismeBstg']"}),
+            'organisme_bstg_autre': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dossiers'", 'to': "orm['dae.Poste']"}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'salaire': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'salaire_titulaire_anterieur': ('django.db.models.fields.DecimalField', [], {'default': 'None', 'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Statut']"}),
+            'statut_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10'}),
+            'statut_titulaire_anterieur': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.TypeContrat']"})
+        },
+        'dae.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons'", 'to': "orm['dae.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"})
+        },
+        'dae.dossierpiece': {
+            'Meta': {'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.employe': {
+            'Meta': {'object_name': 'Employe'},
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Employe']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'dae.poste': {
+            'Meta': {'object_name': 'Poste'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'charges_patronales_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'to': "orm['rh_v1.Devise']"}),
+            'etat': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '20', 'null': 'True', 'blank': 'True'}),
+            'expatrie': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_rh': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.Poste']"}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']"}),
+            'indemn_expat_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_expat_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_fct_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {}),
+            'local': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': '100.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': '35.0', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'salaire_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['rh_v1.Service']"}),
+            'type_intervention': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh_v1.TypePoste']"}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.ValeurPoint']"})
+        },
+        'dae.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Classement']"}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'default': '5', 'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['datamaster_modeles.Implantation']", 'null': 'True', 'blank': 'True'}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comparaisons_internes'", 'to': "orm['dae.Poste']"}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'blank': 'True', 'null': 'True', 'to': "orm['rh_v1.Statut']"})
+        },
+        'dae.postefinancement': {
+            'Meta': {'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'financements'", 'to': "orm['dae.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'dae.postepiece': {
+            'Meta': {'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Poste']"})
+        },
+        'dae.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'date_creation': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to_field': "'code'", 'db_column': "'devise'", 'to': "orm['rh_v1.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dae.Dossier']", 'db_column': "'dossier'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'precision': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh_v1.TypeRemuneration']"}),
+            'user_creation': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'datamaster_modeles.bureau': {
+            'Meta': {'object_name': 'Bureau', 'db_table': "u'ref_bureau'"},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': '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'"}),
+            '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', 'blank': 'True'}),
+            'adresse_physique_bureau': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'adresse_physique_code_postal': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_code_postal_avant_ville': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'adresse_physique_no': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'adresse_physique_pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'impl_adresse_physique'", 'to_field': "'code'", 'db_column': "'adresse_physique_pays'", 'to': "orm['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', [], {'max_length': '255', 'unique': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '2', 'unique': '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', [], {'max_length': '3', 'unique': 'True', '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True'}),
+            '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.classement': {
+            'Meta': {'object_name': 'Classement'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', [], {'max_length': '10', 'unique': 'True'}),
+            'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.service': {
+            'Meta': {'object_name': 'Service'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '25', 'unique': 'True'}),
+            '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.typecontrat': {
+            'Meta': {'object_name': 'TypeContrat'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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', 'blank': 'True'}),
+            '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.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', [], {'related_name': "'valeurs_point'", 'db_column': "'implantation'", 'to': "orm['datamaster_modeles.Implantation']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {})
+        },
+        'workflow.workflowcommentaire': {
+            'Meta': {'object_name': 'WorkflowCommentaire'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'etat_final': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'etat_initial': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+    
+    complete_apps = ['dae']
index e2a912e..aeba9f7 100644 (file)
@@ -133,8 +133,9 @@ class Poste(PosteWorkflow, models.Model):
     # Méta
     date_creation = models.DateTimeField(auto_now_add=True)
     date_modification = models.DateTimeField(auto_now=True)
-    date_debut = models.DateField(verbose_name=u"Date de début",
-                                    help_text=HELP_TEXT_DATE)
+    date_debut = models.DateField(verbose_name="Date de début",
+                                    help_text=HELP_TEXT_DATE,
+                                    null=True, blank=True)
     date_fin = models.DateField(null=True, blank=True,
                                     verbose_name=u"Date de fin",
                                     help_text=HELP_TEXT_DATE)
@@ -379,10 +380,21 @@ class PostePiece(models.Model):
 class PosteComparaison(models.Model):
     poste = models.ForeignKey('Poste', related_name='comparaisons_internes')
     implantation = models.ForeignKey(ref.Implantation, null=True, blank=True, related_name="+")
-    nom = models.CharField(verbose_name=u"Poste", max_length=255, null=True, blank=True)
+    statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name='Statut', null=True, blank=True, )
+    classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name='Classement', null=True, blank=True, )
+    nom = models.CharField(verbose_name="Poste", max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
     devise = models.ForeignKey(rh.Devise, default=5, related_name='+', null=True, blank=True)
-    montant_euros = models.IntegerField(null=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
 
 
 ### EMPLOYÉ/PERSONNE
@@ -439,6 +451,7 @@ class Dossier(DossierWorkflow, models.Model):
         blank=True,)
 
     # Données antérieures de l'employé
+    # la devise??
     statut_anterieur = models.ForeignKey(
             rh.Statut, related_name='+', null=True, blank=True,
             verbose_name=u'Statut antérieur')
@@ -644,12 +657,24 @@ class DossierComparaison(models.Model):
     Photo d'une comparaison salariale au moment de l'embauche.
     """
     dossier = models.ForeignKey('Dossier', related_name='comparaisons')
+    statut = models.ForeignKey(rh.Statut, related_name='+', verbose_name='Statut', null=True, blank=True, )
+    classement = models.ForeignKey(rh.Classement, related_name='+', verbose_name='Classement', null=True, blank=True, )
     implantation = models.ForeignKey(ref.Implantation, null=True, blank=True)
     poste = models.CharField(max_length=255, null=True, blank=True)
     personne = models.CharField(max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
     devise = models.ForeignKey(rh.Devise, default=5, related_name='+', null=True, blank=True)
-    montant_euros = models.IntegerField(null=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.dossier.poste.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.dossier.poste.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
+
 
 
 ### RÉMUNÉRATION
index 161fe47..9feb9d9 100644 (file)
@@ -4,24 +4,29 @@
     <tbody>
     <tr>
         <th>Type de contrat</th>
-        <td colspan="4">{{ dossier.type_contrat }}</td>
+        <td>{{ dossier.type_contrat }}</td>
+    </tr>
+    <tr>
         <th>Remplacement</th>
         <td>{%if dossier.remplacement %}oui{% else %}non{%endif %}</td>
     </tr>
     <tr>
-        <th rowspan="2">Durée</th>
-        <td colspan=2> du {{ dossier.contrat_date_debut }}</td>
-        <td colspan=2>au {{ dossier.contrat_date_fin }}</td>
+        <th>Durée</th>
+        <td> du {{ dossier.contrat_date_debut }} au {{ dossier.contrat_date_fin }}</td>
+    </tr>
+    <tr>
         <th>Régime de travail</th>
         <td>{{ dossier.regime_travail|floatformat:0  }}%</td>
     </tr>
     <tr>
         <th>Nombre d'heure par semaine</th>
-        <td colspan=5>{{ dossier.regime_travail_nb_heure_semaine|floatformat:0  }}H</td>
+        <td>{{ dossier.regime_travail_nb_heure_semaine|floatformat:0  }}H</td>
+    </tr>
+    <tr>
+        <th>Statut</th>
+        <td>{{ dossier.statut }} {{ dossier.statut_residence }}</td>
     </tr>
     <tr>
-        <th>Statut : </th>
-        <td colspan="4">{{ dossier.statut }} {{ dossier.statut_residence }}</td>
         <th>Organisme BSTG</th>
         {% if dossier.organisme_bstg or dossier.organisme_bstg_autre %}
             <td>{% if dossier.organisme_bstg %}{{ dossier.organisme_bstg }}{% endif %} {{ dossier.organisme_bstg_autre }}</td>
     </tr>
     <tr>
         <td>{{ dossier.classement_anterieur|default:"" }}</td>
-        <td>{{ dossier.salaire_anterieur|floatformat:0 }}</td>
+        <td class="montant">{{ dossier.salaire_anterieur|floatformat:0 }}</td>
         <td>{{ dossier.statut_anterieur|default:"" }}</td>
         <td>{{ dossier.type_contrat|default:"" }}</td>
     </tr>
     </tbody>
 </table>
 {% else %}
-    <p>Il n'y a pas d'ancien dossier pour ce poste</p>
+    <p>Il n'y a pas d'ancien dossier pour cet employé</p>
 {% endif %}
 
 <h3>Précédent titulaire <span class="info">(le cas échéant)</span></h3>
 <table>
     <tbody>
     <tr>
-        <td colspan="7">
+        <td colspan="3">
             {{ dossier.employe_anterieur|default:"" }}
         </td>
     </tr>
     <tr>
         <th>Classement du titulaire antérieur</th>
-        <th colspan="4">Salaire du titulaire antérieur</th>
+        <th>Salaire du titulaire antérieur</th>
         <th>Statut du titulaire antérieur</th>
     </tr>
     <tr>
         <td>{{ dossier.classement_titulaire_anterieur|default:"" }}</td>
-        <td>{{ dossier.salaire_titulaire_anterieur|floatformat:0 }}</td>
+        <td class="montant">{{ dossier.salaire_titulaire_anterieur|floatformat:0 }}</td>
         <td>{{ dossier.statut_titulaire_anterieur|default:"" }}</td>
     </tr>
     </tbody>
index d7e2bbc..8711e83 100644 (file)
@@ -1,26 +1,32 @@
 <tr>
   <th>Type</th>
-  <th>Devise locale</th>
-  <th>Mensuel</th>
-  <th>Annuel</th>
+  <th colspan="2">Devise locale</th>
   <th colspan="2">Conversion en Euros</th>
   <th>Précision</th>
 </tr>
 
+<tr>
+  <th></th>
+  <th>Mensuel</th>
+  <th>Annuel</th>
+  <th>Mensuel</th>
+  <th>Annuel</th>
+  <th></th>
+</tr>
+
 {% for remun in dossier.get_remunerations_brutes %}
   <tr class="cout">
     <td>{{ remun.type }}</td>
-    <td>{{ remun.devise }}</td>
-    <td class="montant">{{ remun.montant_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro|floatformat:0 }}</td>
+    <td class="montant">{{ remun.montant_mois|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}€</td>
+    <td class="montant">{{ remun.montant_euro|floatformat:0 }}€</td>
     <td>{{ remun.precision }}</td>
   </tr>
 {% endfor %}
 
 <tr>
-    <th colspan="5">Salaire brut</th>
+    <th colspan="4">Salaire brut</th>
     <th id="sous-total-cout" class="montant">{{ dossier.get_salaire_brut|floatformat:0 }}€</th>
     <th></th>
 </tr>
 {% for remun in dossier.get_charges_salariales %}
   <tr class="aide">
     <td>{{ remun.type }}</td>
-    <td>{{ remun.devise }}</td>
-    <td class="montant">{{ remun.montant_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro|floatformat:0 }}</td>
+    <td class="montant">{{ remun.montant_mois|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}€</td>
+    <td class="montant">{{ remun.montant_euro|floatformat:0 }}€</td>
     <td>{{ remun.precision }}</td>
   </tr>
 {% endfor %}
 
 <tr>
-    <th colspan="5">Charges salariales</th>
+    <th colspan="4">Charges salariales</th>
     <th id="sous-total-aide" class="montant">{{ dossier.get_total_charges_salariales|floatformat:0 }}€</th>
     <th></th>
 </tr>
 
 <tr>
-    <th colspan="5">Salaire net</th>
+    <th colspan="4">Salaire net</th>
     <th id="sous-total-aide" class="montant">{{ dossier.get_salaire_net|floatformat:0 }}€</th>
     <th></th>
 </tr>
 {% for remun in dossier.get_charges_patronales %}
   <tr class="aide">
     <td>{{ remun.type }}</td>
-    <td>{{ remun.devise }}</td>
-    <td class="montant">{{ remun.montant_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro|floatformat:0 }}</td>
+    <td class="montant">{{ remun.montant_mois|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}€</td>
+    <td class="montant">{{ remun.montant_euro|floatformat:0 }}€</td>
     <td>{{ remun.precision }}</td>
   </tr>
 {% endfor %}
 <tr>
-    <th colspan="5">Charges patronales</th>
+    <th colspan="4">Charges patronales</th>
     <th id="sous-total-cout" class="montant">{{ dossier.get_total_charges_patronales|floatformat:0 }}€</th>
     <th></th>
 </tr>
 
 
 <tr>
-    <th colspan="5">Côuts AUF</th>
+    <th colspan="4">Côuts AUF</th>
     <th id="sous-total-cout" class="montant">{{ dossier.get_couts_auf|floatformat:0 }}€</th>
     <th></th>
 </tr>
@@ -77,7 +81,7 @@
 
 {% if dossier.get_remunerations_tierces %}
 <tr>
-    <th colspan="5">Autres rémunérations</th>
+    <th colspan="4">Autres rémunérations</th>
     <th id="sous-total-cout" class="montant">{{ dossier.get_total_remunerations_tierces|floatformat:0 }}€</th>
     <th></th>
 </tr>
 {% for remun in dossier.get_remunerations_tierces %}
   <tr class="aide">
     <td>{{ remun.type }}</td>
-    <td>{{ remun.devise }}</td>
-    <td class="montant">{{ remun.montant_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}</td>
-    <td class="montant">{{ remun.montant_euro|floatformat:0 }}</td>
+    <td class="montant">{{ remun.montant_mois|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant|floatformat:0 }} {{ remun.devise.code }}</td>
+    <td class="montant">{{ remun.montant_euro_mois|floatformat:0 }}€</td>
+    <td class="montant">{{ remun.montant_euro|floatformat:0 }}€</td>
     <td>{{ remun.precision }}</td>
   </tr>
 {% endfor %}
index 0a3cd4f..cc26176 100644 (file)
@@ -2,7 +2,6 @@
 {% load adminmedia %}
 
 {% block title %}RH - DAE - Embauche{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
 
 {% block extrahead %}
         <tr><th>{{ f.implantation.label }}</th><td>{{ f.implantation.errors }} {{ f.implantation }}</td></tr>
         <tr><th>{{ f.poste.label }}</th><td>{{ f.poste.errors }} {{ f.poste }}</td></tr>
         <tr><th>{{ f.personne.label }}</th><td>{{ f.personne.errors }} {{ f.personne }}</td></tr>
-        <tr><th>{{ f.montant.label }} ({{f.devise.label }})</th><td>{{ f.montant.errors }} {{ f.montant }} {{ f.devise.errors }} {{f.devise }} ({{ f.montant_euros.errors }} {{ f.montant_euros }} EUR)</td></tr>
+        <tr><th>{{ f.statut.label }}</th><td>{{ f.statut.errors }} {{ f.statut }}</td></tr>
+        <tr><th>{{ f.classement.label }}</th><td>{{ f.classement.errors }} {{ f.classement }}</td></tr>
+        <tr><th>{{ f.montant.label }} ({{f.devise.label }})</th><td>{{ f.montant.errors }} {{ f.montant }} {{ f.devise.errors }} {{f.devise }}</td></tr>
         </table>
     {% endfor %}
     </fieldset>
index 6fc81c8..d9e126f 100644 (file)
@@ -2,7 +2,6 @@
 {% load adminmedia dae %}
 
 {% block title %}RH - DAE - Embauche{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
 
 {% block extrahead %}
@@ -53,6 +52,8 @@
 <table>
   <tbody>
       <tr>
+          <th>Classement</th>
+          <th>Statut</th>
           <th>Implantation</th>
           <th>Employé</th>
           <th>Poste</th>
       </tr>
       {% for dc in dossier.comparaisons.all %}
       <tr>
+          <td>{{ dc.classement|default:"" }}</td>
+          <td>{{ dc.statut|default:"" }}</td>
           <td>{{ dc.implantation }}</td>
           <td>{{ dc.personne }}</td>
           <td>{{ dc.poste }}</td>
-          <td>{{ dc.montant }} {{ dc.devise }}</td>
-          <td>{{ dc.montant_euros }} EUR</td>
+          <td>{{ dc.montant|floatformat:0 }} {{ dc.devise }}</td>
+          <td>{{ dc.montant_euros|floatformat:0 }} EUR</td>
       </tr>
       {% endfor %}
   </tbody>
-<table>
-<fieldset>
+</table>
+</fieldset>
 
 
 <div id="form-dossier">
index acaa134..1cc7d8b 100644 (file)
@@ -1,7 +1,6 @@
 {% extends 'base.html' %}
 
 {% block title %}RH - DAE - Embauches{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
 
 {% block main %}
index c2ac8d2..1d6bc8b 100644 (file)
@@ -2,7 +2,6 @@
 {% load dae %}
 
 {% block title %}RH - DAE{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
 
 {% block main %}
index 789d173..d861538 100644 (file)
@@ -2,7 +2,6 @@
 {% load adminmedia %}
 
 {% block title %}RH - DAE - Poste{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}
 Demande d'autorisation d'embauche
 {% endblock %}
@@ -301,7 +300,9 @@ Demande d'autorisation d'embauche
         <tr class="comparaison-interne"><td colspan=2>Rechercher un poste : {{ f.recherche }}</td></tr>
         <tr><th>{{ f.implantation.label }}</th><td>{{ f.implantation.errors }} {{ f.implantation }}</td></tr>
         <tr><th>{{ f.nom.label }}</th><td>{{ f.nom.errors }} {{ f.nom }}</td></tr>
-        <tr><th>{{ f.montant.label }} ({{f.devise.label }})</th><td>{{ f.montant.errors }} {{ f.montant }} {{ f.devise.errors }} {{f.devise }} ({{ f.montant_euros.errors }} {{ f.montant_euros }} EUR)</td></tr>
+        <tr><th>{{ f.statut.label }}</th><td>{{ f.statut.errors }} {{ f.statut}}</td></tr>
+        <tr><th>{{ f.classement.label }}</th><td>{{ f.classement.errors }} {{ f.classement}}</td></tr>
+        <tr><th>{{ f.montant.label }} ({{f.devise.label }})</th><td>{{ f.montant.errors }} {{ f.montant }} {{ f.devise.errors }} {{f.devise }}</td></tr>
         </table>
     {% endfor %}
     </fieldset>
index b200fe3..e720fb6 100644 (file)
@@ -2,7 +2,6 @@
 {% load adminmedia dae %}
 
 {% block title %}RH - DAE - Poste{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}
 Demande d'autorisation d'embauche
 {% endblock %}
index c38cad3..f156a22 100644 (file)
         <td>{{ poste.implantation }}</td>
     </tr>
     <tr>
+        <th>Lieu</th>
+        <td>{{ poste.implantation.adresse_physique_ville }}, {{ poste.implantation.adresse_physique_pays }}</td>
+    </tr>
+    <tr>
         <th>Type poste</th>
         <td>{{ poste.type_poste }}</td>
     </tr>
     <tbody>
     <tr>
         <th>Statut</th>
-        <th>local</th><td>{% if poste.local %}oui{% else %}non{% endif %}</td>
-        <th>expatrié</th><td>{% if poste.expatrie %}oui{% else %}non{% endif %}</td>
-        <th>mise à disposition</th><td>{% if poste.mise_a_disposition %}oui{% else %}non{% endif %}</td>
+        <td>Local : {% if poste.local %}oui{% else %}non{% endif %}</td>
+        <td>Expatrié : {% if poste.expatrie %}oui{% else %}non{% endif %}
+        <td>Mise à disposition : {% if poste.mise_a_disposition %}oui{% else %}non{% endif %}</td>
     </tr>
     <tr>
         <th>Appel</th>
-        <td colspan="6">{{ poste.appel }}</td>
+        <td colspan="3">{{ poste.appel }}</td>
     </tr>
     </tbody>
 </table>
 <table>
     <tbody>
     <tr>
+        <th>Classement</th>
+        <th>Statut</th>
         <th>Poste</th>
         <th>Implantation</th>
         <th>Montant</th>
     </tr>
     {% for poste_connexe in poste.comparaisons_internes.all %}
     <tr>
+        <td>{{ poste_connexe.classement }}</td>
+        <td>{{ poste_connexe.statut }}</td>
         <td>{{ poste_connexe.nom }}</td>
         <td>{{ poste_connexe.implantation }}</td>
-        <td>{{ poste_connexe.montant }} {{ poste_connexe.devise.code }}</td>
-        <td>{{ poste_connexe.montant_euros }} €</td>
+        <td>{{ poste_connexe.montant|floatformat:0 }} {{ poste_connexe.devise.code }}</td>
+        <td>{{ poste_connexe.montant_euros|floatformat:0 }} €</td>
     </tr>
     {% endfor %}
     </tbody>
index f9703ac..c010b90 100644 (file)
@@ -1,7 +1,6 @@
 {% extends 'base.html' %}
 
 {% block title %}RH - DAE - Postes{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Demande d'autorisation d'engagement{% endblock %}
 
 {% block main %}
index d8f765b..c0f2c05 100644 (file)
@@ -3,14 +3,15 @@
 import datamaster_modeles.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
+    """
+    Retourne un employé AUF à partir de son user Django. 
+    """
+    # TODO : Refactoring : utiliser project.lib.get_employe_from_user
+    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)
index e53a316..ea30ed6 100644 (file)
@@ -498,6 +498,8 @@ def dossier_resume(request, dossier_id=None):
 
     data = {}
     data['personne'] = unicode(dossier.employe)
+    data['classement'] = dossier.classement.id
+    data['statut'] = dossier.statut.id
     data['implantation'] = dossier.implantation1.id
     data['poste'] = u"%s %s" % (dossier.poste1.type_poste.nom, dossier.complement1)
     data['montant'] = dossier.get_salaire()
index bb1c55f..fc2b5f4 100644 (file)
@@ -10,6 +10,7 @@ def safe_create_groupe(name):
     ne peut se faire. (C'est le cas au syncdb, quand la table de groupe
     n'a pas été crée encore).
     """
+    # TODO : Refactoring : utiliser project.lib.safe_create_groupe
     try:
         grp, created = Group.objects.get_or_create(name=name)
     except:
index 03ecf29..c93df5f 100644 (file)
@@ -29,7 +29,22 @@ class CustomIndexDashboard(Dashboard):
         # append an app list module for "Applications"
         self.children.append(modules.AppList(
             _('Applications'),
-            exclude=('django.contrib.*',),
+            exclude=('django.contrib.*',
+            'project.rh.models.AyantDroit',
+            'project.rh.models.Classement',
+            'project.rh.models.Devise',
+            'project.rh.models.FamilleEmploi',
+            'project.rh.models.OrganismeBstg',
+            'project.rh.models.Responsable',
+            'project.rh.models.Service',
+            'project.rh.models.Statut',
+            'project.rh.models.TauxChange',
+            'project.rh.models.TypeContrat',
+            'project.rh.models.TypePoste',
+            'project.rh.models.TypeRevalorisation',
+            'project.rh.models.TypeRemuneration',
+            'project.rh.models.ValeurPoint',
+            ),
         ))
 
         # append an app list module for "Administration"
index 03430bf..2c543c8 100644 (file)
@@ -2,11 +2,17 @@
 """
 Décorateurs AUF
 """
-from django.contrib.auth.decorators import user_passes_test
-from django.core.urlresolvers import reverse
+#from django.contrib.auth.decorators import user_passes_test
+#from django.core.exceptions import PermissionDenied
+#from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
+from django.shortcuts import redirect
 from permissions import is_employe, is_admin
 
+#from datamaster_modeles import models as ref
+from dae.utils import get_employe_from_user
+from rh import models as rh
+
 # Décorateurs des fonctions dans views (pour tester permissions dans views)
     
 def admin_required(fn):
@@ -23,3 +29,19 @@ def admin_required(fn):
             tup = login_url, REDIRECT_FIELD_NAME, path
             return HttpResponseRedirect('%s?%s=%s' % tup)
     return inner
+    
+def user_is_this_employe(fn):
+    """
+    Décorateur qui vérifie si le user est l'employé demandé.
+    Succes = execution de la vue.
+    Echec = page d'erreur de permission
+    """
+    def inner(request, id, *args, **kwargs):
+        id = int(id)
+        user = request.user
+        employe = get_employe_from_user(user)
+        if user.is_authenticated() and employe and id==employe.id:
+            return fn(request, id, *args, **kwargs)
+#        raise PermissionDenied
+        return redirect('550')
+    return inner
diff --git a/project/lib.py b/project/lib.py
new file mode 100644 (file)
index 0000000..7a2e010
--- /dev/null
@@ -0,0 +1,43 @@
+# -*- encoding: utf-8 -*-
+
+import datamaster_modeles.models as ref
+import rh.models as rh
+
+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)
+        employe.courriel = ref.Employe.objects.get(id=employe.id).courriel
+    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
diff --git a/project/media/css/sgrh.css b/project/media/css/sgrh.css
new file mode 100644 (file)
index 0000000..62e6167
--- /dev/null
@@ -0,0 +1,19 @@
+#menu li a.disabled { color:#BBD8EC }
+#menu li a.disabled:hover { color:#BBD8EC }
+
+.clear { clear:both; }
+.gauche { float:left; padding-right:2%; }
+.gauche25 { float:left; width:23%; padding-right:2%; }
+.gauche33 { float:left; width:31%; padding-right:2%; }
+.gauche40 { float:left; width:38%; padding-right:2%; }
+.gauche50 { float:left; width:48%; padding-right:2%; }
+.gauche60 { float:left; width:58%; padding-right:2%; }
+.droite { float:right; }
+.droite25 { float:right; width:23%; padding-left:2%; }
+.droite33 { float:right; width:31%; padding-left:2%; }
+.droite40 { float:right; width:38%; padding-left:2%; }
+.droite50 { float:right; width:48%; padding-left:2%; }
+.droite60 { float:right; width:58%; padding-left:2%; }
+
+.nombre { text-align:right; }
+.archive td { background-color:#e6e6e6; }
index 1b56f0b..404289f 100644 (file)
@@ -177,6 +177,8 @@ $(document).ready(function() {
         var chargement_dossier = $.getJSON("/dae/dossier_resume/" + dossier_id);
         chargement_dossier.success(function(data) {
             $('#' + prefix_dossier_connexe + 'implantation').val(data['implantation']);
+            $('#' + prefix_dossier_connexe + 'classement').val(data['classement']);
+            $('#' + prefix_dossier_connexe + 'statut').val(data['statut']);
             $('#' + prefix_dossier_connexe + 'poste').val(data['poste']);
             $('#' + prefix_dossier_connexe + 'personne').val(data['personne']);
             $('#' + prefix_dossier_connexe + 'montant').val(data['montant']);
index c7fc9b6..b817bd5 100644 (file)
@@ -4,20 +4,54 @@ from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
 from django.contrib import admin
 from django.shortcuts import get_object_or_404
+from django.core.files.storage import default_storage
 
 from reversion.admin import VersionAdmin
 from datamaster_modeles.models import Employe, Implantation, Region
+from django.forms.models import BaseInlineFormSet
 
+from project.rh import models as rh
 from recrutement.models import *
 from recrutement.workflow import grp_administrateurs_recrutement,\
                             grp_evaluateurs_recrutement, grp_drh_recrutement
+from recrutement.forms import *
+
+"""
+class MetaAdmin(VersionAdmin):
+    def get_actions(self, request):
+    
+Pour refactoring
+"""
+
+class ProxyEvaluateur(Evaluateur.offres_emploi.through):
+    """
+    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
+    plus ergonomique.
+    """
+    class Meta:
+        proxy = True
+        verbose_name = "évaluateur"
+
+class EvaluateurInline(admin.TabularInline):
+    model = ProxyEvaluateur
+    fields = ('evaluateur',)
+    extra = 1
 
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'resume', 'date_limite', 'region',  'statut', 
-                    'est_affiche', '_candidatsList')
+                    'est_affiche', '_candidatsList', )
+    exclude = ('poste_nom',)
     list_filter = ('statut', 'est_affiche', )
     actions = ['affecter_evaluateurs_offre_emploi', ]
+    form = OffreEmploiForm
+    inlines = [EvaluateurInline, ]
+
+    def get_actions(self, request):
+        actions = super(OffreEmploiAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
+
     # Affecter un évaluateurs à des offres d'emploi
     def affecter_evaluateurs_offre_emploi(modeladmin, obj, candidats):   
         selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
@@ -33,12 +67,12 @@ class OffreEmploiAdmin(VersionAdmin):
     _candidatsList.allow_tags = True 
     _candidatsList.short_description = "Afficher la liste des candidats"
 
-
     def queryset(self, request):
         qs = self.model._default_manager.get_query_set()
         # Si user est superuser afficher toutes les offres d'emploi  
         user_groupes = request.user.groups.all()
-        if not grp_drh_recrutement in user_groupes:
+        if not grp_drh_recrutement in user_groupes and \
+            not request.user.is_superuser:
             """
             Si le user n'est ni un évaluateur ni un administrateur régional,
             retourner none
@@ -72,14 +106,15 @@ class OffreEmploiAdmin(VersionAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
             return True
         return False   
 
 class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
     list_display = ('nom', 'resume', 'date_limite', 'region', 'statut', 
                     'est_affiche')
-    readonly_fields = ('description', 'poste', 'bureau',
+    readonly_fields = ('description', 'bureau',
                         'duree_affectation', 'renumeration',
                         'debut_affectation', 'lieu_affectation', 'nom',
                         'resume', 'date_limite', 'region')
@@ -88,7 +123,7 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
             'fields': ('nom', )        
         }),
         ('Description générale', {
-            'fields': ('poste', 'resume','description', 'date_limite', )        
+            'fields': ('resume','description', 'date_limite', )        
         }),
         ('Coordonnées', {
             'fields': ('lieu_affectation', 'bureau', 'region', )
@@ -98,6 +133,20 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
                         'renumeration', )
         }),
     )        
+
+    def get_actions(self, request):
+        actions = super(ProxyOffreEmploiAdmin, self).get_actions(request)
+        del actions['affecter_evaluateurs_offre_emploi']
+        return actions
+
+    def response_change(self, request, obj):
+        response = super(ProxyOffreEmploiAdmin, self).response_change(request, obj)
+        user_groupes = request.user.groups.all()
+        if grp_drh_recrutement in user_groupes or \
+            request.user.is_superuser:
+            return HttpResponseRedirect(reverse('admin:recrutement_offreemploi_changelist'))
+        return HttpResponseRedirect(reverse('admin:recrutement_proxyoffreemploi_changelist'))
+
     def has_add_permission(self, request):
         return False
 
@@ -107,38 +156,39 @@ class ProxyOffreEmploiAdmin(OffreEmploiAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_evaluateurs_recrutement in user_groupes or \
-            grp_drh_recrutement in user_groupes:
+            grp_drh_recrutement in user_groupes or \
+            request.user.is_superuser:
             return True
         return False   
 
-class ProxyCandidatPiece(CandidatPiece):
-    """
-    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
-    plus ergonomique.
-    """
-    class Meta:
-        proxy = True
-        verbose_name = "pièce jointe"
-        verbose_name_plural = "pièces jointes"
-
 class CandidatPieceInline(admin.TabularInline):
-    model = ProxyCandidatPiece
-    fields = ('candidat', 'nom', 'path', )
+    model = CandidatPiece
+    fields = ('candidat', 'nom', 'path',)
     extra = 1
+    max_num = 3
 
-class ProxyEvaluateur(Evaluateur.candidats.through):
+class CandidatEvaluationInlineFormSet(BaseInlineFormSet):
     """
-    Ce proxy sert uniquement dans l'admin à disposer d'un libellé
-    plus ergonomique.
+    Empêche la suppression d'une évaluation pour le CandidatEvaluationInline
     """
-    class Meta:
-        proxy = True
-        verbose_name = "évaluateur"
-
-class EvaluateurInline(admin.TabularInline):
-    model = ProxyEvaluateur
-    fields = ('evaluateur',)
-    extra = 1
+    def __init__(self, *args, **kwargs):
+        super(CandidatEvaluationInlineFormSet, self).__init__(*args, **kwargs)
+        self.can_delete = False 
+
+class CandidatEvaluationInline(admin.TabularInline):
+    model = CandidatEvaluation
+    fields = ('evaluateur', 'note', 'commentaire')
+    max_num = 0
+    extra = 0
+    formset = CandidatEvaluationInlineFormSet
+    
+    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
 
 class CandidatAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
@@ -168,17 +218,15 @@ class CandidatAdmin(VersionAdmin):
     )
     inlines = [
         CandidatPieceInline,
-        EvaluateurInline,
+        CandidatEvaluationInline,
     ]
 
-    actions = ['affecter_candidats_evaluateur', 'envoyer_courriel_candidats']
-    # Affecter un évaluateurs à des candidats
-    def affecter_candidats_evaluateur(modeladmin, obj, candidats):   
-        selected = obj.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+    actions = ['envoyer_courriel_candidats']
 
-        return HttpResponseRedirect(reverse('affecter_evaluateurs_candidats')+
-                "?ids=%s" % (",".join(selected)))
-    affecter_candidats_evaluateur.short_description = u'Affecter évaluateur(s)'
+    def get_actions(self, request):
+        actions = super(CandidatAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
 
     # Envoyer un courriel à des candidats
     def envoyer_courriel_candidats(modeladmin, obj, candidats):   
@@ -201,7 +249,7 @@ class CandidatAdmin(VersionAdmin):
         return "<a href='%s'>Voir le candidat</a>" % \
             (reverse('admin:recrutement_proxycandidat_change', args=(obj.id,)))
     afficher_candidat.allow_tags = True    
-    afficher_candidat.short_description = u'Afficher les détails du candidat'
+    afficher_candidat.short_description = u'Détails du candidat'
 
     # Voir l'offre d'emploi
     def voir_offre_emploi(self, obj):
@@ -230,7 +278,8 @@ class CandidatAdmin(VersionAdmin):
     def add_delete_permission(self, request, obj=None) :
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
             return True
         return False    
 
@@ -243,11 +292,12 @@ class CandidatAdmin(VersionAdmin):
     def has_change_permission(self, request, obj=None):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
-            grp_administrateurs_recrutement in user_groupes:
+            grp_administrateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
             return True
         return False   
 
-    def queryset(self, obj):
+    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 
@@ -258,15 +308,16 @@ class CandidatAdmin(VersionAdmin):
         """
         qs = self.model._default_manager.get_query_set() 
         # Si user est superuser afficher tous les candidats       
-        user_groupes = obj.user.groups.all()
-        if not grp_drh_recrutement in user_groupes:
+        user_groupes = request.user.groups.all()
+        if not grp_drh_recrutement in user_groupes and \
+            not request.user.is_superuser:
             # Si le user n'est ni un évaluateur ni un administrateur régional,
             # retourner none
 
             # Vérifier groupes
             if grp_evaluateurs_recrutement in user_groupes:
                 try:
-                    user = Evaluateur.objects.get(user=obj.user)
+                    user = Evaluateur.objects.get(user=request.user)
                 except Evaluateur.DoesNotExist:       
                     return qs.none()       
                 """
@@ -288,7 +339,7 @@ class ProxyCandidatAdmin(CandidatAdmin):
                         'nombre_dependant', 'telephone', 'email', 'adresse', 
                         'ville', 'etat_province', 'code_postal', 'pays', 
                         'niveau_diplome', 'employeur_actuel', 'poste_actuel',
-                        'domaine_professionnel',)
+                        'domaine_professionnel', 'pieces_jointes',)
     fieldsets = (
         ("Offre d'emploi", {
             'fields': ('offre_emploi', )
@@ -304,10 +355,18 @@ class ProxyCandidatAdmin(CandidatAdmin):
         ('Informations professionnelles', {
             'fields': ('niveau_diplome','employeur_actuel', 
                         'poste_actuel', 'domaine_professionnel',)
-        }),  
+        }),   
     )
     inlines = []
 
+    def response_change(self, request, obj):
+        response = super(ProxyCandidatAdmin, self).response_change(request, obj)
+        user_groupes = request.user.groups.all()
+        if grp_drh_recrutement in user_groupes or \
+            request.user.is_superuser:
+            return HttpResponseRedirect(reverse('admin:recrutement_candidat_changelist'))
+        return HttpResponseRedirect(reverse('admin:recrutement_proxycandidat_changelist'))
+
     def has_add_permission(self, request):
         return False
 
@@ -318,7 +377,8 @@ class ProxyCandidatAdmin(CandidatAdmin):
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes or \
-            grp_evaluateurs_recrutement in user_groupes:
+            grp_evaluateurs_recrutement in user_groupes or \
+            request.user.is_superuser:
             return True
         return False   
 
@@ -340,15 +400,24 @@ class CandidatPieceAdmin(admin.ModelAdmin):
 
 class EvaluateurAdmin(VersionAdmin):
     fieldsets = (
-        (None, {'fields': ('user', )}),
-        #(None, {'fields': ('candidats',)}),
+        ("Utilisateur", {
+            'fields': ('user',)
+        }),
+        ("Offres d'emploi à évaluer", {
+            'fields': ('offres_emploi',)
+        }),
     )
 
+    def get_actions(self, request):
+        actions = super(EvaluateurAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
+
 class AdministrateurRegionalAdmin(VersionAdmin):
     pass
 
 class CandidatEvaluationAdmin(VersionAdmin):
-    list_display = ('_offre_emploi', '_candidat', 'evaluateur', '_note', 
+    list_display = ('_candidat', '_offre_emploi', 'evaluateur', '_note', 
                     '_commentaire', )
     readonly_fields = ('candidat', 'evaluateur')
     fieldsets = (
@@ -357,6 +426,11 @@ class CandidatEvaluationAdmin(VersionAdmin):
         }),
     )
 
+    def get_actions(self, request):
+        actions = super(CandidatEvaluationAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
+
     def _note(self, obj):
         """
         Si l'évaluateur n'a pas encore donné de note au candidat, indiquer
@@ -405,7 +479,6 @@ class CandidatEvaluationAdmin(VersionAdmin):
             args=(obj.candidat.offre_emploi.id,)), obj.candidat.offre_emploi)
     _offre_emploi.allow_tags = True
     _offre_emploi.short_description = "Voir offre d'emploi"
-    _offre_emploi.admin_order_field = 'offre_emploi'
     
     def has_change_permission(self, request, obj=None):
         """
@@ -422,7 +495,8 @@ class CandidatEvaluationAdmin(VersionAdmin):
         """
         qs = self.model._default_manager.get_query_set()
         user_groupes = request.user.groups.all()
-        if grp_drh_recrutement in user_groupes:
+        if grp_drh_recrutement in user_groupes  or \
+            request.user.is_superuser:
             return qs.select_related('offre_emploi')
 
         try:
@@ -438,7 +512,10 @@ class CandidatEvaluationAdmin(VersionAdmin):
                 filter(id__in=candidats_evaluations_ids)
 
 class CourrielTemplateAdmin(VersionAdmin):
-    pass
+    def get_actions(self, request):
+        actions = super(CourrielTemplateAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
 
 admin.site.register(OffreEmploi, OffreEmploiAdmin)
 admin.site.register(ProxyOffreEmploi, ProxyOffreEmploiAdmin)
diff --git a/project/recrutement/api.py b/project/recrutement/api.py
new file mode 100644 (file)
index 0000000..e8ca95a
--- /dev/null
@@ -0,0 +1,143 @@
+# -*- encoding: utf-8 -*
+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.utils import simplejson
+from django.contrib import messages
+
+from auf.django.emploi import models as emploi
+from auf.django.emploi import forms as emploiForms
+from project.recrutement.models import Evaluateur, CandidatEvaluation, \
+                                CourrielTemplate
+from project.recrutement.views import *
+
+STATUS_OK = 200
+
+STATUS_ERROR = 400
+STATUS_ERROR_NOT_FOUND = 404
+STATUS_ERROR_PERMISSIONS = 403
+STATUS_ERROR_BADMETHOD = 405
+
+def api(request, method):
+    # TODO: Sécurité : 
+    #       L'échange d'information doit être possible qu'avec les HOST désirés.
+
+    #if request.method != 'POST':
+    #    return api_return(STATUS_ERROR_BADMETHOD)
+    
+    api = API(request)
+    if hasattr(api, 'api_%s' % method):
+        return getattr(api, 'api_%s' % method)()
+    
+    return api_return(STATUS_ERROR)
+
+def api_return(status, text='', json=False):
+    content_type = 'text/html'
+    if status == STATUS_OK and json:
+        content_type = 'text/json'
+    if text is None:
+        if status == STATUS_ERROR:
+            text = 'Error'
+        elif status == STATUS_ERROR_NOT_FOUND:
+            text = 'Resource Not Found'
+        elif status == STATUS_ERROR_PERMISSIONS:
+            text = 'Invalid username or password'
+        elif status == STATUS_ERROR_BADMETHOD:
+            text = 'Invalid request method'
+        elif status == STATUS_OK:
+            text = 'OK'
+
+    r = HttpResponse(status=status, content=text, content_type=content_type)
+
+    if status == STATUS_ERROR_BADMETHOD:
+        r.Allow = 'POST'
+
+    return r
+
+
+class API:
+    def __init__(self, request):
+        self.request = request
+
+    def api_candidat_add(self):
+        vars = dict()
+        offre_emploi = get_object_or_404(emploi.OffreEmploi, id=self.request.GET.get('id'))
+        cand = emploi.Candidat()
+        cand.offre_emploi = offre_emploi
+
+        if self.request.method == "POST":
+            form = emploiForms.PostulerOffreEmploiForm(self.request.POST,
+                     instance=cand, offre_emploi=offre_emploi)
+            piecesForm = emploiForms.CandidatPieceForm(self.request.POST, self.request.FILES,
+                        instance=cand)
+            
+            if form.is_valid() and piecesForm.is_valid():
+                offre = form.save()
+                piecesForm.instance = offre
+                piecesForm.save() 
+         
+                """courriel_template = CourrielTemplate.objects.\
+                            get(id=1)
+                send_templated_email(cand, courriel_template)
+                """
+                evaluateurs = offre_emploi.evaluateurs.all()
+                for evaluateur in evaluateurs:                
+                    candidat_evaluation = CandidatEvaluation()
+                    candidat_evaluation.candidat = cand
+                    candidat_evaluation.evaluateur = evaluateur
+                    candidat_evaluation.save()
+
+                return api_return(STATUS_OK)
+            else:
+                messages.add_message(self.request, messages.ERROR,
+                            'Il y a des erreurs dans le formulaire.')
+        else:
+            form = emploiForms.PostulerOffreEmploiForm(instance=cand,
+                    offre_emploi=offre_emploi)
+            piecesForm = emploiForms.CandidatPieceForm(instance=cand)
+
+        vars.update(dict(form=form, candidat=cand, piecesForm=piecesForm, ))
+     
+        return render_to_response('recrutement/postuler_appel_offre.html', vars, 
+                RequestContext(self.request))
+
+
+    def api_offre_emploi_liste(self):
+        return api_return(STATUS_OK, simplejson.dumps(
+                            [{"id": "%s" % offre.id, 
+                            "est_affiche": "%s" % offre.est_affiche,
+                            "statut": "%s" % offre.statut,
+                            "nom": "%s" % offre.nom, 
+                            "resume": "%s" % offre.resume,
+                            "description": "%s" % offre.description,
+                            "poste_nom": "%s" % offre.poste_nom,
+                            "region": "%s" % offre.region.id,
+                            "bureau": "%s" % offre.bureau.id,
+                            "date_limite": "%s" % offre.date_limite,
+                            "duree_affectation": "%s" % offre.duree_affectation,
+                            "renumeration": "%s" % offre.renumeration,
+                            "debut_affectation": "%s" % offre.debut_affectation,
+                            "lieu_affectation": "%s" % offre.lieu_affectation.id} 
+                            for offre in emploi.OffreEmploi.objects.all()]), json=True)
+        
+    def api_offre_emploi(self):
+        try:
+            offre = emploi.OffreEmploi.objects.get(id=self.request.GET.get('id'))
+        except emploi.OffreEmploi.DoesNotExist:
+            return api_return(STATUS_ERROR, "ID d'offre d'emploi invalide")
+        return api_return(STATUS_OK, simplejson.dumps(
+            {"id": "%s" % offre.id,
+            "est_affiche": "%s" % offre.est_affiche,
+            "statut": "%s" % offre.statut,
+            "nom": "%s" % offre.nom, 
+            "resume": "%s" % offre.resume,
+            "description": "%s" % offre.description,
+            "poste_nom": "%s" % offre.poste_nom,
+            "region": "%s" % offre.region.id,
+            "bureau": "%s" % offre.bureau.id,
+            "date_limite": "%s" % offre.date_limite,
+            "duree_affectation": "%s" % offre.duree_affectation,
+            "renumeration": "%s" % offre.renumeration,
+            "debut_affectation": "%s" % offre.debut_affectation,
+            "lieu_affectation": "%s" % offre.lieu_affectation.id} ), json=True)
+
diff --git a/project/recrutement/context_processors.py b/project/recrutement/context_processors.py
new file mode 100644 (file)
index 0000000..69b8c6e
--- /dev/null
@@ -0,0 +1,8 @@
+# -*- 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 298f922..2c54120 100644 (file)
@@ -8,15 +8,16 @@ from datetime import timedelta
 from django.forms.widgets import CheckboxSelectMultiple
 from django.contrib.admin import widgets as admin_widgets   
 from form_utils.forms import BetterModelForm
-from django.forms import ModelForm
+from django.forms import ModelForm, ModelChoiceField, HiddenInput, CharField
 from django.forms.models import BaseInlineFormSet 
+from django.core.mail import send_mail
 
 from tinymce.widgets import TinyMCE
 from captcha.fields import CaptchaField
 
 from recrutement import models as recr
-from django.core.mail import send_mail
-#from recrutement.lib import send_templated_mail
+from auf.django.emploi import forms as emploi
+from project.rh import models as rh
 
 ################################################################################
 # EVALUATION
@@ -39,48 +40,61 @@ class EvaluateurForm(forms.Form):
                     recr.Evaluateur.objects.all())
 
     def __init__(self, *args, **kwargs):
-        self.candidats = kwargs.pop('candidats')
+        self.offres_emploi = kwargs.pop('offres_emploi')
         super(EvaluateurForm, self).__init__(*args, **kwargs)
 
     def save(self):
-        for candidat in self.candidats:
+        candidats = recr.Candidat.objects.\
+                            filter(offre_emploi__in=self.offres_emploi)
+        for candidat in candidats:
             for evaluateur in self.cleaned_data.get('evaluateurs', []):                
                 candidat_evaluation = recr.CandidatEvaluation()
                 candidat_evaluation.candidat = candidat
                 candidat_evaluation.evaluateur = evaluateur
                 candidat_evaluation.save()
+        
 
 ################################################################################
 # OFFRE EMPLOI
 ################################################################################
-class CandidatPieceForm(inlineformset_factory(recr.Candidat,
-                        recr.CandidatPiece)):
-    nom = forms.MultipleChoiceField(choices=recr.TYPE_PIECE_CHOICES,
-            widget=CheckboxSelectMultiple)
+class CandidatPieceForm(emploi.CandidatPieceForm):
+    pass
 
-class PostulerOffreEmploiForm(ModelForm):
-    captcha = CaptchaField()
+class PostulerOffreEmploiForm(emploi.PostulerOffreEmploiForm):
+    pass
 
-    def __init__(self, *args, **kwargs):
-        self.offre_emploi = kwargs.pop('offre_emploi')     
-        super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
+class OffreEmploiForm(ModelForm):
+    poste = ModelChoiceField(queryset=rh.Poste.objects.all())
 
-    def save(self, *args, **kwargs): 
+    class Meta:
+        model = recr.OffreEmploi  
+
+    def save(self, *args, **kwargs):
         kwargs2 = kwargs.copy()
         kwargs2['commit'] = False
-        postulation = super(PostulerOffreEmploiForm, self).save(*args, **kwargs2)
+        offre = super(OffreEmploiForm, self).save(*args, **kwargs2)
+        offre.poste = self.cleaned_data.get("poste")
+        offre.poste_nom = self.cleaned_data.get("poste").nom
         if 'commit' not in kwargs or kwargs['commit']:
-            postulation.save()
-        return postulation
-
-    class Meta:
-        model = recr.Candidat   
-        exclude = ('actif', 'offre_emploi',)
-        fields = ('nom', 'prenom', 'genre', 'nationalite', 'situation_famille', 
-                    'nombre_dependant', 'niveau_diplome', 'employeur_actuel', 
-                    'poste_actuel', 'domaine_professionnel', 'telephone', 
-                    'email', 'adresse', 'ville', 'code_postal', 'etat_province',
-                    'pays', 'captcha', )
+            offre.save()
+        return offre
+
+    def clean(self):
+        cleaned_data = self.cleaned_data
+        date_limite = cleaned_data.get("date_limite")
+        debut_affectation = cleaned_data.get("debut_affectation")
+
+        if date_limite and debut_affectation:
+            if date_limite > debut_affectation:
+                raise forms.ValidationError("La date limite ne peut pas être \
+                        supérieure à la date d'affection.")
+
+        """if date_limite < datetime.date.today() or \
+            debut_affectation < datetime.date.today():
+            raise forms.ValidationError("La date limite et/ou la date \
+                d'affection doivent être supérieures à la date d'aujourdhui.")
+        """
+        return cleaned_data
 
 ################################################################################
 # TEMPLATE COURRIEL
index 36c714b..3b30f2b 100755 (executable)
@@ -6,10 +6,13 @@ from django.core.files.storage import FileSystemStorage
 from tinymce import models as tinymce_models
 from django.db import models
 import settings
-#from private_files import PrivateFileField
 
 import datamaster_modeles.models as ref
-from project.rh.models import Poste 
+from recrutement.workflow import grp_evaluateurs_recrutement
+from auf.django.emploi import models as emploi
+from auf.django.emploi.models import TYPE_PIECE_CHOICES
+
+from recrutement.workflow import grp_evaluateurs_recrutement
 
 ### CONSTANTES
 #NOTES
@@ -23,7 +26,8 @@ HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
 HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
 HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
                             {{ nom_candidat }} {{ prenom_candidat }} \
-                            {{ offre_emploi }}. Ces champs seront \
+                            {{ offre_emploi }} et {{ genre_candidat }} \
+                            (Pour Monsieur/Madame). Ces champs seront \
                             automatiquement remplacés par les informations de \
                             chaque candidat."
 
@@ -40,59 +44,26 @@ class Metadata(models.Model):
     class Meta:
         abstract = True
 
-class OffreEmploiManager(models.Manager):
-    def get_query_set(self):
-        fkeys = ('region',)
-        return super(OffreEmploiManager, self).get_query_set().\
-                    select_related(*fkeys).all()
-
-class ProxyPoste(Poste):
+class Candidat(emploi.Candidat):
     class Meta:
         proxy = True
 
-    def __unicode__(self):
-        return '%s [%s]' % (self.nom, self.id)
-
-STATUT_OFFRE_EMPLOI_CHOICES = (
-    ('NOUV', 'Nouveau'),
-    ('AFFI', 'Offre d\'emploi en affichage'),
-    ('EVAL', 'En évaluation des candidatures'),
-    ('ENTR', 'En entrevue'),
-    ('TERM', 'Terminé'),
-)
+class OffreEmploi(emploi.OffreEmploi):
+    class Meta:
+        proxy = True
 
-class OffreEmploi(Metadata):
-    #objects = OffreEmploiManager()
-    est_affiche = models.BooleanField(default=False, 
-                                    verbose_name = u"En affichage sur le site")
-    statut = models.CharField(max_length=4, choices=STATUT_OFFRE_EMPLOI_CHOICES,
-                                default='NOUV')
-    nom = models.CharField(max_length=255)
-    resume = models.TextField(verbose_name = u"Résumé")
-    description = tinymce_models.HTMLField()
-    poste = models.ForeignKey(ProxyPoste, db_column='poste')
-    date_limite = models.DateField(verbose_name = u"Date limite",
-                        help_text=HELP_TEXT_FORMAT_DATE,)  
-    region = models.ForeignKey(ref.Region, db_column='region', 
-                verbose_name = u"Région")
-    bureau = models.ForeignKey(ref.Bureau, db_column='bureau', )
-    duree_affectation = models.CharField(max_length=255, 
-                        verbose_name = u"Durée de l'affectation")
-    renumeration = models.CharField(max_length=255,
-                    verbose_name = u'Rénumération')
-    debut_affectation = models.DateField(verbose_name = u"Début de l'affectation",
-                        help_text=HELP_TEXT_FORMAT_DATE,)
-    lieu_affectation = models.ForeignKey(ref.Implantation,  
-                        db_column='implantation', 
-                        verbose_name = u"Lieu d'affectation")
 
+class CandidatPiece(emploi.CandidatPiece):
     class Meta:
-        verbose_name_plural = "offres d'emploi"
+        proxy = True
 
-    def __unicode__(self):
-        return '%s [%s]' % (self.nom, self.id)
-class ProxyOffreEmploi(OffreEmploi):
+class OffreEmploiManager(models.Manager):
+    def get_query_set(self):
+        fkeys = ('region',)
+        return super(OffreEmploiManager, self).get_query_set().\
+                    select_related(*fkeys).all()
+
+class ProxyOffreEmploi(emploi.OffreEmploi):
     class Meta:
         proxy = True
         verbose_name = "Offre d'emploi (visualisation)"
@@ -100,64 +71,8 @@ class ProxyOffreEmploi(OffreEmploi):
 
     def __unicode__(self):
         return '%s [%s] - View' % (self.nom, self.id)
-### CANDIDAT
-  
-GENRE_CHOICES = (
-    ('M', 'Homme'),
-    ('F', 'Femme'),
-)
-SITUATION_CHOICES = (
-    ('C', 'Célibataire'),
-    ('F', 'Conjoint de fait'),
-    ('M', 'Marié'),
-    ('D', 'Divorcé'),
-)
-STATUT_CHOICES = (
-    ('NOUV', 'Nouveau'),
-    ('REC', 'Recevable'),
-    ('SEL', 'Sélectionné'),
-    ('REF', 'Refusé'),
-    ('ACC', 'Accepté'),
-)
 
-class Candidat(Metadata):   
-    statut = models.CharField(max_length=4, choices=STATUT_CHOICES, 
-                default='NOUV')
-    offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
-                    related_name='+')
-    prenom = models.CharField(max_length=255, verbose_name = u'Prénom', )
-    nom = models.CharField(max_length=255)
-    genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
-    nationalite = models.ForeignKey(ref.Pays, 
-                    db_column='nationalite', related_name='+',
-                    verbose_name = u'Nationalité')
-    situation_famille = models.CharField(max_length=1, 
-                        choices=SITUATION_CHOICES, 
-                        verbose_name = u'Situation familiale', )
-    nombre_dependant = models.IntegerField(verbose_name = u'Nombre de dépendant',
-                        help_text=HELP_TEXT_NB_DEPENDANT, )
-    niveau_diplome = models.CharField(max_length=255,
-                        verbose_name = u'Niveau du diplôme')
-    employeur_actuel = models.CharField(max_length=255, )
-    poste_actuel = models.CharField(max_length=255, )
-    domaine_professionnel = models.CharField(max_length=255, )
-    telephone = models.CharField(max_length=255, verbose_name = u'Téléphone', )
-    email = models.EmailField(max_length=255, verbose_name = 'Courriel', )
-
-    # Adresse
-    adresse = models.CharField(max_length=255)
-    ville = models.CharField(max_length=255)
-    etat_province = models.CharField(max_length=255, 
-                    verbose_name = u"État/Province")
-    code_postal = models.CharField(max_length=255, blank=True)
-    pays = models.ForeignKey(ref.Pays, db_column='pays',
-            related_name='+')
-
-    def __unicode__(self):
-        return '%s %s [%s]' % (self.prenom, self.nom, self.id)
-
-class ProxyCandidat(Candidat):
+class ProxyCandidat(emploi.Candidat):
     class Meta:
         proxy = True
         verbose_name = "Candidat (visualisation)"
@@ -166,44 +81,19 @@ class ProxyCandidat(Candidat):
     def __unicode__(self):
         return '%s %s [%s]' % (self.prenom, self.nom, self.id)
 
-### PIECE CANDIDAT
-
-TYPE_PIECE_CHOICES = (
-    ('CV','CV'),
-    ('LET','Lettre'),
-    ('AUT','Autre'),
-)
-# Upload de fichiers
-storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT, 
-                            base_url=settings.PRIVE_MEDIA_URL)
-
-def candidat_piece_dispatch(instance, filename):
-    path = "offre_emploi/%s_%s/%s/%s_%s" % (instance.candidat.nom, 
-                instance.candidat.prenom, instance.nom, instance.candidat.id,
-                filename)
-    return path
-
-class CandidatPiece(models.Model):
-    candidat = models.ForeignKey(Candidat, db_column='candidat',
-                related_name='candidat_piece') 
-    nom = models.CharField(max_length=3, choices=TYPE_PIECE_CHOICES)
-    #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
-    path = models.FileField(verbose_name = u"Fichier", 
-            upload_to=candidat_piece_dispatch, 
-            storage=storage_prive, )
-
-    class Meta:
-        verbose_name = "pièce jointe"
-        verbose_name_plural = "pièces jointes"
-
-    def __unicode__(self):
-        return '%s' % (self.nom)
-
 class Evaluateur(models.Model):
-    user = models.ForeignKey(User, unique=True, verbose_name = u"Évaluateur")
-    candidats = models.ManyToManyField(Candidat, through='CandidatEvaluation', 
-                related_name="evaluateurs")
-
+    user = models.ForeignKey(User, unique=True, verbose_name="Évaluateur")
+    offres_emploi = models.ManyToManyField(emploi.OffreEmploi, 
+                related_name="evaluateurs", blank=True)
+
+    def save(self, *args, **kwargs):
+        """
+        Assigner automatiquement l'évaluateurs d'une offre d'emploi à un 
+        nouveau candidat.
+        """
+        self.user.groups.add(grp_evaluateurs_recrutement)
+        super(Evaluateur, self).save(*args, **kwargs)
+    
     class Meta:
         verbose_name = "évaluateur"
 
@@ -212,9 +102,9 @@ class Evaluateur(models.Model):
 
 class AdministrateurRegional(models.Model):
     user = models.ForeignKey(User, unique=True,
-            verbose_name = u"Administrateur régionnal")
+            verbose_name="Administrateur régionnal")
     regions = models.ManyToManyField(ref.Region, 
-                           verbose_name = u"Régions", )
+                           verbose_name="Régions", )
 
     class Meta:
         verbose_name = "administrateur régional"
@@ -224,12 +114,12 @@ class AdministrateurRegional(models.Model):
         return '%s %s' % (self.user.first_name, self.user.last_name)
 
 class CandidatEvaluation(models.Model):
-    candidat = models.ForeignKey(Candidat, db_column='candidat', 
+    candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', 
                 related_name='+',) 
     evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', 
-                    related_name='+', verbose_name = u'Évaluateur') 
+                    related_name='+', verbose_name='Évaluateur') 
     note = models.IntegerField(choices=NOTES, blank=True, null=True)
-    commentaire = models.TextField(null=True, blank=True)
+    commentaire = models.TextField(null=True, blank=True, default='Aucun')
     date = models.DateField(auto_now_add=True,
                         help_text=HELP_TEXT_FORMAT_DATE, )  
 
@@ -244,11 +134,11 @@ TEMPLATE_CHOICES = (
 )
 
 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', 
+    nom_modele = models.CharField(max_length=100, verbose_name='Nom du modèle',)
+    sujet = models.CharField(max_length=100, verbose_name='Sujet du courriel')
+    plain_text = models.TextField(verbose_name='Texte', 
                                     help_text=HELP_TEXT_TAGS_ACCEPTES,  )
-    html = tinymce_models.HTMLField(verbose_name = u'Texte en HTML', 
+    html = tinymce_models.HTMLField(verbose_name='Texte en HTML', 
                                     help_text=HELP_TEXT_TAGS_ACCEPTES,  )
 
     def __unicode__(self):
@@ -258,16 +148,20 @@ class CourrielTemplate(models.Model):
         ordering = ['nom_modele',]
 
 class CandidatCourriel(models.Model):
-    candidats = models.ManyToManyField(Candidat, verbose_name = u"Candidats", )
+    candidats = models.ManyToManyField(Candidat, verbose_name="Candidats", )
     template = models.ForeignKey(CourrielTemplate, db_column='template', 
-                related_name='+', verbose_name = u"Modèle de courriel", )
+                related_name='+', verbose_name="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,
+    plain_text = models.TextField(verbose_name='Texte', blank=True,
                                     help_text=HELP_TEXT_TAGS_ACCEPTES,  )
-    html = tinymce_models.HTMLField(verbose_name = u'Texte en HTML', null=True, 
+    html = tinymce_models.HTMLField(verbose_name='Texte en HTML', null=True, 
                                 blank=True, help_text=HELP_TEXT_TAGS_ACCEPTES, )
 
     def __unicode__(self):
         return '%s' % (self.titre)
+
+    class Meta:
+        verbose_name = "modèle de courriel"
+        verbose_name_plural = "modèles de courriel"
     
diff --git a/project/recrutement/permissions.py b/project/recrutement/permissions.py
new file mode 100644 (file)
index 0000000..5e17b03
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- encoding: utf-8 -*-
+from django.contrib.auth.models import Group
+
+from project.lib import safe_create_groupe
+
+# Logique AUF des permissions
+
+grp_drh = safe_create_groupe(id=4)  # DRH
+grp_evaluateurs = safe_create_groupe(id=13)    # Évaluateurs
+
+recrutement_groupes = (
+    grp_drh,
+    grp_evaluateurs,
+)
+
+def user_in_recrutement_groupes(user):
+    """
+    Teste si un user Django fait parti des groupes prédéfinis de DAE.
+    """
+    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/templates/admin/recrutement/proxycandidat/change_form.html b/project/recrutement/templates/admin/recrutement/proxycandidat/change_form.html
new file mode 100644 (file)
index 0000000..bdc3016
--- /dev/null
@@ -0,0 +1,77 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_modify adminmedia %}
+
+{% block extrahead %}{{ block.super }}
+{% url admin:jsi18n as jsi18nurl %}
+<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
+{{ media }}
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
+
+{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+
+{% block breadcrumbs %}{% if not is_popup %}
+<div class="breadcrumbs">
+     <a href="../../../">{% trans "Home" %}</a> &rsaquo;
+     <a href="../../">{{ app_label|capfirst|escape }}</a> &rsaquo;
+     {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
+     {% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endif %}{% endblock %}
+
+{% block content %}<div id="content-main">
+{% block object-tools %}
+{% if change %}{% if not is_popup %}
+  <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li>
+  {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
+  </ul>
+{% endif %}{% endif %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
+{% if save_on_top %}{% submit_row %}{% endif %}
+{% if errors %}
+    <p class="errornote">
+    {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+    </p>
+    {{ adminform.form.non_field_errors }}
+{% endif %}
+
+{% for fieldset in adminform %}
+  {% include "admin/includes/fieldset.html" %}
+{% endfor %}
+
+{% block after_field_sets %}{% endblock %}
+
+{% for inline_admin_formset in inline_admin_formsets %}
+    {% include inline_admin_formset.opts.template %}
+{% endfor %}
+
+<fieldset class="module aligned ">
+    <h2>Pièces jointes</h2>
+    {% for p in original.pieces_jointes %}
+        <div class="form-row">
+            <label>{{ p.get_nom_display }}:</label>
+            <p><a href="{{ p.path.url }}">{{ p.path.url }}</a></p>
+        </div>
+    {% endfor %}
+</fieldset>
+
+{% block after_related_objects %}{% endblock %}
+
+{% submit_row %}
+
+{% if adminform and add %}
+   <script type="text/javascript">document.getElementById("{{ adminform.first_field.id_for_label }}").focus();</script>
+{% endif %}
+
+{# JavaScript for prepopulated fields #}
+{% prepopulated_fields_js %}
+
+</div>
+</form></div>
+{% endblock %}
index 926d3bc..17af613 100644 (file)
@@ -2,7 +2,6 @@
 {% load i18n adminmedia form_utils_tags %}
 
 {% block title %}RH - Recrutement{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Affecter évaluateur{% endblock %}
 
 {% block content %}
index 7fa5696..2ffe957 100644 (file)
@@ -2,7 +2,6 @@
 {% load i18n adminmedia form_utils_tags %}
 
 {% block title %}RH - Recrutement{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Envoyer courriel aux candidats{% endblock %}
 {% block extrahead %}
 
index 452d7a0..5ca20a9 100644 (file)
@@ -1,14 +1,13 @@
 {% extends 'base.html' %}
 
-{% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Accueil{% endblock %}
+{% block title %}RH - Recrutement{% endblock %}
+{% block sous_titre %}Recrutement{% endblock %}
 
 {% block main %}
 <h1>Recrutement</h1>
 
 <p>
-Recrutement
+Application de gestion du recrutement.
 </p>
 
 {% endblock %}
index 53569f0..5227c79 100644 (file)
@@ -2,7 +2,6 @@
 {% load adminmedia %}
 
 {% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Accueil{% endblock %}
 
 {% block main %}
index fe32d40..038387c 100644 (file)
@@ -2,7 +2,6 @@
 {% load i18n adminmedia form_utils_tags %}
 
 {% block title %}RH - Recrutement{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
 {% block sous_titre %}Envoyer courriel aux candidats{% endblock %}
 {% block extrahead %}
 {{ form.media }}
index f231760..c392576 100644 (file)
@@ -1,7 +1,29 @@
 # -*- encoding: utf-8 -*
 from django.conf.urls.defaults import patterns, url
 
-urlpatterns = patterns(
-    'project.recrutement.views',
+
+
+
+urlpatterns = patterns('recrutement.views',
     url(r'^$', 'index', name='index'),
+
+    url(r'^affecter_evaluateurs_offre_emploi/$', 
+        'affecter_evaluateurs_offre_emploi', 
+        name='affecter_evaluateurs_offre_emploi'),
+
+    url(r'^envoyer_courriel_candidats/$', 
+        'envoyer_courriel_candidats', 
+        name='envoyer_courriel_candidats'),
+
+    url(r'^selectionner_template/$', 
+        'selectionner_template', 
+        name='selectionner_template'),
+
+    url(r'^pieces/$',
+        'postuler_appel_offre', 
+        name='pieces'),
+
+    url(r'^postuler_appel_offre/$', 
+        'postuler_appel_offre',
+        name='postuler_appel_offre'),   
 )
index f1a9b30..65753e5 100755 (executable)
@@ -11,30 +11,13 @@ from django.core.mail import EmailMultiAlternatives
 
 from forms import *
 from models import *
-from project.recrutement import models as recr
 from recrutement.workflow import grp_evaluateurs_recrutement
+from views import *
 
 def index(request):
     return render_to_response('recrutement/index.html', {}, 
                                 RequestContext(request))
 
-def affecter_evaluateurs_candidats(request):
-    candidat_ids = request.GET.get('ids').split(',')
-    candidats = Candidat.objects.filter(id__in=candidat_ids)
-    if request.method == "POST":
-        form = EvaluateurForm(request.POST, candidats=candidats)
-        if form.is_valid():
-            form.save()
-            messages.add_message(request, messages.SUCCESS, 
-                            "Les évaluateurs ont été affectés aux candidats.")
-            return redirect("admin:recrutement_candidat_changelist")
-    else:
-        form = EvaluateurForm(candidats=candidats)
-
-    c = {'form' : form}   
-    return render_to_response("recrutement/affecter_evaluateurs.html", 
-            Context(c), context_instance = RequestContext(request))
-
 def selectionner_template(request):
     candidat_ids = request.GET.get('ids')
     if request.method == "POST":
@@ -102,7 +85,7 @@ def postuler_appel_offre(request):
      
             courriel_template = CourrielTemplate.objects.\
                         get(nom_modele='Confirmation postulation (automatique)')
-            send_templated_email(candidat, courriel_template)
+            emp.send_templated_email(candidat, courriel_template)
      
             messages.add_message(request, messages.SUCCESS, 
                             "Votre application à l'appel d'offre d'emploi a \
@@ -124,16 +107,15 @@ def postuler_appel_offre(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)
-    candidats = Candidat.objects.filter(offre_emploi__in=offres_emploi)
     if request.method == "POST":
-        form = EvaluateurForm(request.POST, candidats=candidats)
+        form = 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 candidats.")
+                        "Les évaluateurs ont été affectés aux offres d'emploi.")
             return redirect("admin:recrutement_offreemploi_changelist")
     else:
-        form = EvaluateurForm(candidats=candidats)
+        form = EvaluateurForm(offres_emploi=offres_emploi)
 
     c = {'form' : form}   
     return render_to_response("recrutement/affecter_evaluateurs.html", 
@@ -148,7 +130,10 @@ def send_templated_email(candidat, template):
     texte_template = Template(template.plain_text)
     dict_texte = {"nom_candidat": candidat.nom, 
                     "prenom_candidat": candidat.prenom, 
-                    "offre_emploi": candidat.offre_emploi.nom,}
+                    "offre_emploi": candidat.offre_emploi.nom,
+                    "genre_candidat": "Monsieur" if candidat.genre == "M" \
+                                     else "Madame",
+                    }
     texte = Context(dict_texte)
     # HTML text
     html_template = Template(template.html)
index d40bed1..174dd98 100644 (file)
@@ -24,7 +24,7 @@ admin.site.register(AyantDroit, AyantDroitAdmin)
 #admin.site.register(AyantDroitCommentaire, AyantDroitCommentaireAdmin)
 admin.site.register(Classement, ClassementAdmin)
 #admin.site.register(Commentaire, CommentaireAdmin)
-admin.site.register(Contrat, ContratAdmin)
+#admin.site.register(Contrat, ContratAdmin)
 admin.site.register(Devise, DeviseAdmin)
 admin.site.register(Dossier, DossierAdmin)
 #admin.site.register(DossierCommentaire, DossierCommentaireAdmin)
diff --git a/project/rh/forms.py b/project/rh/forms.py
new file mode 100644 (file)
index 0000000..84cf682
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- encoding: utf-8 -*-
+
+from django import forms
+from models import Dossier, Contrat
+
+
+class FormDate(object):
+
+    def clean_date_fin(self):
+        date_fin = self.cleaned_data['date_fin']
+        if date_fin is None:
+          return date_fin
+        date_debut = self.cleaned_data['date_debut']
+        if date_fin < date_debut:
+            raise forms.ValidationError("La date de fin est antérieure à la date de début")
+        return date_fin
+
+class DossierForm(forms.ModelForm, FormDate):
+
+    class Model:
+        model = Dossier
+
+class ContratForm(forms.ModelForm, FormDate):
+
+    class Model:
+        model = Contrat
index 6d1b43e..d9d5496 100644 (file)
@@ -2,8 +2,10 @@
 
 from django.db import models
 from django.contrib import admin
+from django.conf import settings
 from auf.django.metadata.admin import AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, AUF_METADATA_READONLY_FIELDS
 from project.rh import models as rh
+from forms import DossierForm, ContratForm
 
 # Inlines
 
@@ -12,9 +14,9 @@ class ReadOnlyInlineMixin(object):
         return [f.name for f in self.model._meta.fields if f.name not in AUF_METADATA_READONLY_FIELDS]
 
 
-class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
+class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.StackedInline):
     model = models.Model  # à remplacer dans admin.py
-    extra = 1
+    extra = 0
 
 
 class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
@@ -24,6 +26,7 @@ class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInli
 
 
 class ContratInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
+    form = ContratForm
     model = models.Model  # à remplacer dans admin.py
     extra = 1
 
@@ -41,6 +44,7 @@ class DossierCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline)
 
 class DossierPieceInline(admin.TabularInline):
     model = models.Model  # à remplacer dans admin.py
+    extra = 4
 
 
 class EmployeInline(admin.TabularInline):
@@ -54,6 +58,7 @@ class EmployeCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline)
 
 class EmployePieceInline(admin.TabularInline):
     model = models.Model  # à remplacer dans admin.py
+    extra = 4
 
 
 class EvenementInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
@@ -115,13 +120,11 @@ class AyantDroitAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     )
 
     def save_formset(self, request, form, formset, change):
-        super(AyantDroitAdmin, self).save_formset(request, form, formset, change)
         instances = formset.save(commit=False)
         for instance in instances:
             if instance.__class__ == rh.AyantDroitCommentaire:
                 instance.owner = request.user
             instance.save()
-        formset.save_m2m()
 
     def _ayantdroit(self, obj):
         return unicode(obj)
@@ -146,29 +149,36 @@ class ClassementAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     )
 
 
-
 class CommentaireAdmin(admin.ModelAdmin):
     pass
 
 
-class ContratAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    alphabet_filter = 'dossier__employe__nom'
-    search_fields = ('dossier__employe__nom', 'dossier__employe__prenom', 'dossier__poste__nom', 'dossier__poste__nom_feminin', )
-    list_display = ('id', 'dossier', '_poste', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + (
-        (None, {
-            'fields': ('dossier', 'type_contrat', 'date_debut', 'date_fin', )
-        }),
-    )
-
-    def lookup_allowed(self, key, value):
-        if key in ('dossier__employe__nom__istartswith',  ):
-            return True
-
-    def _poste(self, obj):
-        return obj.dossier.poste
-    _poste.short_description = "Poste"
-
+#class ContratAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
+#    form = ContratForm
+#    alphabet_filter = 'dossier__employe__nom'
+#    search_fields = ('dossier__employe__nom', 'dossier__employe__prenom', 'dossier__poste__nom', 'dossier__poste__nom_feminin', )
+#    list_display = ('id', '_employe', '_poste', 'date_debut', 'date_fin', '_implantation', )
+#    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+#        (None, {
+#            'fields': ('dossier', 'type_contrat', 'date_debut', 'date_fin', )
+#        }),
+#    )
+#
+#    def lookup_allowed(self, key, value):
+#        if key in ('dossier__employe__nom__istartswith',  ):
+#            return True
+#
+#    def _employe(self, obj):
+#        return unicode(obj.dossier.employe)
+#    _employe.short_description = "Employé"
+#
+#    def _poste(self, obj):
+#        return obj.dossier.poste.nom
+#    _poste.short_description = "Poste"
+#
+#    def _implantation(self, obj):
+#        return obj.dossier.poste.implantation
+#    _poste.short_description = "Implantation"
 
 class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
@@ -179,9 +189,10 @@ class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
 
 
 class DossierAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,):
+    form = DossierForm
     alphabet_filter = 'employe__nom'
     search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', 'poste__nom_feminin')
-    list_display = ('_employe', '_poste', 'date_debut', 'date_fin', )
+    list_display = ('_employe', '_poste', 'date_debut', 'date_fin', '_actif')
     inlines = (DossierPieceInline, ContratInline,
                RemunerationInline,
                #EvenementInline,
@@ -203,26 +214,35 @@ class DossierAdmin(AUFMetadataAdminMixin, admin.ModelAdmin,):
     )
 
     def lookup_allowed(self, key, value):
-        if key in ('employe__nom__istartswith',  ):
+        if key in ('employe__nom__istartswith', 'actif__exact', ):
             return True
 
+    def _actif(self, dossier):
+        if dossier.employe.actif:
+          html = """<img alt="True" src="%simg/admin/icon-yes.gif">"""
+        else:
+          html = """<img alt="False" src="%simg/admin/icon-no.gif">"""
+        return html % settings.ADMIN_MEDIA_PREFIX 
+    _actif.allow_tags = u'Employé actif'
+    _actif.short_description = u'Employé actif'
+    _actif.admin_order_field = 'employe__actif'
 
     def _poste(self, dossier):
         return unicode(dossier.poste.nom)
     _poste.short_description = u'Poste'
+    _poste.admin_order_field = 'poste__nom'
 
     def _employe(self, dossier):
         return unicode(dossier.employe)
     _employe.short_description = u'Employé'
-    
+    _employe.admin_order_field = 'employe__nom'
+   
     def save_formset(self, request, form, formset, change):
-        super(DossierAdmin, self).save_formset(request, form, formset, change)
         instances = formset.save(commit=False)
         for instance in instances:
             if instance.__class__ == rh.DossierCommentaire:
                 instance.owner = request.user
             instance.save()
-        formset.save_m2m()
 
 class DossierPieceAdmin(admin.ModelAdmin):
     pass
@@ -234,7 +254,11 @@ class DossierCommentaireAdmin(admin.ModelAdmin):
 
 class EmployeAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     alphabet_filter = 'nom'
-    search_fields = ('id', 'nom', 'prenom', 'nom_affichage', )
+    search_fields = ('id', 'nom', 'prenom', 'nom_affichage', 'actif', )
+    list_filter = ('actif', )
+    ordering = ('nom', )
+    actions = ('desactiver', )
+    list_display = ('nom', 'prenom', 'actif', )
     inlines = (AyantDroitInline,
                DossierROInline,
                EmployePieceInline,
@@ -252,13 +276,11 @@ class EmployeAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
         )
 
     def save_formset(self, request, form, formset, change):
-        super(EmployeAdmin, self).save_formset(request, form, formset, change)
         instances = formset.save(commit=False)
         for instance in instances:
             if instance.__class__ == rh.EmployeCommentaire:
                 instance.owner = request.user
             instance.save()
-        formset.save_m2m()
 
 class EmployeCommentaireAdmin(admin.ModelAdmin):
     pass
index f5497b8..b9f954d 100644 (file)
@@ -6,7 +6,7 @@ from django.conf import settings
 from auf.django.metadata.models import AUFMetadata
 from auf.django.metadata.managers import NoDeleteManager
 import datamaster_modeles.models as ref
-
+from validators import validate_date_passee
 
 # Constantes
 HELP_TEXT_DATE = "format: aaaa-mm-jj"
@@ -162,9 +162,10 @@ class Poste_(AUFMetadata):
 
     # Autres Metadata
     date_validation = models.DateTimeField(null=True, blank=True)   # de dae
-    date_debut = models.DateField(verbose_name = u"Date de début", null=True,
-                            help_text=HELP_TEXT_DATE)
-    date_fin = models.DateField(verbose_name = u"Date de fin",
+    date_debut = models.DateField(verbose_name="Date de début",
+                            help_text=HELP_TEXT_DATE,
+                            null=True, blank=True)
+    date_fin = models.DateField(verbose_name="Date de fin",
                             help_text=HELP_TEXT_DATE,
                             null=True, blank=True)
 
@@ -252,7 +253,16 @@ class PosteComparaison(models.Model):
     nom = models.CharField(verbose_name = u"Poste", max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
     devise = models.ForeignKey("Devise", default=5, related_name='+', null=True, blank=True)
-    montant_euros = models.IntegerField(null=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
 
 
 class PosteCommentaire(Commentaire):
@@ -290,6 +300,7 @@ class Employe(AUFMetadata):
                             verbose_name = u"Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
                             verbose_name = u"Date de naissance",
+                            validators=[validate_date_passee],
                             null=True, blank=True)
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
     
@@ -330,6 +341,14 @@ class Employe(AUFMetadata):
         if not nom_affichage:
             nom_affichage = u'%s %s' % (self.nom.upper(), self.prenom)
         return nom_affichage
+        
+    def civilite(self):
+        civilite = u''
+        if self.genre.upper() == u'M':
+            civilite = u'M.'
+        elif self.genre.upper() == u'F':
+            civilite = u'Mme'
+        return civilite
 
 class EmployePiece(models.Model):
     """Documents relatifs à un employé.
@@ -376,6 +395,7 @@ class AyantDroit(AUFMetadata):
                             verbose_name = u"Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
                             verbose_name = u"Date de naissance",
+                            validators=[validate_date_passee],
                             null=True, blank=True)
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
     
@@ -431,8 +451,8 @@ class Dossier_(AUFMetadata):
     """
     # Identification
     employe = models.ForeignKey('Employe', db_column='employe', 
-                            related_name='+',
-                            verbose_name = u"Employé")
+                            related_name='dossiers',
+                            verbose_name=u"Employé")
     poste = models.ForeignKey('Poste', db_column='poste', related_name='+')
     statut = models.ForeignKey('Statut', related_name='+', default=3,
                             null=True)
@@ -479,9 +499,9 @@ class Dossier_(AUFMetadata):
     
     class Meta:
         abstract = True
-        ordering = ['employe__nom_affichage', 'employe__nom', 'poste__nom']
-        verbose_name = u"Dossier"
-        verbose_name_plural = u"Dossiers"
+        ordering = ['employe__nom', ]
+        verbose_name = "Dossier"
+        verbose_name_plural = "Dossiers"
         
     def __unicode__(self):
         poste = self.poste.nom
@@ -494,11 +514,6 @@ class Dossier(Dossier_):
     __doc__ = Dossier_.__doc__
 
 
-
-class Dossier(Dossier_):
-    __doc__ = Dossier_.__doc__
-
-
 class DossierPiece(models.Model):
     """Documents relatifs au Dossier (à l'occupation de ce poste par employé).
     Ex.: Lettre de motivation.
@@ -520,6 +535,27 @@ class DossierCommentaire(Commentaire):
     dossier = models.ForeignKey('Dossier', db_column='dossier', 
                             related_name='+')
 
+class DossierComparaison(models.Model):
+    """
+    Photo d'une comparaison salariale au moment de l'embauche.
+    """
+    dossier = models.ForeignKey('Dossier', related_name='comparaisons')
+    implantation = models.ForeignKey(ref.Implantation, related_name="+", null=True, blank=True)
+    poste = models.CharField(max_length=255, null=True, blank=True)
+    personne = models.CharField(max_length=255, null=True, blank=True)
+    montant = models.IntegerField(null=True)
+    devise = models.ForeignKey('Devise', default=5, related_name='+', null=True, blank=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.dossier.poste.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.dossier.poste.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
+
 
 ### RÉMUNÉRATION
     
diff --git a/project/rh/templates/rh/employe.html b/project/rh/templates/rh/employe.html
new file mode 100644 (file)
index 0000000..35917f3
--- /dev/null
@@ -0,0 +1,11 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - {{ employe }}{% endblock %}
+{% block sous_titre %}Employés{% endblock %}
+
+{% block main %}
+<h1>{{ employe }}</h1>
+
+{{ employe }}­
+{% endblock %}
+
diff --git a/project/rh/templates/rh/employes_liste.html b/project/rh/templates/rh/employes_liste.html
new file mode 100644 (file)
index 0000000..2b58faa
--- /dev/null
@@ -0,0 +1,27 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - Employés{% endblock %}
+{% block sous_titre %}Employés{% endblock %}
+
+{% block main %}
+<h1>Employés</h1>
+
+<ul>
+<li style="display:inline"><a href="">Annuaire courriel</a></li>
+<li style="display:inline"><a href="">Annuaire téléphonique</a></li>
+</ul>
+
+{% comment %}
+TODO
+Implémenter interface de recherche rapide et complète telle que sur :
+http://intranet.auf/rubrique46.html
+{% endcomment %}
+
+<ul>
+{% for e in employes %}
+    <li><a href="{% url rh_employe e.id %}">{{ e }}</a></li>
+{% endfor %}
+</ul>
+
+{% endblock %}
+
diff --git a/project/rh/templates/rh/include/dossier.html b/project/rh/templates/rh/include/dossier.html
new file mode 100644 (file)
index 0000000..f47f19b
--- /dev/null
@@ -0,0 +1,9 @@
+<tr{% if d.archive %} class="archive"{% endif %}>
+    <td class="nombre">{{ d.id }}</td>
+    <td><a href ="">{{ d.poste.nom }}</a></td>
+    <td>{{ d.date_debut }}</td>
+    <td>{{ d.date_fin|default_if_none:"" }}</td>
+    <td></td>
+    <td></td>
+    <td></td>
+</tr>
diff --git a/project/rh/templates/rh/index.html b/project/rh/templates/rh/index.html
deleted file mode 100644 (file)
index d1cccdd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-{% extends 'base.html' %}
-
-{% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Accueil{% endblock %}
-
-{% block main %}
-<h1>Ressources humaines</h1>
-
-<p>
-L'ensemble des applications RH sera regroupé dans ce système de gestion des ressources humaines (SGRH).
-</p>
-<p>
-Voici les modules actuellement disponibles :
-</p>
-<ul>
-    <li><a href="{% url dae_index %}">Demande d'autorisation d'embauche (DAE)</a></li>
-</ul>
-{% endblock %}
-
diff --git a/project/rh/templates/rh/profil.html b/project/rh/templates/rh/profil.html
new file mode 100644 (file)
index 0000000..16bbe2d
--- /dev/null
@@ -0,0 +1,217 @@
+{% extends 'sgrh.html' %}
+
+{% block title %}RH - {{ employe }}{% endblock %}
+{% block sous_titre %}Mon profil RH{% endblock %}
+
+{% block main %}
+<h1>Mon profil RH</h1>
+
+<div id="identification">
+    <div class="gauche50">
+        <h2>{{ employe.civilite }} {{ employe }}</h2>
+        {% for d in dossiers_encours %}
+            <p>
+            {% if employe.genre.upper == 'F' %}
+                {{ d.poste.nom_feminin }}
+            {% else %}
+                {{ d.poste.nom }}
+            {% endif %}
+            </p>
+            <p>
+            {{ d.poste.service|default_if_none:"Service inconnu" }}<br />
+            {{ d.poste.implantation.nom }}<br />
+            {{ d.poste.implantation.adresse_physique_ville }}
+            </p>
+        {% endfor %}
+    </div>
+    <div class="gauche50">
+        <img src="{{ employe.photo }}" alt="Photo" width="150" height="200" />
+    </div>
+</div>
+<hr class="clear" />
+
+<div>
+    <h2>Dépendants (ayant-droits)</h2>
+    {% if employe.ayantdroits.all %}
+    <ul>
+    {% for ad in employe.ayantdroits.all %}
+        <li>{{ ad }}</li>
+    {% endfor %}
+    </ul>
+    {% else %}
+        Aucun dépendant.
+    {% endif %}
+</div>
+
+<div id="infos" class="gauche50">
+    <h2>Informations professionnelles AUF</h2>
+    <table>
+        <tbody>
+            <tr>
+                <th>Date d'entrée :</th>
+                <td>{{ employe.date_entree }}</td>
+            </tr>
+        </tbody>
+    </table>
+
+</div>
+<div id="infos_perso" class="gauche50">
+    <h2>Informations personnelles</h2>
+    <table>
+        <tbody>
+            {% comment %}
+            <tr>
+                <th>Nom d'affichage :</th>
+                <td>{{ employe.nom_affichage }}</td>
+            </tr>
+            {% endcomment %}
+            <tr>
+                <th>Date de naissance :</th>
+                <td>{{ employe.date_naissance }}</td>
+            </tr>
+            <tr>
+                <th>Nationalité :</th>
+                <td>{{ employe.nationalite }}</td>
+            </tr>
+            <tr>
+                <th>Situation familiale :</th>
+                <td>{{ employe.situation_familiale }}</td>
+            </tr>
+        </tbody>
+    </table>
+</div>
+
+<div id="coord" class="clear gauche50">
+    <h2>Coordonnées professionnelles AUF</h2>
+    <table>
+        <tbody>
+            <tr>
+                <th>Courriel :</th>
+                <td>{{ employe.courriel }}</td>
+            </tr>
+            <tr>
+                <th>Téléphone IP :</th>
+                <td>{{ employe.champ }}</td>
+            </tr>
+            <tr>
+                <th>Téléphone :</th>
+                <td>{{ employe.champ }}</td>
+            </tr>
+            <tr>
+                <th>Télécopie :</th>
+                <td>{{ employe.champ }}</td>
+            </tr>
+            <tr>
+                <th>Adresse postale :</th>
+                <td>
+                </td>
+            </tr>
+        </tbody>
+    </table>
+</div>
+<div id="coord_perso" class="gauche50">
+    <h2>Coordonnées personnelles</h2>
+    <table>
+        <tbody>
+            <tr>
+                <th>Téléphone domicile :</th>
+                <td>{{ employe.tel_domicile }}</td>
+            </tr>
+            <tr>
+                <th>Téléphone cellulaire :</th>
+                <td>{{ employe.tel_cellulaire }}</td>
+            </tr>
+            <tr>
+                <th>Adresse complète :</th>
+                <td>
+                    {{ employe.adresse }}<br />
+                    {% if employe.ville or employe.province %}
+                        {{ employe.ville }}
+                        {% if employe.ville and employe.province %}, {% endif %}
+                        {{ employe.province }}
+                        <br />
+                    {% endif %}
+                    {% if employe.code_postal %}
+                        {{ employe.code_postal }}<br />
+                    {% endif %}
+                    {{ employe.pays.nom }}
+                </td>
+            </tr>
+        </tbody>
+    </table>
+</div>
+
+<div id="postes" class="clear">
+    <h2>Poste{{ dossiers_encours|pluralize }}</h2>
+    Globalement, mettre les infos du poste pertinente (n'en a pas beaucoup)...
+    ... mais surtout les infos du dossier (le fait que cette personne occupe ce poste).
+    {% for d in dossiers_encours %}
+    <table>
+        <tbody>
+            <tr>
+                <th>Nom :</th>
+                <td>{{ d.poste.nom }}</td>
+            </tr>
+            <tr>
+                <th>Implantation :</th>
+                <td>{{ d.poste.implantation }}</td>
+            </tr>
+            <tr>
+                <th>Type de poste :</th>
+                <td>{{ d.poste.type_poste }}</td>
+            </tr>
+            <tr>
+                <th>Service :</th>
+                <td>{{ d.poste.service }}</td>
+            </tr>
+            <tr>
+                <th>Poste du responsable :</th>
+                <td>{{ d.poste.responsable }}</td>
+            </tr>
+            <tr>
+                <th>Régime de travail :</th>
+                <td>{{ d.poste.regime_travail }}</td>
+            </tr>
+            <tr>
+                <th>Nombre d'heures par semaine :</th>
+                <td>{{ d.poste.regime_travail_nb_heure_semaine }}</td>
+            </tr>
+        </tbody>
+    </table>
+    {% endfor %}
+</div>
+
+<div id="dossiers">
+    <h2>Dossier{{ dossiers|pluralize }}</h2>
+    <table>
+    <thead>
+        <tr>
+            <th></th>
+            <th>Poste</th>
+            <th>Début</th>
+            <th>Fin</th>
+            <th>Contrat(s)</th>
+            <th>Début</th>
+            <th>Fin</th>
+        </tr>
+    </thead>
+    <tbody>
+    {% for d in dossiers_encours %}
+        {% include "rh/include/dossier.html" %}
+    {% endfor %}
+    {% for d in dossiers_passes %}
+        {% include "rh/include/dossier.html" %}
+    {% endfor %}
+    </tbody>
+    </table>
+</div>
+
+{% comment %}
+* Pièces jointes (Employé, Poste, Dossier?)
+* Commentaire / remarque ? attention, commentaires privés des gestionnnaires?
+* Rémunération
+* Évaluation
+{% endcomment %}
+
+{% endblock %}
+
index 9430adc..3d13bb4 100644 (file)
@@ -3,6 +3,7 @@ from django.conf.urls.defaults import patterns, url
 
 urlpatterns = patterns(
     'project.rh.views',
-    url(r'^$', 'index', name='index'),
-    #url(r'^employes$', 'employes', name='employes'),
+    url(r'^employes/$', 'employes_liste', name='rh_employes'),
+    url(r'^profil$', 'profil', name='rh_profil'),
+    url(r'^employes/(?P<id>\d+)$', 'employe', name='rh_employe'),
 )
diff --git a/project/rh/validators.py b/project/rh/validators.py
new file mode 100644 (file)
index 0000000..f664820
--- /dev/null
@@ -0,0 +1,9 @@
+# -*- encoding: utf-8 -*-
+
+import datetime
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+
+def validate_date_passee(date):
+    if date >= datetime.date.today():
+        raise ValidationError(_(u"La date ne peut pas être future"))
index 566f922..4916040 100644 (file)
@@ -1,8 +1,63 @@
 # -*- encoding: utf-8 -*-
+from datetime import date
+
+from django.contrib.auth.decorators import login_required
 from django.shortcuts import redirect, render_to_response, get_object_or_404
 from django.template import RequestContext
 
-from project.rh import models as rh
+from datamaster_modeles import models as ref
+from project.lib import get_employe_from_id
+
+from rh import models as rh
 
-def index(request):
-    return render_to_response('rh/index.html', {}, RequestContext(request))
+# homes
+@login_required
+def profil(request):
+    """Profil personnel de l'employé - éditable"""
+    rc = RequestContext(request)
+    c = {}
+    
+    employe = rc['this_employe']
+    
+    # dossiers en cours et passés
+    today = date.today()
+    dossiers = employe.dossiers.all().order_by('-date_fin')
+    dossiers_passes = dossiers.filter(date_fin__lt=today)
+    dossiers_futurs = dossiers.filter(date_debut__gt=today)
+    dossiers_p_f = dossiers_passes | dossiers_futurs
+    ids_dossiers_p_f = [d.id for d in dossiers_p_f]
+    dossiers_encours = dossiers.exclude(id__in=ids_dossiers_p_f)
+    
+    for d in dossiers_passes:
+        d.archive = True
+    
+    c['user'] = request.user
+    c['employe'] = employe
+    c['dossiers'] = dossiers.count()
+    c['dossiers_passes'] = dossiers_passes
+    c['dossiers_encours'] = dossiers_encours
+    return render_to_response('rh/profil.html', c, rc)
+    
+# employes
+@login_required
+def employes_liste(request):
+    """Liste des employés."""
+    employes = rh.Employe.objects.all()
+    c = {
+        'user':request.user,
+        'employes':employes,
+        }
+    return render_to_response('rh/employes_liste.html', c, RequestContext(request))
+    
+@login_required
+def employe(request, id):
+    """Information publique sur un employé."""
+    try:
+        employe = rh.Employe.objects.get(pk=id)
+    except:
+        employe = rh.Employe.objects.none()
+    c = {
+        'user':request.user,
+        'employe':employe,
+        }
+    return render_to_response('rh/employe.html', c, RequestContext(request))
index 7fef0eb..1bd85f2 100644 (file)
@@ -5,7 +5,7 @@ import socket
 from conf import *
 
 
-PROJET_TITRE = "SGRH"
+PROJET_TITRE = "Ressources humaines"
 
 # Rapports d'erreurs
 EMAIL_SUBJECT_PREFIX = '[auf_rh_dae - %s] ' % socket.gethostname()
@@ -62,6 +62,7 @@ INSTALLED_APPS = (
     'django.contrib.sessions',
     'django.contrib.admin',
     'django_qbe',
+    'auf.django.emploi',
     'auf.django.admingroup',
     'ajax_select',
     'south',
@@ -87,8 +88,11 @@ TEMPLATE_CONTEXT_PROCESSORS = (
     'django.contrib.messages.context_processors.messages',
     'django.core.context_processors.request',
     'auf.django.skin.context_processors.auf',
-    'project.context_processors.utilisateur',
+    #'project.context_processors.utilisateur',
+    'project.context_processors.this_employe',
     'project.context_processors.user_is_admin',
+    'dae.context_processors.user_in_dae_groupes',
+    'recrutement.context_processors.user_in_recrutement_groupes',
 )
 
 AUTHENTICATION_BACKENDS = (
diff --git a/project/templates/404.html b/project/templates/404.html
new file mode 100644 (file)
index 0000000..9653978
--- /dev/null
@@ -0,0 +1,12 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - Erreur 404{% endblock %}
+{% block sous_titre %}Erreur 404{% endblock %}
+
+{% block main %}
+<h1 class="msgNegatif">Page non trouvée</h1>
+
+<p>
+La page demandée n'a pas été trouvée dans le système.
+</p>
+{% endblock %}
diff --git a/project/templates/500.html b/project/templates/500.html
new file mode 100644 (file)
index 0000000..09ea99e
--- /dev/null
@@ -0,0 +1,12 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - Erreur 500{% endblock %}
+{% block sous_titre %}Erreur 500{% endblock %}
+
+{% block main %}
+<h1 class="msgNegatif">Erreur interne du système</h1>
+
+<p>
+Le système a rencontré une erreur interne et n'a pas pu traiter votre demande.
+</p>
+{% endblock %}
diff --git a/project/templates/550.html b/project/templates/550.html
new file mode 100644 (file)
index 0000000..a70bec5
--- /dev/null
@@ -0,0 +1,12 @@
+{% extends 'base.html' %}
+
+{% block title %}RH - Erreur 550{% endblock %}
+{% block sous_titre %}Erreur 550{% endblock %}
+
+{% block main %}
+<h1 class="msgNegatif">Permission non accordée</h1>
+
+<p>
+Vous n'avez pas les permissions nécessaires pour faire l'action demandée.
+</p>
+{% endblock %}
diff --git a/project/templates/accueil.html b/project/templates/accueil.html
new file mode 100644 (file)
index 0000000..add2cad
--- /dev/null
@@ -0,0 +1,85 @@
+{% extends 'sgrh.html' %}
+
+{% block title %}RH{% endblock %}
+{% block sous_titre %}Accueil{% endblock %}
+
+{% block main %}
+<h1>{{ this_employe }}</h1>
+
+<p>
+L'ensemble des applications RH sera regroupé dans ce système de gestion des ressources humaines (SGRH).
+</p>
+<p>
+Voici pour chaque module les actions que vous pouvez faire.
+</p>
+
+<div class="gauche50">
+    <div>
+    {% if user_in_dae_groupes %}
+        <h2><a href="{% url dae_index %}">Demande d'autorisation d'engagement (DAE)</a></h2>
+        <p>
+        Voici vos actions possibles :
+        </p>
+        <p>
+        En développement... accédez directement au module <a href="{% url dae_index %}">DAE</a>.
+        </p>
+    {% else %}
+        <h2>Demande d'autorisation d'engagement (DAE)</h2>
+        <p>
+        Vous n'avez pas accès au module DAE.
+        </p>
+    {% endif %}
+    </div>
+    
+    <div>
+    {% if user_in_recrutement_groupes %}
+        <h2><a href="{% url index %}">Recrutement</a></h2>
+        <p>
+        Voici vos actions possibles :
+        </p>
+        <p>
+        En développement... accédez directement au module <a href="{% url index %}">Recrutement</a>.
+        </p>
+    {% else %}
+        <h2>Recrutement</h2>
+        <p>
+        Vous n'avez pas accès au module Recrutement.
+        </p>
+    {% endif %}
+    </div>
+    
+    <div>
+    <h2>Contrats</h2>
+    <p>
+    Le module Contrats n'est pas encore intégré à ce système.<br />
+    Le système de gestion de contrats est encore accessible à son ancien emplacement : <br />
+    <a href="http://contrats.auf/">http://contrats.auf/</a>
+    </p>
+    </div>
+    
+    <div>
+    <h2>Évaluations</h2>
+    <p>
+    Le module Évaluations n'est pas encore intégré à ce système.<br />
+    Le système d'évaluation est encore accessible à son ancien emplacement : <br />
+    <a href="http://rh-evaluation.auf">http://rh-evaluation.auf</a>
+    </p>
+    </div>
+</div>
+<div class="gauche50">
+    <h2><a href="{% url rh_employes %}">Employés</a></h2>
+
+    <div class="gauche50">
+    <p>Dix employés au hasard...</p>
+    {% for e in employes %}
+    <ul>
+        <li><a href="{% url rh_employe e.id %}">{{ e }}</a></li>
+    </ul>
+    {% endfor %}
+    </div>
+    <div class="gauche50">
+    Recherche rapide : <input name="recherche" value="Non fonctionnelle" />
+    </div>
+</div>
+
+{% endblock %}
diff --git a/project/templates/actions.html b/project/templates/actions.html
new file mode 100644 (file)
index 0000000..4e57578
--- /dev/null
@@ -0,0 +1,16 @@
+<ul>
+    {% if user.is_authenticated %}
+        {% if this_employe %}
+            <li class="username">{{ this_employe }}</li>
+        {% else %}
+            <li class="username">{{ user }}</li>
+        {% endif %}
+        <li><a href="{% url rh_profil %}">Mon profil RH</a></li>
+        {% if user_is_admin or user_in_dae_groupes or user_in_recrutement_groupes %}
+            <li><a href="{% url admin:index %}">Administration</a></li>
+        {% endif %}
+        <li><a href="{% url django.contrib.auth.views.logout %}?next=/">Déconnexion</a></li>
+    {% else %}
+        <li><a href="{% url django.contrib.auth.views.login %}?next={{request.path}}">Connexion</a></li>
+    {% endif %}
+</ul>
index d91ba4f..13e4ea2 100644 (file)
@@ -1,10 +1,14 @@
 {% load i18n %}
 <input type="text" name="{{name}}_text" id="{{html_id}}_text" value="" {{ extra_attrs }} />
 {% if add_link %}
-        <a href="{{ add_link }}" class="add-another" id="add_{{ html_id }}" onclick="return showAddAnotherPopup(this);"> <img src="{{ admin_media_prefix }}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"></a>
+    <a href="{{ add_link }}" class="add-another" id="add_{{ html_id }}" onclick="return showAddAnotherPopup(this);">
+        <img src="{{ admin_media_prefix }}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another">
+    </a>
 {% endif %}
 {% block help %}{% endblock %}
-<div id="{{html_id}}_on_deck" class="results_on_deck"><div>{{current_result|safe}}</div></div>
+<div id="{{html_id}}_on_deck" class="results_on_deck">
+    <div>{{current_result|safe}}</div>
+</div>
 <input type="hidden" name="{{name}}" id="{{html_id}}" value="{{current_id}}" />
 <script type="text/javascript">
 jQuery(document).ready(function($){{% block script %}
diff --git a/project/templates/index.html b/project/templates/index.html
deleted file mode 100644 (file)
index 893d13f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-{% extends 'base.html' %}
-
-{% block title %}RH{% endblock %}
-{% block titre %}Ressources humaines{% endblock %}
-{% block sous_titre %}Accueil{% endblock %}
-
-{% block main %}
-
-<h1>Ressources humaines</h1>
-
-<p>
-L'ensemble des applications RH sera regroupé dans ce système de gestion des ressources humaines (SGRH).
-</p>
-<p>
-Voici les modules actuellement disponibles :
-</p>
-<ul>
-    <li><a href="{% url dae_index %}">Demande d'autorisation d'engagement (DAE)</a></li>
-</ul>
-
-<h1>Vos droits d'accès</h1>
-{% if request.user.is_authenticated %}
-<p>Vous faîtes partie des groupes suivants : </p>
-<ul>
-    {% for g in  request.user.groups.all %}
-    <li>{{ g.name }}</li>
-    {% endfor %}
-</ul>
-{% endif %}
-
-
-{% endblock %}
-
index a0ba2f0..6076c2f 100644 (file)
@@ -1,28 +1,40 @@
 {% load auf_menu dae %}
 
 <ul class="menu">
-  <li class="{% menu_actif request '^$' %}">
-    <a href="{% url index %}">Accueil</a>
-  </li>
-  <li class="{% menu_actif request '^dae$' %}">
-    <a href="{% url dae_index %}">DAE</a>
-    <ul>
+    <li class="{% menu_actif request '^$' %}"><a href="{% url accueil %}">Accueil</a></li>
+{% if user.is_authenticated %}
+    {% if user_in_dae_groupes %}
+    <li class="{% menu_actif request '^dae$' %}">
+        <a href="{% url dae_index %}">DAE</a>
+        <ul>
         {% if request.user|peut_ajouter %}
         <li class="{% menu_actif request '^poste$' %}">
-          <a href="{% url poste %}">Poste : formulaire</a>
+            <a href="{% url poste %}">Poste : formulaire</a>
         </li>
         {% endif %}
         <li class="{% menu_actif request '^postes$' %}">
-          <a href="{% url dae_postes_liste %}">Postes : voir et valider</a>
+            <a href="{% url dae_postes_liste %}">Postes : voir et valider</a>
         </li>
         {% if request.user|peut_ajouter %}
         <li class="{% menu_actif request '^embauche$' %}">
-          <a href="{% url embauche %}">Embauche : formulaire</a>
+            <a href="{% url embauche %}">Embauche : formulaire</a>
         </li>
         {% endif %}
         <li class="{% menu_actif request '^embauches$' %}">
-          <a href="{% url dae_embauches_liste %}">Embauches : voir et valider</a>
+            <a href="{% url dae_embauches_liste %}">Embauches : voir et valider</a>
         </li>
-    </ul>
-  </li>
+        </ul>
+    </li>
+    {% else %}
+        <li class="{% menu_actif request '^dae$' %}"><a href="" class="disabled">DAE</a></li>
+    {% endif %}
+    {% if user_in_recrutement_groupes %}
+        <li class="{% menu_actif request '^recrutement$' %}"><a href="{% url index %}">Recrutement</a></li>
+    {% else %}
+        <li class="{% menu_actif request '^recrutement$' %}"><a href="" class="disabled">Recrutement</a></li>
+    {% endif %}
+    <li class="{% menu_actif request '^contrats$' %}"><a href="" class="disabled">Contrats</a></li>
+    <li class="{% menu_actif request '^employes$' %}"><a href="{% url rh_employes %}">Employés</a></li>
+    <li class="{% menu_actif request '^evaluations$' %}"><a href="" class="disabled">Évaluations</a></li>
+{% endif %}
 </ul>
diff --git a/project/templates/sgrh.html b/project/templates/sgrh.html
new file mode 100644 (file)
index 0000000..cd1eb89
--- /dev/null
@@ -0,0 +1,5 @@
+{% extends "base.html" %}
+
+{% block extrahead %}
+    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/sgrh.css" media="all"/>
+{% endblock %}
index 21487aa..cf14e27 100644 (file)
@@ -2,6 +2,7 @@
 from django.conf.urls.defaults import patterns, include, handler500, url
 from django.conf import settings
 from django.contrib import admin
+from auf.django.emploi import settings as sett
 
 admin.autodiscover()
 
@@ -10,35 +11,33 @@ handler500 # Pyflakes
 urlpatterns = patterns(
     '',
     (r'^$', 'project.views.index'),
-    url(r'^qbe/', include('django_qbe.urls')),
     #url(r'^private_files/', include('private_files.urls')),
     url(r'^captcha/', include('captcha.urls')),
     url(r'^admin_tools/', include('admin_tools.urls')),
+
+    # système
+    url(r'^$', 'project.views.accueil', name='accueil'),
+
     (r'^admin/', include(admin.site.urls)),
+    url(r'^api/(?P<method>[a-z_-]+)/$', 'recrutement.api.api', 
+            name='recrutement_api'),
     (r'^connexion/$', 'django.contrib.auth.views.login'),
     (r'^deconnexion/$', 'django.contrib.auth.views.logout'),
-    (r'^dae/', include('project.dae.urls')),
-    (r'^recrutement/', include('project.recrutement.urls')),
-    url(r'^recrutement/affecter_evaluateurs_candidats/$', 
-        'recrutement.views.affecter_evaluateurs_candidats', 
-        name='affecter_evaluateurs_candidats'),
-    url(r'^recrutement/affecter_evaluateurs_offre_emploi/$', 
-        'recrutement.views.affecter_evaluateurs_offre_emploi', 
-        name='affecter_evaluateurs_offre_emploi'),
-    url(r'^recrutement/envoyer_courriel_candidats/$', 
-        'recrutement.views.envoyer_courriel_candidats', 
-        name='envoyer_courriel_candidats'),
-    url(r'^recrutement/selectionner_template/$', 
-        'recrutement.views.selectionner_template', 
-        name='selectionner_template'),
-    url(r'^recrutement/pieces/$', 'recrutement.views.postuler_appel_offre', 
-        name='pieces'),
-    url(r'^recrutement/postuler_appel_offre/$', 
-        'recrutement.views.postuler_appel_offre', name='postuler_appel_offre'),
-    (r'^tinymce/', include('tinymce.urls')),    
-    (r'^', include('project.rh.urls')),
+    #url(r'^private_files/', include('private_files.urls')),
+    url(r'^captcha/', include('captcha.urls')),
+    url(r'^admin_tools/', include('admin_tools.urls')),
+    (r'^tinymce/', include('tinymce.urls')),
     (r'^prive/(?P<path>.*)$', 'django.views.static.serve', 
         {'document_root': settings.PRIVE_MEDIA_ROOT}),
+    url(r'^404$', 'project.views.erreur404', name='404'),
+    url(r'^500$', 'project.views.erreur500', name='500'),
+    url(r'^550$', 'project.views.erreur550', name='550'),
+
+    # apps
+    (r'^dae/', include('project.dae.urls')),
+    (r'^recrutement/', include('recrutement.urls')),
+    (r'^', include('project.rh.urls')),
+    url(r'^qbe/', include('django_qbe.urls')),
 )
 
 if settings.DEBUG:
index c69b5a6..c25d676 100644 (file)
@@ -1,8 +1,47 @@
 # -*- encoding: utf-8 -*-
+from datetime import date
+
+from django.contrib.auth.decorators import login_required
 from django.shortcuts import render_to_response
 from django.template import RequestContext
-from project.dae.decorators import dae_groupe_requis
 
-@dae_groupe_requis
-def index(request):
-    return render_to_response('index.html', {}, RequestContext(request))
+import rh.models as rh
+
+@login_required
+def accueil(request):
+    """Accueil = Tableau de bord de l'utilisateur"""
+    rc = RequestContext(request)
+    c = {}
+    today = date.today()
+    
+    # employés présents = metadata ok et dossiers présents
+    employes = rh.Employe.objects   \
+                    .filter(actif=True, supprime=False)   \
+                    .filter(dossiers__actif=True, dossiers__supprime=False) \
+                    .exclude(dossiers__date_debut__gt=today) \
+                    .exclude(dossiers__date_fin__lt=today) \
+                    .order_by('?')
+    
+    c['employes'] = employes[0:10]
+    return render_to_response('accueil.html', c, rc)
+
+def erreur404(request) :
+    c = {
+        'user':request.user,
+    }
+    return render_to_response('404.html', c,
+            context_instance = RequestContext(request))
+
+def erreur500(request) :
+    c = {
+        'user':request.user,
+    }
+    return render_to_response('500.html', c,
+            context_instance = RequestContext(request))
+            
+def erreur550(request) :
+    c = {
+        'user':request.user,
+    }
+    return render_to_response('550.html', c,
+            context_instance = RequestContext(request))
diff --git a/src/auf.django.emploi/.gitignore b/src/auf.django.emploi/.gitignore
new file mode 100644 (file)
index 0000000..499a075
--- /dev/null
@@ -0,0 +1,4 @@
+*.pyc
+*egg-info
+build
+dist
diff --git a/src/auf.django.emploi/CHANGES b/src/auf.django.emploi/CHANGES
new file mode 100644 (file)
index 0000000..218fcb3
--- /dev/null
@@ -0,0 +1,7 @@
+auf.django.emploi
+===================
+
+0.1
+---
+
+* Création du module : 
diff --git a/src/auf.django.emploi/MANIFEST.in b/src/auf.django.emploi/MANIFEST.in
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/auf.django.emploi/README b/src/auf.django.emploi/README
new file mode 100644 (file)
index 0000000..0143f2d
--- /dev/null
@@ -0,0 +1,3 @@
+auf.django.emploi
+===================
+
diff --git a/src/auf.django.emploi/auf/__init__.py b/src/auf.django.emploi/auf/__init__.py
new file mode 100644 (file)
index 0000000..35cf25b
--- /dev/null
@@ -0,0 +1,5 @@
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except:
+    # bootstrapping
+    pass
diff --git a/src/auf.django.emploi/auf/django/__init__.py b/src/auf.django.emploi/auf/django/__init__.py
new file mode 100644 (file)
index 0000000..35cf25b
--- /dev/null
@@ -0,0 +1,5 @@
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except:
+    # bootstrapping
+    pass
diff --git a/src/auf.django.emploi/auf/django/emploi/__init__.py b/src/auf.django.emploi/auf/django/emploi/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/src/auf.django.emploi/auf/django/emploi/api.py b/src/auf.django.emploi/auf/django/emploi/api.py
new file mode 100644 (file)
index 0000000..5a7e778
--- /dev/null
@@ -0,0 +1,68 @@
+# -*- encoding: utf-8 -*
+from django.shortcuts import render_to_response, redirect, get_object_or_404
+from django.template import Context, RequestContext
+
+from django.utils import simplejson
+from auf.django.emploi import models as emploi
+from auf.django.emploi import forms as emploiForms
+from restkit import request as req
+import datamaster_modeles.models as ref
+
+class API:
+    def __init__(self, request):
+        self.request = request
+
+    def offre_emploi_liste(self):
+        url = "http://127.0.0.1:8000/api/offre_emploi_liste/"
+        r = req(url)
+        liste_json = r.body_string()
+        liste_offres = simplejson.loads(liste_json)
+        obj_offres_emploi = []
+
+        for offre_dict in liste_offres:
+            offre = emploi.OffreEmploi()
+            offre.est_affiche = offre_dict['est_affiche']
+            offre.statut = offre_dict['statut']
+            offre.nom = offre_dict['nom']
+            offre.resume = offre_dict['resume']
+            offre.description = offre_dict['description']
+            offre.poste_nom = offre_dict['poste_nom']
+            offre.date_limite = offre_dict['date_limite'] 
+            offre.region = ref.Region.objects.get(id=offre_dict['region'])
+            offre.bureau = ref.Bureau.objects.get(id=offre_dict['bureau'])
+            offre.duree_affectation = offre_dict['duree_affectation']
+            offre.renumeration = offre_dict['renumeration']
+            offre.debut_affectation = offre_dict['debut_affectation']
+            offre.lieu_affectation = ref.Implantation.objects.get(id=offre_dict['lieu_affectation'])
+            obj_offres_emploi.append(offre)  
+        return obj_offres_emploi
+
+    def offre_emploi(self, offre_id):
+        url = "http://127.0.0.1:8000/api/offre_emploi/?id=%s"
+        r = req(url % (offre_id))
+        offre_json = r.body_string()
+        offre_dict = simplejson.loads(offre_json)
+        obj_offres_emploi = []
+
+        offre = emploi.OffreEmploi()
+        offre.est_affiche = offre_dict['est_affiche']
+        offre.statut = offre_dict['statut']
+        offre.nom = offre_dict['nom']
+        offre.resume = offre_dict['resume']
+        offre.description = offre_dict['description']
+        offre.poste_nom = offre_dict['poste_nom']
+        offre.date_limite = offre_dict['date_limite']
+        offre.region = ref.Region.objects.get(id=offre_dict['region'])
+        offre.bureau = ref.Bureau.objects.get(id=offre_dict['bureau'])
+        offre.duree_affectation = offre_dict['duree_affectation']
+        offre.renumeration = offre_dict['renumeration']
+        offre.debut_affectation = offre_dict['debut_affectation']
+        offre.lieu_affectation = ref.Implantation.objects.get(id=offre_dict['lieu_affectation'])
+        obj_offres_emploi.append(offre)
+        return obj_offres_emploi
+
+    def candidat_add(self, offre_id):
+        url = "http://127.0.0.1:8000/api/candidat_add/?id=%s" % (offre_id)
+        return redirect(url)
+
+        
diff --git a/src/auf.django.emploi/auf/django/emploi/forms.py b/src/auf.django.emploi/auf/django/emploi/forms.py
new file mode 100644 (file)
index 0000000..7f963cc
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- encoding: utf-8 -*-
+
+from django import forms
+from django.forms.models import inlineformset_factory
+from django.forms.widgets import CheckboxSelectMultiple
+from django.forms import ModelForm
+
+from captcha.fields import CaptchaField
+
+from auf.django.emploi import models as emploi
+
+################################################################################
+# OFFRE EMPLOI
+################################################################################
+class CandidatPieceForm(inlineformset_factory(emploi.Candidat,
+                        emploi.CandidatPiece)):
+    nom = forms.MultipleChoiceField(choices=emploi.TYPE_PIECE_CHOICES,
+            widget=CheckboxSelectMultiple)
+
+class PostulerOffreEmploiForm(ModelForm):
+    captcha = CaptchaField()
+
+    def __init__(self, *args, **kwargs):
+        self.offre_emploi = kwargs.pop('offre_emploi')     
+        super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
+
+    def save(self, *args, **kwargs): 
+        kwargs2 = kwargs.copy()
+        kwargs2['commit'] = False
+        postulation = super(PostulerOffreEmploiForm, self).save(*args, **kwargs2)
+        if 'commit' not in kwargs or kwargs['commit']:
+            postulation.save()
+        return postulation
+
+    class Meta:
+        model = emploi.Candidat   
+        exclude = ('actif', 'offre_emploi',)
+        fields = ('nom', 'prenom', 'genre', 'nationalite', 'situation_famille', 
+                    'nombre_dependant', 'niveau_diplome', 'employeur_actuel', 
+                    'poste_actuel', 'domaine_professionnel', 'telephone', 
+                    'email', 'adresse', 'ville', 'code_postal', 'etat_province',
+                    'pays', 'captcha', )
diff --git a/src/auf.django.emploi/auf/django/emploi/models.py b/src/auf.django.emploi/auf/django/emploi/models.py
new file mode 100755 (executable)
index 0000000..8fa2e92
--- /dev/null
@@ -0,0 +1,169 @@
+# -*- encoding: utf-8 -*
+
+import datetime
+from django.core.files.storage import FileSystemStorage
+from tinymce import models as tinymce_models
+from django.db import models
+import settings
+
+import datamaster_modeles.models as ref
+
+### CONSTANTES ###
+# HELP_TEXT
+HELP_TEXT_NB_DEPENDANT = "Le nombre de personnes à charge"
+HELP_TEXT_FORMAT_DATE = "Le format de la date est AAAA-MM-JJ"
+HELP_TEXT_TAGS_ACCEPTES = "Pour le texte, les variables disponibles sont : \
+                            {{ nom_candidat }} {{ prenom_candidat }} \
+                            {{ offre_emploi }}. Ces champs seront \
+                            automatiquement remplacés par les informations de \
+                            chaque candidat."
+
+
+STATUT_OFFRE_EMPLOI_CHOICES = (
+    ('NOUV', 'Nouveau'),
+    ('AFFI', 'Offre d\'emploi en affichage'),
+    ('EVAL', 'En évaluation des candidatures'),
+    ('ENTR', 'En entrevue'),
+    ('TERM', 'Terminé'),
+)
+
+# CANDIDAT
+GENRE_CHOICES = (
+    ('M', 'Homme'),
+    ('F', 'Femme'),
+)
+SITUATION_CHOICES = (
+    ('C', 'Célibataire'),
+    ('F', 'Conjoint de fait'),
+    ('M', 'Marié'),
+    ('D', 'Divorcé'),
+)
+STATUT_CHOICES = (
+    ('NOUV', 'Nouveau'),
+    ('REC', 'Recevable'),
+    ('SEL', 'Sélectionné'),
+    ('REF', 'Refusé'),
+    ('ACC', 'Accepté'),
+)
+
+# PIECE CANDIDAT
+TYPE_PIECE_CHOICES = (
+    ('CV','CV'),
+    ('LET','Lettre'),
+    ('AUT','Autre'),
+)
+
+# Abstracts
+class Metadata(models.Model):
+    """
+    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,
+                        help_text=HELP_TEXT_FORMAT_DATE, )
+    
+    class Meta:
+        abstract = True
+
+class OffreEmploi(Metadata):
+    est_affiche = models.BooleanField(default=False, 
+                                    verbose_name="En affichage sur le site")
+    statut = models.CharField(max_length=4, choices=STATUT_OFFRE_EMPLOI_CHOICES,
+                                default='NOUV')
+    nom = models.CharField(max_length=255)
+    resume = models.TextField(verbose_name="Résumé")
+    description = models.TextField()
+    poste = models.CharField(max_length=255)
+    poste_nom = models.CharField(max_length=255)
+    date_limite = models.DateField(verbose_name="Date limite",
+                        help_text=HELP_TEXT_FORMAT_DATE,)  
+    region = models.ForeignKey(ref.Region, db_column='region', 
+                verbose_name="Région")
+    bureau = models.ForeignKey(ref.Bureau, db_column='bureau', )
+    duree_affectation = models.CharField(max_length=255, 
+                        verbose_name="Durée de l'affectation")
+    renumeration = models.CharField(max_length=255,
+                    verbose_name='Rénumération')
+    debut_affectation = models.DateField(verbose_name="Début de l'affectation",
+                        help_text=HELP_TEXT_FORMAT_DATE,)
+    lieu_affectation = models.ForeignKey(ref.Implantation,  
+                        db_column='implantation', 
+                        verbose_name="Lieu d'affectation")
+
+    class Meta:
+        db_table = 'emploi_offreemploi'
+        verbose_name_plural = "offres d'emploi"
+
+    def __unicode__(self):
+        return '%s [%s]' % (self.nom, self.id)
+
+class Candidat(Metadata):   
+    statut = models.CharField(max_length=4, choices=STATUT_CHOICES, 
+                default='NOUV')
+    offre_emploi = models.ForeignKey('OffreEmploi', db_column='offre_emploi',
+                    related_name='+')
+    prenom = models.CharField(max_length=255, verbose_name='Prénom', )
+    nom = models.CharField(max_length=255)
+    genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
+    nationalite = models.ForeignKey(ref.Pays, 
+                    db_column='nationalite', related_name='+',
+                    verbose_name='Nationalité')
+    situation_famille = models.CharField(max_length=1, 
+                        choices=SITUATION_CHOICES, 
+                        verbose_name='Situation familiale', )
+    nombre_dependant = models.IntegerField(verbose_name='Nombre de dépendant',
+                        help_text=HELP_TEXT_NB_DEPENDANT, )
+    niveau_diplome = models.CharField(max_length=255,
+                        verbose_name='Niveau du diplôme')
+    employeur_actuel = models.CharField(max_length=255, )
+    poste_actuel = models.CharField(max_length=255, )
+    domaine_professionnel = models.CharField(max_length=255, )
+    telephone = models.CharField(max_length=255, verbose_name='Téléphone', )
+    email = models.EmailField(max_length=255, verbose_name = 'Courriel', )
+
+    # Adresse
+    adresse = models.CharField(max_length=255)
+    ville = models.CharField(max_length=255)
+    etat_province = models.CharField(max_length=255, 
+                    verbose_name="État/Province")
+    code_postal = models.CharField(max_length=255, blank=True)
+    pays = models.ForeignKey(ref.Pays, db_column='pays',
+            related_name='+')
+
+    class Meta:
+        db_table = 'emploi_candidat'
+
+    def pieces_jointes(self):
+        return CandidatPiece.objects.filter(candidat=self) 
+    pieces_jointes.allow_tags = True    
+
+    def __unicode__(self):
+        return '%s %s [%s]' % (self.nom, self.prenom, self.id)
+
+
+# Upload de fichiers
+storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT, 
+                            base_url=settings.PRIVE_MEDIA_URL)
+
+def candidat_piece_dispatch(instance, filename):
+    path = u'%s/%s/%s_%s_%s/%s/%s' % ('emplois', instance.candidat.offre_emploi.id,
+            instance.candidat.nom, instance.candidat.prenom, instance.candidat.id, 
+            instance.nom, filename)
+    return path
+
+class CandidatPiece(models.Model):
+    candidat = models.ForeignKey(Candidat, db_column='candidat',
+                related_name='candidat_piece') 
+    nom = models.CharField(max_length=3, choices=TYPE_PIECE_CHOICES)
+    path = models.FileField(verbose_name="Fichier", 
+                        upload_to=candidat_piece_dispatch, storage=storage_prive)
+
+    class Meta:
+        db_table = 'emploi_pieces'
+        verbose_name = "pièce jointe"
+        verbose_name_plural = "pièces jointes"
+
+    def __unicode__(self):
+        return '%s' % (self.nom)
diff --git a/src/auf.django.emploi/auf/django/emploi/settings.py b/src/auf.django.emploi/auf/django/emploi/settings.py
new file mode 100644 (file)
index 0000000..101b2a1
--- /dev/null
@@ -0,0 +1,17 @@
+# -*- encoding: utf-8 -*-
+
+import os
+from django.conf import settings
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = getattr(settings, 'OE_MEDIA_ROOT', 
+                        os.path.join(os.path.dirname(__file__), 'media'))
+PRIVE_MEDIA_ROOT = getattr(settings, 'OE_PRIV_MEDIA_ROOT', 
+                        os.path.join(os.path.dirname(__file__), 'media_prive'))
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+MEDIA_URL = '/media/'
+PRIVE_MEDIA_URL = '/prive/'
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html b/src/auf.django.emploi/auf/django/emploi/templates/recrutement/pieces.html
new file mode 100644 (file)
index 0000000..d8587d7
--- /dev/null
@@ -0,0 +1,30 @@
+<table>
+    {% for f in piecesForm.management_form %}
+        {{ f }}
+    {% endfor %}
+    <tr>  
+        <th></th> 
+        {% for field in piecesForm.forms.0 %}
+            {% if not field.is_hidden %}
+                <th>{{ field.label }}</th>
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% for f in piecesForm.forms %}
+    <tr>
+        <td>
+            {{ f.errors }}
+            {% if f.initial.fichier %}
+                <a href="{{ f.initial.fichier.url }}" target="_blank">Télécharger</a>
+            {% endif %}
+        </td>
+        {% for field in f %} 
+            {% if not field.is_hidden %}
+                <td>{{ field }}</td>
+            {% else %}
+                {{ field }}
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% endfor %}
+</table>
diff --git a/src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html b/src/auf.django.emploi/auf/django/emploi/templates/recrutement/postuler_appel_offre.html
new file mode 100644 (file)
index 0000000..53569f0
--- /dev/null
@@ -0,0 +1,135 @@
+{% extends 'base.html' %}
+{% load adminmedia %}
+
+{% block title %}RH{% endblock %}
+{% block titre %}Ressources humaines{% endblock %}
+{% block sous_titre %}Accueil{% endblock %}
+
+{% block main %}
+<div id="content-main">
+    {% block object-tools %}{% endblock %}
+
+
+
+
+    <div class="module">
+    <h2>Poster pour un appel d'offre d'emploi</h2>
+    </div>
+       
+    <form action="" method="post" enctype="multipart/form-data">
+        <fieldset>
+            <h2>Informations personnelles</h2>
+            <table id="informations_personnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.prenom.label }}</td>
+                    <td>{{ form.prenom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nom.label }}</td>
+                    <td>{{ form.nom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.genre.label }}</td>
+                    <td>{{ form.genre }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nationalite.label }}</td>
+                    <td>{{ form.nationalite }}</td>
+                <tr>
+                    <td>{{ form.situation_famille.label }}</td>
+                    <td>{{ form.situation_famille }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nombre_dependant.label }}</td>
+                    <td>{{ form.nombre_dependant }}<br />
+                        <span class="info">{{ form.nombre_dependant.help_text }}
+                        </span>
+                    </td>
+                </tr>
+                </tbody>
+            </table>            
+        </fieldset>
+        <fieldset>
+            <h2>Coordonnées</h2>
+            <table id="coordonnees">
+                <tbody>
+                <tr>
+                    <td>{{ form.telephone.label }}</td>
+                    <td>{{ form.telephone }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.email.label }}</td>
+                    <td>{{ form.email }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.adresse.label }}</td>
+                    <td>{{ form.adresse }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.ville.label }}</td>
+                    <td>{{ form.ville }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.etat_province.label }}</td>
+                    <td>{{ form.etat_province }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.code_postal.label }}</td>
+                    <td>{{ form.code_postal }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.pays.label }}</td>
+                    <td>{{ form.pays }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Informations professionnelles</h2>
+            <table id="informations_professionnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.niveau_diplome.label }}</td>
+                    <td>{{ form.niveau_diplome }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.employeur_actuel.label }}</td>
+                    <td>{{ form.employeur_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.poste_actuel.label }}</td>
+                    <td>{{ form.poste_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.domaine_professionnel.label }}</td>
+                    <td>{{ form.domaine_professionnel }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Pièces jointes</h2>
+            <p class="info">CV, lettre de motivation...</p>
+            {% include "recrutement/pieces.html" %}
+        </fieldset>
+        <fieldset>
+            <h2>Vérification CAPTCHA</h2>
+            <p class="info">Entrez les caractères figurant dans l'image ci-dessous.</p>
+                <tr>
+                    <td>
+                        {{ form.captcha }}
+                        {{ form.captcha.errors }}
+                    </td>
+                </tr>
+        </fieldset>
+        <div class="submit-row">
+            <input type="submit" name="save" value="Enregistrer" />
+        </div>
+    </form>
+
+
+
+</div>
+
+{% endblock %}
diff --git a/src/auf.django.emploi/setup.cfg b/src/auf.django.emploi/setup.cfg
new file mode 100644 (file)
index 0000000..01bb954
--- /dev/null
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true
diff --git a/src/auf.django.emploi/setup.py b/src/auf.django.emploi/setup.py
new file mode 100644 (file)
index 0000000..daf3575
--- /dev/null
@@ -0,0 +1,31 @@
+# -*- encoding: utf-8 -*-
+
+from setuptools import setup, find_packages
+import sys, os
+
+name = 'auf.django.emploi'
+version = '0.1'
+
+setup(name=name,
+      version=version,
+      description="Outils nécessaires pour la diffusion des offres d'emploi et \
+                    la soumissions des candidatures, dans l'application de \
+                    recrutement du système SGRH.",
+      long_description="""\
+""",
+      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      keywords='',
+      author='Nilovna Bascunan-Vasquez',
+      author_email='contact@nilovna.com',
+      url='http://pypi.auf.org/%s' % name,
+      license='GPL',
+      packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          # -*- Extra requirements: -*-
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )