Merge branch 'hotfix/employe_anterieur_fix' into dev
authorBenoit C. Sirois <benoit.clennett-sirois@auf.org>
Tue, 16 Apr 2013 19:14:07 +0000 (15:14 -0400)
committerBenoit C. Sirois <benoit.clennett-sirois@auf.org>
Tue, 16 Apr 2013 19:14:07 +0000 (15:14 -0400)
13 files changed:
project/assets/css/print.css
project/assets/js/dae-embauche.js
project/assets/js/dae-poste.js
project/dae/forms.py
project/dae/models.py
project/dae/templates/dae/embauche-dossier-consulter.html
project/dae/templates/dae/embauche-remun.html
project/dae/templates/dae/embauche.html
project/dae/templates/dae/embauche_consulter.html
project/dae/templates/dae/poste_resume.html
project/dae/templatetags/dae.py
project/rh/migrations/0046_auto__add_field_rhdossierclassementrecord_commentaire.py [new file with mode: 0644]
project/rh/models.py

index 78ecb67..1c57d46 100644 (file)
@@ -20,7 +20,10 @@ label {font-weight: bold;}
 
 .cell-nombre { padding-right:0px; text-align:right; }
 .row1, .even {}
-.row2, .odd { background-color:#EFEFEF; }
+.row2, .odd {
+    /* box-shadow: 0px 0px 1000px #efefef; */
+    /* background-color:#EFEFEF; */
+}
 .signature {margin: 36px 0px;}
 .info { font-size: 100%; }
 
@@ -41,6 +44,13 @@ table#global-cost tr th {
     font-size: 12px;
 }
 
-tr.gris-bkg {
-    background-color:#ccc; !important;
-}
\ No newline at end of file
+
+th {
+    box-shadow: 0px 0px 10000px #ccc inset;
+}
+
+.total-row th,
+.total-row td {
+    box-shadow: 0px 0px 10000px #aaa inset !important;
+}
+
index fd9b76b..94be02a 100644 (file)
@@ -128,4 +128,27 @@ $(document).ready(function() {
         $(this).find('div').remove();
         input.val('');
     });
+    $(".results_on_deck").each(function(i, e){
+        var input_id = $(this).attr('id').replace('_on_deck', '');
+        var prefix_dossier_connexe = $(this).attr('id').replace('recherche_on_deck', '');
+        var input = $('#'+input_id);
+        var dossier_id = input.val();
+        var lnk = $(this).parent().find('.clear-cmp a');
+       if (dossier_id != null && dossier_id == '') {
+           lnk.show()
+       }
+       lnk.click(function(e){
+           e.preventDefault();
+            $('#' + prefix_dossier_connexe + 'implantation').val('');
+            $('#' + prefix_dossier_connexe + 'classement').val('');
+            $('#' + prefix_dossier_connexe + 'cmp_dossier').val('');
+            $('#' + prefix_dossier_connexe + 'statut').val('');
+            $('#' + prefix_dossier_connexe + 'poste').val('');
+            $('#' + prefix_dossier_connexe + 'personne').val('');
+            $('#' + prefix_dossier_connexe + 'montant').val('');
+            $('#' + prefix_dossier_connexe + 'devise').val('');
+            $('#' + prefix_dossier_connexe + 'montant_euros').val('');
+           lnk.hide();
+       });
+    });
 });
index ecf51bd..4f4c661 100644 (file)
@@ -305,4 +305,27 @@ $(document).ready(function() {
         $(this).find('div').remove();
         input.val('');
     });
+    $(".comparaison-interne .results_on_deck").each(function(i, e){
+        /* on ne veut pas afficher la personne en-dessous */
+        var input_id = $(this).attr('id').replace('_on_deck', '');
+        var input = $('#'+input_id);
+        var prefix_poste_connexe = $(this).attr('id').replace('recherche_on_deck', '');
+        var poste_id = input.val();
+        var lnk = $(this).parent().find('.clear-cmp a');
+       if (poste_id != null && poste_id == '') {
+           lnk.show()
+       }
+       lnk.click(function(e){
+           e.preventDefault();
+            $('#' + prefix_poste_connexe + 'implantation').val('');
+            $('#' + prefix_poste_connexe + 'cmp_poste').val('');
+            $('#' + prefix_poste_connexe + 'nom').val('');
+            $('#' + prefix_poste_connexe + 'montant').val('');
+            $('#' + prefix_poste_connexe + 'devise').val('');
+            $('#' + prefix_poste_connexe + 'montant_euros').val('');
+            $('#' + prefix_poste_connexe + 'statut').val('');
+            $('#' + prefix_poste_connexe + 'classement').val('');
+           lnk.hide();
+       });
+    });
 });
index 9352637..3b432a7 100644 (file)
@@ -585,7 +585,11 @@ DossierCompReadOnlyRemunFormSet = remun_formset_factory_factory(
     parent_model=dae.DossierComparaison,
     model=dae.DossierComparaisonRemuneration,
     )
