Merge branch 'dev' into recrutement
authorNilovna Bascunan-Vasquez <contact@nilovna.com>
Tue, 9 Aug 2011 21:09:01 +0000 (17:09 -0400)
committerNilovna Bascunan-Vasquez <contact@nilovna.com>
Tue, 9 Aug 2011 21:09:01 +0000 (17:09 -0400)
53 files changed:
buildout.cfg
project/context_processors.py
project/dae/context_processors.py [new file with mode: 0644]
project/dae/forms.py
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/models.py
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/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/recrutement/context_processors.py [new file with mode: 0644]
project/recrutement/permissions.py [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/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

index 7588e54..ec769a8 100644 (file)
@@ -46,10 +46,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)}
+
index 7b247ff..bda8037 100644 (file)
@@ -109,6 +109,15 @@ class FlexibleRemunForm(forms.ModelForm):
     class Meta:
         model = dae.Remuneration
 
+    def clean_devise(self):
+        devise = self.cleaned_data['devise']
+        liste_taux = devise.tauxchange_set.order_by('-annee').filter(implantation=self.instance.dossier.poste.implantation)
+        if len(liste_taux) == 0:
+            raise forms.ValidationError(u"La devise %s n'a pas de taux pour l'implantation %s" % (devise, self.instance.dossier.poste.implantation))
+        else:
+            return devise
+
+
 class RemunForm(inlineformset_factory(dae.Dossier, dae.Remuneration, extra=5, form=FlexibleRemunForm)):
     pass
 
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']
index ac68781..975c890 100644 (file)
@@ -379,10 +379,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="+")
+    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
@@ -644,12 +655,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
@@ -673,7 +696,11 @@ class Remuneration(models.Model):
         return round(self.montant / 12, 2)
 
     def taux_devise(self):
-        return self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.dossier.poste.implantation)[0].taux
+        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_euro(self):
         return round(float(self.montant) * float(self.taux_devise()), 2)
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..58525da 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>
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..504f19b 100644 (file)
 <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 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; }
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)}
+
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
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 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 d48f1ad..53ebbc2 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"
@@ -252,7 +252,16 @@ class PosteComparaison(models.Model):
     nom = models.CharField(verbose_name="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 +299,7 @@ class Employe(AUFMetadata):
                             verbose_name="Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
                             verbose_name="Date de naissance",
+                            validators=[validate_date_passee],
                             null=True, blank=True)
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
     
@@ -330,6 +340,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 +394,7 @@ class AyantDroit(AUFMetadata):
                             verbose_name="Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
                             verbose_name="Date de naissance",
+                            validators=[validate_date_passee],
                             null=True, blank=True)
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
     
@@ -431,7 +450,7 @@ class Dossier_(AUFMetadata):
     """
     # Identification
     employe = models.ForeignKey('Employe', db_column='employe', 
-                            related_name='+',
+                            related_name='dossiers',
                             verbose_name="Employé")
     poste = models.ForeignKey('Poste', db_column='poste', related_name='+')
     statut = models.ForeignKey('Statut', related_name='+', default=3,
@@ -479,7 +498,7 @@ class Dossier_(AUFMetadata):
     
     class Meta:
         abstract = True
-        ordering = ['employe__nom_affichage', 'employe__nom', 'poste__nom']
+        ordering = ['employe__nom', ]
         verbose_name = "Dossier"
         verbose_name_plural = "Dossiers"
         
@@ -494,11 +513,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 +534,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 a2985e8..7805bcd 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()
@@ -87,8 +87,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 27e3ca2..8a539f9 100644 (file)
@@ -10,9 +10,9 @@ handler500 # Pyflakes
 
 urlpatterns = patterns(
     '',
-    (r'^$', 'project.views.index'),
-    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_-]+)/(?P<offre_id>\d+)$', 'recrutement.api.api', 
             name='recrutement_api'),
@@ -20,12 +20,20 @@ urlpatterns = patterns(
             name='recrutement_api'),
     (r'^connexion/$', 'django.contrib.auth.views.login'),
     (r'^deconnexion/$', 'django.contrib.auth.views.logout'),
+    #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'^tinymce/', include('tinymce.urls')),    
     (r'^', include('project.rh.urls')),
-    (r'^prive/(?P<path>.*)$', 'django.views.static.serve', 
-        {'document_root': sett.PRIVE_MEDIA_ROOT}),
 )
 
 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))