-
+RHReadOnlyRemunFormSet = remun_formset_factory_factory(
+    read_only=True,
+    parent_model=rh.Dossier,
+    model=rh.Remuneration,
+    )
 
 class PosteForm(filtered_archived_fields_form_factory(
         'classement_min',
index 7a57911..4098e1d 100644 (file)
@@ -1,6 +1,7 @@
 # -=- encoding: utf-8 -=-
 
 import os
+from decimal import Decimal
 from dateutil.relativedelta import relativedelta
 from datetime import date, timedelta
 
@@ -78,6 +79,16 @@ class Poste(PosteWorkflow, rh.Poste_):
     # Managers
     objects = PosteManager()
 
+    @property
+    def traitement_min_cad(self):
+        return ((self.salaire_min or Decimal('0')) +
+                (self.indemn_fct_min or Decimal('0')))
+
+    @property
+    def traitement_max_cad(self):
+        return ((self.salaire_max or Decimal('0')) +
+                (self.indemn_fct_max or Decimal('0')))
+        
     def _get_key(self):
         """
         Les vues sont montées selon une clef spéciale
@@ -729,6 +740,34 @@ class Dossier(DossierWorkflow, rh.Dossier_):
 
         return dossier_rh
 
+    def get_dossier_precedent_titulaire(self):
+        try:
+            rh_poste = self.poste.id_rh
+        except rh.Poste.DoesNotExist:
+            return None
+
+        try:
+            precedent_employe = self.employe_anterieur
+        except rh.Employe.DoesNotExist:
+            return None
+        
+        qs = rh.Dossier.objects.filter(
+            poste=rh_poste,
+            employe=precedent_employe,
+            ).order_by(
+            '-principal', 'date_fin')
+
+        if qs.count() == 0:
+            return None
+        
+        # Retourne en le premier du queryset si la date de fin est None
+        # Sinon, retourne le plus récent selon la date de fin.
+        first = qs[0]
+        if first.date_fin == None:
+            return first
+        else:
+            return qs.order_by('-principal', '-date_fin')[0]
+
     def get_salaire_anterieur_euros(self):
         if self.devise_anterieur is None:
             return None
index 9ae9a1d..fb55be1 100644 (file)
@@ -1,3 +1,4 @@
+{% load dae %}
 <fieldset>
 <h2>Contrat</h2>
 <table>
 <h2>Classement et salaire de base</h2>
 
 <h3>Ancien dossier <span class="info">(le cas échéant)</span></h3>
-{% if dossier.salaire_anterieur != None %}
+{% with dossier.employe.id_rh.get_latest_dossier_ordered_by_date_fin_and_principal as ancien_dossier %}
+{% if ancien_dossier %}
 <table>
-    <tbody>
-    <tr>
-        <td colspan="7">
-            {{ dossier.employe }} <span class="info">{{ dossier.employe.id_rh.rh_dossiers.all.0.poste.type_poste.nom }} {{ dossier.employe.id_rh.dossier_set.all.0.complement1 }}</span>
-        </td>
-    </tr>
-    <tr>
-        <th>Classement antérieur</th>
-        <th>Salaire antérieur</th>
-        <th>Statut antérieur</th>
-        <th>Type contrat</th>
-    </tr>
-    <tr>
-        <td>{{ dossier.classement_anterieur|default:"" }}</td>
-        <td class="montant">{{ dossier.salaire_anterieur|floatformat:0 }}
-            {{ dossier.devise_anterieur.code }}
-            {% if dossier.devise_anterieur %}
-            ({{ dossier.get_salaire_anterieur_euros|floatformat:0 }}€)
-            {% endif %}
-        </td>
-        <td>{{ dossier.statut_anterieur|default:"" }}</td>
-        <td>{{ dossier.type_contrat_anterieur|default:"" }}</td>
-    </tr>
-    </tbody>
+  <tbody>
+      <tr>
+          <th>Classement</th>
+          <th>Statut</th>
+          <th>Implantation</th>
+          <th>Employé</th>
+          <th>Poste</th>
+      </tr>
+      <tr class="gris-bkg">
+          <td>{{ ancien_dossier.classement|default:"" }}</td>
+          <td>{{ ancien_dossier.statut|default:"" }}</td>
+          <td>{{ ancien_dossier.poste.implantation }}</td>
+          <td>{{ dossier.employe }}</td>
+          <td>{{ ancien_dossier.poste.nom }}</td>
+      </tr>
+      {% if ancien_dossier and ancien_dossier.remunerations.all.count > 0 %}
+      <tr>
+       <td colspan="1">
+         Rémunération
+       </td>
+       <td colspan="4">
+         {% rh_remun_form_for_year ancien_dossier %}
+       </td>
+      </tr>
+      {% endif %}
+  </tbody>
 </table>
 {% else %}
     <p>Il n'y a pas d'ancien dossier pour cet employé</p>
 {% endif %}
+{% endwith %}
 
 <h3>Précédent titulaire <span class="info">(le cas échéant)</span></h3>
 {% if dossier.classement_titulaire_anterieur %}
+{% with dossier.get_dossier_precedent_titulaire as precedent_titulaire %}
 <table>
     <tbody>
     <tr>
-        <td colspan="3">
-            {{ dossier.employe_anterieur|default:"" }}
-        </td>
+          <th>Classement</th>
+          <th>Statut</th>
+          <th>Implantation</th>
+          <th>Employé</th>
+          <th>Poste</th>
     </tr>
     <tr>
-        <th>Classement du titulaire antérieur</th>
-        <th>Salaire du titulaire antérieur</th>
-        <th>Statut du titulaire antérieur</th>
+          <td>{{ precedent_titulaire.classement|default:"" }}</td>
+          <td>{{ precedent_titulaire.statut|default:"" }}</td>
+          <td>{{ precedent_titulaire.poste.implantation }}</td>
+          <td>{{ precedent_titulaire.employe }}</td>
+          <td>{{ precedent_titulaire.poste.nom }}</td>
     </tr>
+    {% if precedent_titulaire and precedent_titulaire.remunerations.all.count > 0 %}
     <tr>
-        <td>{{ dossier.classement_titulaire_anterieur|default:"" }}</td>
-        <td class="montant">{{ dossier.salaire_titulaire_anterieur|floatformat:0 }}
-            {% if dossier.devise_titulaire_anterieur %}
-            {{ dossier.devise_titulaire_anterieur.code }}
-            ({{ dossier.get_salaire_titulaire_anterieur_euros|floatformat:0 }}€)
-            {% endif %}</td>
-        <td>{{ dossier.statut_titulaire_anterieur|default:"" }}</td>
+      <td colspan="1">
+       Rémunération
+      </td>
+      <td colspan="4">
+       {% rh_remun_form_for_year precedent_titulaire %}
+      </td>
     </tr>
+    {% endif %}
     </tbody>
 <table>
+{% endwith %}
 {% else %}
     <p>Il n'y a pas de précédent titulaire</p>
 {% endif %}
 
-<h3>Proposition de classement</h3>
-<table>
-    <tbody>
-    <tr>
-        <th>Classement proposé</th>
-        <th colspan="6">Salaire proposé</span></th>
-    </tr>
-    <tr>
-        <td>{{ dossier.classement }}</td>
-        <td colspan="2">{{ dossier.salaire|floatformat:0 }} {{ dossier.devise.code }}</td>
-        <td colspan="4" id="salaire-propose-euros" class="montant">{{ dossier.get_salaire_euros|floatformat:0 }} €</td>
-    </tr>
-    </tbody>
-</table>
-
 </fieldset>
-
-<fieldset>
-<h2>Accès et ouvertures des comptes</h2>
-<table>
-    <tbody>
-    <tr>
-        <th>Compte comptabilité<th>
-        <td>{% if dossier.compte_compta %}oui{% else %}non{% endif %}</td>
-        <th>Compte courriel</th>
-        <td>{% if dossier.compte_courriel %}oui{% else %}non{% endif %}</td>
-    </tr>
-    </tbody>
-</table>
-</fieldset>
-
index 4214d98..1b920a4 100644 (file)
 </tr>
 {% for group in remunForm.group_list %}
 {% if group.key != 'RAS' %}
+{% if group.key == 'Charges' %}
+<tr class="total-row">
+    <th><strong>Total employé</strong></th>
+    <th><!-- Laisser ce td pour que le javascript fonctionne bien. --></th>
+    <th class="total"></th>
+    <th class="total"></th>
+    {% if remunForm.read_only %}
+    <th class="total"></th>
+    {% endif %}
+    <th>&nbsp;</th>
+    {% if not remunForm.read_only %}
+    <th>&nbsp;</th>
+    {% endif %}
+</tr>
+{% endif %}
+<tr>
+  
+</tr>
 <tr>
   <th colspan="6">{{ group.name }}</th>
 </tr>
@@ -72,7 +90,7 @@
 {% endif %}
 {% endfor %}
 <tr class="total-row">
-    <th><strong>Total</strong></th>
+    <th><strong>Total AUF</strong></th>
     <th><!-- Laisser ce td pour que le javascript fonctionne bien. --></th>
     <th class="total"></th>
     <th class="total"></th>
index 0d5148b..11c4b73 100644 (file)
@@ -1,5 +1,6 @@
 {% extends 'base.html' %}
 {% load adminmedia %}
+{% load dae %}
 
 {% block title %}RH - DAE - Embauche{% endblock %}
 {% block titre %}Ressources humaines{% endblock %}
                                     value="{{ dossier.id }}" />
     </fieldset>
 
+    {% with forms.dossier as form %}
+
+    <fieldset>
+      <h2>Accès et ouverture des comptes</h2>
+      <table>
+       <tbody>
+         <tr>
+            <th>
+              {{ form.compte_compta.label_tag }}
+            </th>
+            <td>
+              {{ form.compte_compta }}<br />
+              {{ form.compte_compta.errors }}
+            </td>
+            <th>
+              {{ form.compte_courriel.label_tag }}
+            </th>
+            <td>
+              {{ form.compte_courriel }}<br />
+              {{ form.compte_courriel.errors }}
+            </td>
+         </tr>
+       </tbody>
+      </table>
+    </fieldset>
+
+    <fieldset>
+      <h2>Pièces jointes</h2>
+      <p class="info">CV, lettre de motivation...</p>
+      {% include "dae/pieces.html" %}
+    </fieldset>
+
     <fieldset>
     <h2>Comparaison salariale</h2>
     <span class="info">dans la région pour les employés occupant un poste similaire</span>
 
       <div id="form-dossier">
         <!-- Wrapper du formulaire de dossier -->
-        {% with forms.dossier as form %}
-            {% include "dae/embauche-dossier.html" %}
-        {% endwith %}
-      </div>
 
-      <fieldset>
-          <h2>Pièces jointes</h2>
-          <p class="info">CV, lettre de motivation...</p>
-          {% include "dae/pieces.html" %}
-      </fieldset>
+<fieldset>
+<h2>Contrat</h2>
+<table>
+    <tbody>
+    <tr>
+        <th rowspan="2">{{ form.type_contrat.label_tag }} :</th>
+        <td colspan="4" rowspan="2">
+            {{ form.type_contrat }}<br />
+            {{ form.type_contrat.errors }}
+        </td>
+        <th>
+         {{ form.remplacement.label_tag }} :
+       </th>
+        <td>
+            {{ form.remplacement }}<br />
+            {{ form.remplacement.errors }}
+        </td>
+    </tr>
+        <th>
+         {{ form.est_cadre.label_tag }} :
+       </th>
+        <td>
+           {{ form.est_cadre }}<br />
+           {{ form.est_cadre.errors }}
+        </td>
+    <tr>
+      
+    </tr>
+    <tr>
+        <th rowspan="2">Durée :</th>
+        <td>du</td>
+        <td>
+            {{ form.contrat_date_debut }}<br />
+            <span class="info">({{form.contrat_date_debut.help_text }})</span><br />
+            {{ form.contrat_date_debut.errors }}
+        </td>
+        <td> au </td>
+        <td>
+            {{ form.contrat_date_fin }}<br />
+            <span class="info">({{form.contrat_date_fin.help_text }})</span><br />
+            {{ form.contrat_date_fin.errors }}
+        </td>
+        <th>{{ form.regime_travail.label_tag }} :<br />{{ form.regime_travail.errors }}</th>
+        <td>
+            {{ form.regime_travail }}
+            <span class="info">{{ form.regime_travail.help_text }}</span>
+        </td>
+    </tr>
+    <tr>
+        <td colspan="4" class="info">
+            <p id="note-duree">Pour une durée indéterminée, spécifier uniquement la date de début.</p>
+        </td>
+        <th>
+            {{ form.regime_travail_nb_heure_semaine.label_tag }} :<br />
+            {{ form.regime_travail_nb_heure_semaine.errors }}
+        </th>
+        <td>{{ form.regime_travail_nb_heure_semaine }}
+            <span class="info">{{ form.regime_travail_nb_heure_semaine.help_text }}</span></td>
+    </tr>
+    <tr>
+        <th>Statut : </th>
+        <td colspan="4">
+            {{ form.statut }}
+            <span class="row">
+            {{ form.statut_residence }}
+            {% if form.statut.errors %}
+                <br />
+                {{ form.statut.errors }}
+            {% endif %}
+            {% if form.statut_residence.errors %}
+                <br />
+                {{ form.statut_residence.errors }}
+            {% endif %}
+            </span>
+        </td>
+        <th>{{ form.organisme_bstg.label_tag }} :</th>
+        <td>
+            {{ form.organisme_bstg }}
+            {% if form.organisme_bstg.errors %}
+                <br />
+                {{ form.organisme_bstg.errors }}
+            {% endif %}
+            <span class="info">{{ form.organisme_bstg.help_text }}</span><br/><br/>
+            {{ form.organisme_bstg_autre }}
+            <span class="info">{{ form.organisme_bstg_autre.help_text }}</span>
+        </td>
+    </tr>
+    <tr>
+        <th></th>
+        <td colspan="4">
+        </td>
+        <th colspan="2">
+       </th>
+    </tr>
+    </tbody>
+</table>
+</fieldset>
+
+<fieldset>
+<h2>Classement et salaire de base</h2>
+<table>
+    <tbody>
+    <tr>
+        <td colspan="7">
+            <h3>Ancien dossier <span class="info">(le cas échéant)</span></h3>
+        </td>
+    </tr>
+    <tr>
+        <td colspan="7">
+            {{ employe }} <span class="info">{{ employe.dossier_set.all.reverse }}</span>
+        </td>
+    </tr>
+    <tr>
+        <th>{{ form.classement_anterieur.label_tag }}</th>
+        <th>{{ form.salaire_anterieur.label_tag }}</th>
+        <th>{{ form.statut_anterieur.label_tag }}</th>
+        <th>{{ form.type_contrat_anterieur.label_tag }}</th>
+        <th colpsan="3"></th>
+    </tr>
+    <tr>
+        <td>{{ form.classement_anterieur }}</td>
+        <td>{{ form.salaire_anterieur  }} {{ form.devise_anterieur }}</td>
+        <td>{{ form.statut_anterieur  }}</td>
+        <td>{{ form.type_contrat_anterieur  }}</td>
+        <td colspan="3"></td>
+    </tr>
+    <tr>
+        <td colspan="7">
+            <h3>Précédent titulaire <span class="info">(le cas échéant)</span></h3>
+        </td>
+    </tr>
+    <tr>
+        <td colspan="7">
+        {% if request.user|test_membre_drh %}
+            {{ form.instance.employe_anterieur }}{{ form.employe_anterieur }}
+        {% else %}
+            {{ form.instance.employe_anterieur }}{{ form.employe_anterieur.as_hidden }}
+        {% endif %}
+            {{ form.employe_anterieur.errors }}
+        </td>
+    </tr>
+    <tr>
+        <th>{{ form.classement_titulaire_anterieur.label_tag }}</th>
+        <th colspan="4">{{ form.salaire_titulaire_anterieur.label_tag }}</th>
+        <th>{{ form.statut_titulaire_anterieur.label_tag }}</th>
+        <th></th>
+    </tr>
+    <tr>
+        {% if request.user|test_membre_drh %}
+            <td>{{ form.instance.classement_titulaire_anterieur }}
+                {{ form.classement_titulaire_anterieur }}<br />
+                {{ form.classement_titulaire_anterieur.errors }}
+            </td>
+            <td>{{ form.instance.salaire_titulaire_anterieur }}{{ form.salaire_titulaire_anterieur }} {{ form.devise_titulaire_anterieur }}</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>{{ form.instance.statut_titulaire_anterieur }}{{ form.statut_titulaire_anterieur }}</td>
+        {% else %}
+            <td>{{ form.instance.classement_titulaire_anterieur }}
+                {{ form.classement_titulaire_anterieur.as_hidden }}<br />
+                {{ form.classement_titulaire_anterieur.errors }}
+            </td>
+            <td>{{ form.instance.salaire_titulaire_anterieur }}{{ form.salaire_titulaire_anterieur.as_hidden }} {{ form.instance.devise_titulaire_anterieur.as_hidden }}</td>
+            <td></td>
+            <td></td>
+            <td></td>
+            <td>{{ form.instance.statut_titulaire_anterieur }}{{ form.statut_titulaire_anterieur.as_hidden }}</td>
+        {% endif %}
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</fieldset>
+</div>
 
       <h2 class="section">SECTION 3 - COÛT GLOBAL</h2>
 
       <fieldset>
-
+       <div>
+          <div class="gauche"><h2>Proposition de classement</h2></div>
+          <div class="gauche">
+            <table class="gauche">
+               <tr>
+                 <th>{{ form.classement.label_tag }}</th>
+                 <th colspan="3">{{ form.salaire.label_tag }}</th>
+               </tr>
+               <tr>
+                 <td>{{ form.classement }}<br />{{ form.classement.errors }}</td>
+                 <td>{{ form.salaire.errors }} {{ form.salaire }} {{ form.devise }}
+                   <span class="info">(fourchette du poste : {{ poste.salaire_min }} {{ poste.devise_min.code }}
+                     - {{ poste.salaire_max }} {{ poste.devise_max.code }})</span>
+                 </td>
+                 <td id="salaire-propose-euros" class="montant"></td>
+                 <td>€</td>
+               </tr>
+               <script type="text/javascript">
+                 /* Changement de classement, on repropose un salaire */
+                 $('#id_classement').change(function() {
+                 loadSalaire();
+                 proposition_comparaison($('#id_devise').val());
+                 });
+                 /* changements, on recalcule */
+                 $('#id_salaire').focusout(function() {proposition_comparaison($('#id_devise').val());});
+                 $('#id_devise').change(function() {proposition_comparaison($('#id_devise').val());});
+                 proposition_comparaison($('#id_devise').val());
+               </script>
+           </table>
+         </div>
+       </div>
       {% include 'dae/embauche-remun.html' %}
 
       <!-- <select id="type-remun" name="type-remun"> -->
       <!-- </select> -->
 
       </fieldset>
+      {% endwith %}
 
       <h2 class="section">SECTION 4 - JUSTIFICATION DE LA DEMANDE (OBLIGATOIRE)</h2>
       <h3>A - Justification du poste</h3>
index 5e09a5e..57c505a 100644 (file)
 </fieldset>
 
 <fieldset>
+<h2>Accès et ouvertures des comptes</h2>
+<table>
+    <tbody>
+    <tr>
+        <th>Compte comptabilité<th>
+        <td>{% if dossier.compte_compta %}oui{% else %}non{% endif %}</td>
+        <th>Compte courriel</th>
+        <td>{% if dossier.compte_courriel %}oui{% else %}non{% endif %}</td>
+    </tr>
+    </tbody>
+</table>
+</fieldset>
+
+<fieldset>
+  <h2>Pièces jointes</h2>
+  <ul>
+    {% for pj in dossier.dae_dossierpieces.all %}
+    <li><a href="{% url dossier_piece pj.id pj.fichier.name|basename %}">{{ pj.nom }}</a></li>
+    {% endfor %}
+  </ul>
+</fieldset>
+
+<fieldset>
 <h2>Comparaison salariale</h2>
 <span class="info">dans la région pour les employés occupant un poste similaire</span>
 <table>
           <th>Implantation</th>
           <th>Employé</th>
           <th>Poste</th>
-          <th>Salaire</th>
-          <th>Salaire EUR</th>
       </tr>
       {% for dc in comparaisons %}
       <tr class="gris-bkg">
           <td>{{ dc.implantation }}</td>
           <td>{{ dc.personne }}</td>
           <td>{{ dc.poste }}</td>
-         <td>{{ dc.montant|floatformat:0 }} {{ dc.devise.code }}</td>
-          <td>{{ dc.montant_euros }} EUR</td>
       </tr>
       {% if dc.dossier_comparaison_remunerations.count > 0 %}
       <tr>
        <td colspan="1">
-         Rémunérations
+         Rémunération
        </td>
-       <td colspan="6">
+       <td colspan="4">
          {% dossier_cmp_remun_form dc %}
        </td>
       </tr>
   {% include "dae/embauche-dossier-consulter.html" %}
 </div>
 
-<fieldset>
-  <h2>Pièces jointes</h2>
-  <ul>
-    {% for pj in dossier.dae_dossierpieces.all %}
-    <li><a href="{% url dossier_piece pj.id pj.fichier.name|basename %}">{{ pj.nom }}</a></li>
-    {% endfor %}
-  </ul>
-
-</fieldset>
-
 <h2 class="section">SECTION 3 - COÛT GLOBAL</h2>
 
 <fieldset>
+<h2>Proposition de classement</h2>
+<table>
+    <tbody>
+    <tr>
+        <th>Classement proposé</th>
+        <th colspan="6">Salaire proposé</span></th>
+    </tr>
+    <tr>
+        <td>{{ dossier.classement }}</td>
+        <td colspan="2">{{ dossier.salaire|floatformat:0 }} {{ dossier.devise.code }}</td>
+        <td colspan="4" id="salaire-propose-euros" class="montant">{{ dossier.get_salaire_euros|floatformat:0 }} €</td>
+    </tr>
+    </tbody>
+</table>
+
   {% remun_form dossier %}
   {% comment %}
   <!-- <table cellspacing="0" id="global-cost"> -->
 <tr>
   <td>
     <h4>{{ dossier.justif_nouveau_statut_label }}</h4>
-    <p>{{ dossier.justif_nouveau_statut|default:"∅" }}
+    <p>{{ dossier.justif_nouveau_statut|default:"&#8709;" }}
     <h4>{{ dossier.justif_nouveau_tmp_remplacement_label }}</h4>
-    <p>{{ dossier.justif_nouveau_tmp_remplacement|default:"∅" }}</p>
+    <p>{{ dossier.justif_nouveau_tmp_remplacement|default:"&#8709;" }}</p>
     <h4>{{ dossier.justif_nouveau_salaire_label }}</h4>
-    <p>{{ dossier.justif_nouveau_salaire|default:"∅" }}</p>
+    <p>{{ dossier.justif_nouveau_salaire|default:"&#8709;" }}</p>
     <h4>{{ dossier.justif_nouveau_commentaire_label }}</h4>
-    <p>{{ dossier.justif_nouveau_commentaire|default:"∅" }}</p>
+    <p>{{ dossier.justif_nouveau_commentaire|default:"&#8709;" }}</p>
   </td>
   <td>
     <h4>{{ dossier.justif_rempl_type_contrat_label }}</h4>
-    <p>{{ dossier.justif_rempl_type_contrat|default:"∅"}}</p>
+    <p>{{ dossier.justif_rempl_type_contrat|default:"&#8709;"}}</p>
     <h4>{{ dossier.justif_rempl_statut_employe_label }}</h4>
-    <p>{{ dossier.justif_rempl_statut_employe|default:"∅"}}</p>
+    <p>{{ dossier.justif_rempl_statut_employe|default:"&#8709;"}}</p>
     <h4>{{ dossier.justif_rempl_evaluation_label }}</h4>
-    <p>{{ dossier.justif_rempl_evaluation|default:"∅"}}</p>
+    <p>{{ dossier.justif_rempl_evaluation|default:"&#8709;"}}</p>
     <h4>{{ dossier.justif_rempl_salaire_label }}</h4>
-    <p>{{ dossier.justif_rempl_salaire|default:"∅" }}</p>
+    <p>{{ dossier.justif_rempl_salaire|default:"&#8709;" }}</p>
     <h4>{{ dossier.justif_rempl_commentaire_label }}</h4>
-    <p>{{ dossier.justif_rempl_commentaire|default:"∅" }}</p>
+    <p>{{ dossier.justif_rempl_commentaire|default:"&#8709;" }}</p>
   </td>
 </tr>
 </table>
index 0b5387e..a137956 100644 (file)
       <th>Échelon AUF</th>
       <td colspan="2">{{ poste.classement_min }}</td>
       <td colspan="2">{{ poste.classement_max }}</td>
+    </tr> 
+    <tr>
+      <th colspan="5">
+       Traitement
+      </th>
     </tr>
     <tr>
       <td class="spaced" >Salaire de base</td>
       </td>
     </tr>
     <tr>
+      <td class="spaced">Indem. de fonction</td>
+      <td class="montant">{{ poste.indemn_fct_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_fct_min|euros:poste.devise_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_fct_max|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_fct_max|euros:poste.devise_max|floatformat:0 }}</td>
+    </tr>
+    <tr>
+      <td class="spaced">Sous-total</td>
+      <td class="montant">
+        {{ poste.traitement_min_cad|floatformat:0 }}
+      </td>
+      <td class="montant">
+        {{ poste.traitement_min_cad|euros:poste.devise_min|floatformat:0 }}
+      </td>
+      <td class="montant">
+        {{ poste.traitement_max_cad|floatformat:0 }}
+      </td>
+      <td class="montant">
+        {{ poste.traitement_max_cad|euros:poste.devise_min|floatformat:0 }}
+      </td>
+    </tr>
+    <tr>
+      <th colspan="5">
+       Indemnités autres
+      </th>
+    </tr>
+    <tr>
       <td class="spaced">Indem. d'expatriation</td>
       <td class="montant">{{ poste.indemn_expat_min|floatformat:0 }}</td>
       <td class="montant">{{ poste.indemn_expat_min|euros:poste.devise_min|floatformat:0 }}</td>
       <td class="montant">{{ poste.indemn_expat_max|euros:poste.devise_max|floatformat:0 }}</td>
     </tr>
     <tr>
-      <td class="spaced">Indem. de fonction</td>
-      <td class="montant">{{ poste.indemn_fct_min|floatformat:0 }}</td>
-      <td class="montant">{{ poste.indemn_fct_min|euros:poste.devise_min|floatformat:0 }}</td>
-      <td class="montant">{{ poste.indemn_fct_max|floatformat:0 }}</td>
-      <td class="montant">{{ poste.indemn_fct_max|euros:poste.devise_max|floatformat:0 }}</td>
+      <td class="spaced">Sous-total</td>
+      <td class="montant">{{ poste.indemn_expat_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_expat_min|euros:poste.devise_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_expat_max|floatformat:0 }}</td>
+      <td class="montant">{{ poste.indemn_expat_max|euros:poste.devise_max|floatformat:0 }}</td>
+    </tr>
+    <tr>
+      <th colspan="5">
+       Charges patronales
+      </th>
     </tr>
     <tr>
       <td class="spaced">Charges patronales</td>
       <td class="montant">{{ poste.charges_patronales_max|euros:poste.devise_max|floatformat:0 }}</td>
     </tr>
     <tr>
+      <td class="spaced">Sous-total</td>
+      <td class="montant">{{ poste.charges_patronales_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.charges_patronales_min|euros:poste.devise_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.charges_patronales_max|floatformat:0 }}</td>
+      <td class="montant">{{ poste.charges_patronales_max|euros:poste.devise_max|floatformat:0 }}</td>
+    </tr>
+    <tr>
+      <th colspan="5">
+       Autres
+      </th>
+    </tr>
+    <tr>
       <td class="spaced">Autres</td>
       <td class="montant">{{ poste.autre_min|floatformat:0 }}</td>
       <td class="montant">{{ poste.autre_min|euros:poste.devise_min|floatformat:0 }}</td>
       <td class="montant">{{ poste.autre_max|floatformat:0 }}</td>
       <td class="montant">{{ poste.autre_max|euros:poste.devise_max|floatformat:0 }}</td>
     </tr>
+    <tr>
+      <td class="spaced">Sous-total</td>
+      <td class="montant">{{ poste.autre_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.autre_min|euros:poste.devise_min|floatformat:0 }}</td>
+      <td class="montant">{{ poste.autre_max|floatformat:0 }}</td>
+      <td class="montant">{{ poste.autre_max|euros:poste.devise_max|floatformat:0 }}</td>
+    </tr>
     <tr class="total-row" >
       <th>TOTAL</th>
       <td class="montant">{{ poste.get_couts_minimum|floatformat:0 }}</td>
         <th>Statut</th>
         <th>Poste</th>
         <th>Implantation</th>
-        <th>Rémunération totale sans les charges patronales</th>
-        <th>EUR</th>
     </tr>
     {% for poste_connexe in comparaisons_internes.all %}
     <tr>
         <td>{{ poste_connexe.statut }}</td>
         <td>{{ poste_connexe.nom }}</td>
         <td>{{ poste_connexe.implantation }}</td>
-        <td>{{ poste_connexe.montant|floatformat:0 }} {{ poste_connexe.devise.code }}</td>
-        <td>{{ poste_connexe.montant_euros }} €</td>
     </tr>
       {% if poste_connexe.poste_comparaison_remunerations.count > 0 %}
       <tr>
-       <td colspan="1">
-         Rémunérations
+       <td>
+         Rémunération
        </td>
-       <td colspan="6">
+       <td colspan="3">
          {% poste_cmp_remun_form poste_connexe %}
        </td>
       </tr>
index 08088b3..0e50e5e 100644 (file)
@@ -16,6 +16,7 @@ from project.dae.forms import (
     ReadOnlyRemunFormSet,
     PosteCompReadOnlyRemunFormSet,
     DossierCompReadOnlyRemunFormSet,
+    RHReadOnlyRemunFormSet,
     )
 from project.dae import models as dae
 from project.rh import models as rh
@@ -132,7 +133,7 @@ def dossier_cmp_remun_form(context, dossier_cmp):
 
 
 @register.inclusion_tag('dae/embauche-remun.html', takes_context=True)
-def rh_remun_form_for_year(context, dossier, year):
+def rh_remun_form_for_year(context, dossier, year=None):
 
     fs = remun_formset_factory_factory(
         read_only=True,
@@ -140,7 +141,13 @@ def rh_remun_form_for_year(context, dossier, year):
         model=rh.Remuneration,
         )
 
-    def _get_qs(inst):
+    year = year or (
+        dossier.date_fin.year if
+        dossier.date_fin else
+        datetime.date.today().year)
+
+    def _get_qs(inst, year=year):
+
         year_start = datetime.date(year, 1, 1)
         year_end = datetime.date(year, 12, 31)
         qs = inst.model.objects.filter(
@@ -151,7 +158,7 @@ def rh_remun_form_for_year(context, dossier, year):
                 Q(date_debut__isnull=True, date_fin__isnull=True)
                 ))
         return qs
-        
+
     fs.get_queryset = _get_qs
 
     return {
diff --git a/project/rh/migrations/0046_auto__add_field_rhdossierclassementrecord_commentaire.py b/project/rh/migrations/0046_auto__add_field_rhdossierclassementrecord_commentaire.py
new file mode 100644 (file)
index 0000000..4aedefb
--- /dev/null
@@ -0,0 +1,531 @@
+# -*- coding: 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 'RHDossierClassementRecord.commentaire'
+        db.add_column('rh_rhdossierclassementrecord', 'commentaire',
+                      self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True),
+                      keep_default=False)
+
+
+    def backwards(self, orm):
+        # Deleting field 'RHDossierClassementRecord.commentaire'
+        db.delete_column('rh_rhdossierclassementrecord', 'commentaire')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", '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'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", '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'})
+        },
+        'references.bureau': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Bureau', 'db_table': "u'ref_bureau'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.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['references.Region']", 'db_column': "'region'"})
+        },
+        'references.employe': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Employe', 'db_table': "u'ref_employe'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'courriel': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'fonction': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '3'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lieu_travail_theorique_de'", 'db_column': "'implantation'", 'to': "orm['references.Implantation']"}),
+            'implantation_physique': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'lieu_travail_reel_de'", 'db_column': "'implantation_physique'", 'to': "orm['references.Implantation']"}),
+            'mandat_debut': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'mandat_fin': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste_type_1': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste_type_1'", 'null': 'True', 'db_column': "'poste_type_1'", 'to': "orm['references.PosteType']"}),
+            'poste_type_2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'poste_type_2'", 'null': 'True', 'db_column': "'poste_type_2'", 'to': "orm['references.PosteType']"}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'responsable_de'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['references.Employe']"}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.Service']", 'db_column': "'service'"}),
+            'telephone_ip': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'telephone_ip_nomade': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'telephone_poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
+        },
+        'references.implantation': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Implantation', 'db_table': "u'ref_implantation'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': '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['references.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['references.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['references.Implantation']", 'db_column': "'bureau_rattachement'"}),
+            'code_meteo': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'courriel': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'courriel_interne': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'date_extension': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_fermeture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_inauguration': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_ouverture': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'fax': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'fax_interne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'fuseau_horaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'hebergement_convention': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'hebergement_convention_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'hebergement_etablissement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'modif_date': ('django.db.models.fields.DateField', [], {}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_court': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+            'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.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'}),
+            'zone_administrative': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.ZoneAdministrative']"})
+        },
+        'references.pays': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Pays', 'db_table': "u'ref_pays'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'}),
+            'code_bureau': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.Bureau']", 'to_field': "'code'", 'null': 'True', 'db_column': "'code_bureau'", 'blank': 'True'}),
+            'code_iso3': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}),
+            'developpement': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'monnaie': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nord_sud': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'region': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['references.Region']", 'db_column': "'region'"})
+        },
+        'references.postetype': {
+            'Meta': {'object_name': 'PosteType', 'db_table': "u'ref_poste_type'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'references.region': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Region', 'db_table': "u'ref_region'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation_bureau': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'gere_region'", 'null': 'True', 'db_column': "'implantation_bureau'", 'to': "orm['references.Implantation']"}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
+        },
+        'references.service': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Service', 'db_table': "u'ref_service'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'references.zoneadministrative': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'ZoneAdministrative', 'db_table': "'ref_zoneadministrative'", 'managed': 'False'},
+            'actif': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'code': ('django.db.models.fields.CharField', [], {'max_length': '4', 'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'reversion.revision': {
+            'Meta': {'object_name': 'Revision'},
+            'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manager_slug': ('django.db.models.fields.CharField', [], {'default': "'default'", 'max_length': '200', 'db_index': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'rh.ayantdroit': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'AyantDroit'},
+            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lien_parente': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ayantdroits_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['references.Pays']", 'blank': 'True', 'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'prenom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.ayantdroitcommentaire': {
+            'Meta': {'ordering': "['-date_creation']", 'object_name': 'AyantDroitCommentaire'},
+            'ayant_droit': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'commentaires'", 'db_column': "'ayant_droit'", 'to': "orm['rh.AyantDroit']"}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {})
+        },
+        'rh.categorieemploi': {
+            'Meta': {'ordering': "('nom',)", 'object_name': 'CategorieEmploi'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.changementpersonnel': {
+            'Meta': {'object_name': 'ChangementPersonnel'},
+            'communique': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'date_communication': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'mouvements'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
+            'valide': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+        },
+        'rh.changementpersonnelnotifications': {
+            'Meta': {'object_name': 'ChangementPersonnelNotifications'},
+            'destinataires': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'changement_notifications'", 'symmetrical': 'False', 'to': "orm['references.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2'})
+        },
+        'rh.classement': {
+            'Meta': {'ordering': "['type', 'echelon', 'degre', 'coefficient']", 'object_name': 'Classement'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'coefficient': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
+            'commentaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'degre': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'echelon': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
+        },
+        'rh.contrat': {
+            'Meta': {'ordering': "['dossier__employe__nom']", 'object_name': 'Contrat'},
+            'date_debut': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_contrats'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'type_contrat': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type_contrat'", 'to': "orm['rh.TypeContrat']"})
+        },
+        'rh.devise': {
+            'Meta': {'ordering': "['code']", 'object_name': 'Devise'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.dossier': {
+            'Meta': {'ordering': "['employe__nom']", 'object_name': 'Dossier'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement'", 'to': "orm['rh.Classement']"}),
+            'compte_compta': ('django.db.models.fields.CharField', [], {'default': "'aucun'", 'max_length': '10'}),
+            'compte_courriel': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'db_index': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'est_cadre': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'organisme_bstg': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'organisme_bstg'", 'to': "orm['rh.OrganismeBstg']"}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossiers'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'principal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'remplacement': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'remplacement_de': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Dossier']"}),
+            'statut': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Statut']"}),
+            'statut_residence': ('django.db.models.fields.CharField', [], {'default': "'local'", 'max_length': '10', 'null': 'True'})
+        },
+        'rh.dossiercommentaire': {
+            'Meta': {'ordering': "['-date_creation']", 'object_name': 'DossierCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'commentaires'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {})
+        },
+        'rh.dossiercomparaison': {
+            'Meta': {'object_name': 'DossierComparaison'},
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_comparaisons'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['references.Implantation']"}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'personne': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'})
+        },
+        'rh.dossierpiece': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'DossierPiece'},
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_dossierpieces'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.employe': {
+            'Meta': {'ordering': "['nom', 'prenom']", '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'}),
+            'courriel_perso': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'date_entree': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'genre': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nationalite': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes_nationalite'", 'db_column': "'nationalite'", 'to_field': "'code'", 'to': "orm['references.Pays']", 'blank': 'True', 'null': 'True'}),
+            'nb_postes': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_affichage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'employes'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['references.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.employecommentaire': {
+            'Meta': {'object_name': 'EmployeCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'commentaires'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'texte': ('django.db.models.fields.TextField', [], {})
+        },
+        'rh.employepiece': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'EmployePiece'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pieces'", 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.familleprofessionnelle': {
+            'Meta': {'ordering': "('nom',)", 'object_name': 'FamilleProfessionnelle'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'rh.modificationtraite': {
+            'Meta': {'object_name': 'ModificationTraite'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'revision': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['reversion.Revision']"})
+        },
+        'rh.organismebstg': {
+            'Meta': {'ordering': "['type', 'nom']", 'object_name': 'OrganismeBstg'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'pays': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'organismes_bstg'", 'db_column': "'pays'", 'to_field': "'code'", 'to': "orm['references.Pays']", 'blank': 'True', 'null': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '10'})
+        },
+        'rh.poste': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Poste'},
+            'appel': ('django.db.models.fields.CharField', [], {'default': "'interne'", 'max_length': '10', 'null': 'True'}),
+            'autre_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'autre_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'classement_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_max'", 'to': "orm['rh.Classement']"}),
+            'classement_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'classement_min'", 'to': "orm['rh.Classement']"}),
+            'comp_autre_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_autre_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_fonctionpub_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_locale_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_ong_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_max': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'comp_universite_min': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'devise_comparaison': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'devise_comparaison'", 'to': "orm['rh.Devise']"}),
+            'devise_max': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_max'", 'to': "orm['rh.Devise']"}),
+            'devise_min': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'devise_min'", 'to': "orm['rh.Devise']"}),
+            'expatrie': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'implantation'", 'to': "orm['references.Implantation']"}),
+            'indemn_max': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'indemn_min': ('django.db.models.fields.DecimalField', [], {'default': '0', 'max_digits': '12', 'decimal_places': '2'}),
+            'justification': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'local': ('django.db.models.fields.NullBooleanField', [], {'default': 'True', 'null': 'True', 'blank': 'True'}),
+            'mise_a_disposition': ('django.db.models.fields.NullBooleanField', [], {'default': 'False', 'null': 'True', 'blank': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
+            'regime_travail': ('django.db.models.fields.DecimalField', [], {'default': "'100.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'regime_travail_nb_heure_semaine': ('django.db.models.fields.DecimalField', [], {'default': "'35.00'", 'null': 'True', 'max_digits': '12', 'decimal_places': '2'}),
+            'responsable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'responsable'", 'to': "orm['rh.Poste']"}),
+            'salaire_max': ('django.db.models.fields.DecimalField', [], {'default': '0', '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': "'rh_postes'", 'null': 'True', 'db_column': "'service'", 'to': "orm['rh.Service']"}),
+            'type_poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'db_column': "'type_poste'", 'to': "orm['rh.TypePoste']"}),
+            'vacant': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+            'valeur_point_max': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_max'", 'to': "orm['rh.ValeurPoint']"}),
+            'valeur_point_min': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'valeur_point_min'", 'to': "orm['rh.ValeurPoint']"})
+        },
+        'rh.postecommentaire': {
+            'Meta': {'ordering': "['-date_creation']", 'object_name': 'PosteCommentaire'},
+            'date_creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'owner'", 'to': "orm['auth.User']"}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'commentaires'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'texte': ('django.db.models.fields.TextField', [], {})
+        },
+        'rh.postecomparaison': {
+            'Meta': {'object_name': 'PosteComparaison'},
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['rh.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['references.Implantation']"}),
+            'montant': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_comparaisons_internes'", 'to': "orm['rh.Poste']"})
+        },
+        'rh.postefinancement': {
+            'Meta': {'ordering': "['type']", 'object_name': 'PosteFinancement'},
+            'commentaire': ('django.db.models.fields.TextField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_financements'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"}),
+            'pourcentage': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '2'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+        },
+        'rh.postepiece': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'PostePiece'},
+            'fichier': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'poste': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_pieces'", 'db_column': "'poste'", 'to': "orm['rh.Poste']"})
+        },
+        'rh.remuneration': {
+            'Meta': {'object_name': 'Remuneration'},
+            'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_remunerations'", 'db_column': "'dossier'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'montant': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '12', 'decimal_places': '2', 'blank': 'True'}),
+            'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'type'", 'to': "orm['rh.TypeRemuneration']"}),
+            'type_revalorisation': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'type_revalorisation'", 'to': "orm['rh.TypeRevalorisation']"})
+        },
+        'rh.responsableimplantation': {
+            'Meta': {'ordering': "['implantation__nom']", 'object_name': 'ResponsableImplantation'},
+            'employe': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'db_column': "'employe'", 'to': "orm['rh.Employe']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'responsable'", 'unique': 'True', 'db_column': "'implantation'", 'to': "orm['references.Implantation']"})
+        },
+        'rh.rhdossierclassementrecord': {
+            'Meta': {'object_name': 'RHDossierClassementRecord'},
+            'classement': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'classement_records'", 'to': "orm['rh.Classement']"}),
+            'commentaire': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'date_debut': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'date_fin': ('django.db.models.fields.DateField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'dossier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'classement_records'", 'to': "orm['rh.Dossier']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'rh.service': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'Service'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.statut': {
+            'Meta': {'ordering': "['code']", 'object_name': 'Statut'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '25'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.tauxchange': {
+            'Meta': {'ordering': "['-annee', 'devise__code']", 'unique_together': "(('devise', 'annee'),)", 'object_name': 'TauxChange'},
+            'annee': ('django.db.models.fields.IntegerField', [], {}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rh.Devise']", 'db_column': "'devise'"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'taux': ('django.db.models.fields.FloatField', [], {})
+        },
+        'rh.typecontrat': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'TypeContrat'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_long': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.typeposte': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'TypePoste'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'categorie_emploi': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'categorie_emploi'", 'to': "orm['rh.CategorieEmploi']"}),
+            'famille_professionnelle': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'types_de_poste'", 'null': 'True', 'to': "orm['rh.FamilleProfessionnelle']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_responsable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'nom_feminin': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.typeremuneration': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'TypeRemuneration'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nature_remuneration': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'type_paiement': ('django.db.models.fields.CharField', [], {'max_length': '30'})
+        },
+        'rh.typerevalorisation': {
+            'Meta': {'ordering': "['nom']", 'object_name': 'TypeRevalorisation'},
+            'archive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'nom': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'rh.userprofile': {
+            'Meta': {'object_name': 'UserProfile'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}),
+            'zones_administratives': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'profiles'", 'symmetrical': 'False', 'to': "orm['references.ZoneAdministrative']"})
+        },
+        'rh.valeurpoint': {
+            'Meta': {'ordering': "['-annee', 'implantation__nom']", 'unique_together': "(('implantation', 'annee'),)", 'object_name': 'ValeurPoint'},
+            'annee': ('django.db.models.fields.IntegerField', [], {}),
+            'devise': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'db_column': "'devise'", 'to': "orm['rh.Devise']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'implantation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rh_valeur_point'", 'db_column': "'implantation'", 'to': "orm['references.Implantation']"}),
+            'valeur': ('django.db.models.fields.FloatField', [], {'null': 'True'})
+        }
+    }
+
+    complete_apps = ['rh']
\ No newline at end of file
index 9b2af7a..fc857d4 100644 (file)
@@ -554,6 +554,18 @@ class Employe(models.Model):
     def __unicode__(self):
         return u'%s %s [%s]' % (self.nom.upper(), self.prenom, self.id)
 
+    def get_latest_dossier_ordered_by_date_fin_and_principal(self):
+        res = self.rh_dossiers.order_by(
+            '-principal', 'date_fin')
+
+        # Retourne en le premier du queryset si la date de fin est None
+        # Sinon, retourne le plus récent selon la date de fin.
+        first = res[0]
+        if first.date_fin == None:
+            return first
+        else:
+            return res.order_by('-principal', '-date_fin')[0]
+
     def civilite(self):
         civilite = u''
         if self.genre.upper() == u'M':
@@ -1139,6 +1151,12 @@ class RHDossierClassementRecord(models.Model):
         blank=True,
         db_index=True
     )
+    commentaire = models.CharField(
+        max_length=2048,
+        blank=True,
+        null=True,
+        default='',
+        )
 
     def __unicode__(self):
         return self.classement.__unicode__()
@@ -1532,7 +1550,7 @@ TYPE_PAIEMENT_CHOICES = (
 )
 
 NATURE_REMUNERATION_CHOICES = (
-    (u'Traitement', u'Traitements'),
+    (u'Traitement', u'Traitement'),
     (u'Indemnité', u'Indemnités autres'),
     (u'Charges', u'Charges patronales'),
     (u'Accessoire', u'Accessoires'),
@@ -1978,6 +1996,7 @@ class ChangementPersonnel(models.Model):
             id=instance.id)
         dd = instance.date_debut
         df = instance.date_fin
+        today = date.today()
        
         # Here, verify differences between the instance, before and
         # after the save.
@@ -2003,8 +2022,7 @@ class ChangementPersonnel(models.Model):
                 Q(date_fin__gte=dd - NEW_EMPLOYE_THRESHOLD)
                 )
 
-            # 1. If existe un Dossier récent, et c'est une nouvelle
-            # instance de Dossier:
+            # 1. If existe un Dossier récent
             if exists_recent_file_qs.count() > 0:
                 cls.create_changement(
                     instance,
@@ -2017,7 +2035,16 @@ class ChangementPersonnel(models.Model):
                     instance,
                     'NO',
                     )
-                
+
+        elif not df and not created and cls.objects.filter(
+            valide=True,
+            date_creation__gte=today - NEW_EMPLOYE_THRESHOLD,
+            type='DE',
+            ).count() > 0:
+            cls.create_changement(
+                instance,
+                'MO',
+                )
 
         # Date de fin a été modifiée:
         if df_has_changed: