fix redirection dans la liste si on choisi nouveau poste, on ne fait rien
[auf_rh_dae.git] / project / media / js / dae-poste.js
index 31b4179..e471611 100644 (file)
@@ -2,8 +2,28 @@
 *          POSTE
 *******************************************************************************/
 
+
+function elements_comparaison(devise_id) {
+  var chargement_devise = $.getJSON("/dae/devise/code", {'devise': devise_id});
+  chargement_devise.success(function(data) {
+       /*       data.devise
+              data.taux_euro
+              data.devise_code */
+      $('#elements-comparaison input').each(function() {
+        var input = $(this);
+        var montant = data.taux_euro * parseFloat(input.val());
+        input.parent().find(".devise_euro").html(clean_float(montant) + " EUR");
+        input.parent().find(".devise").html(data.devise_code);
+      });
+  });
+  chargement_devise.error(function(data) {
+      alert(data.responseText);
+  });
+}
+
 /*  filter les postes en fonction de l'implantation choisie */
 function charger_postes(implantation_id) {
+    var selected = $("#id_poste :selected").val();
     var params = {'implantation_id' : implantation_id};
     var chargement_p = $.getJSON('/dae/liste_postes', params);
     chargement_p.success(function(data) {
@@ -11,7 +31,10 @@ function charger_postes(implantation_id) {
 
         var options = "";
         $.each(data, function(index) {
-            options += '<option value="' + data[index][0] + '">' + data[index][1] + '</option>';
+            select = "";
+            if (data[index][0] == selected)
+                select = " selected=selected ";
+            options += '<option ' + select + ' value="' + data[index][0] + '">' + data[index][1] + '</option>';
         });
 
         $("#id_poste").html(options);
@@ -32,21 +55,37 @@ function charger_valeurs_point(implantation_id) {
 
         $("#id_valeur_point_min").html(options);
         $("#id_valeur_point_max").html(options);
-        alert("Les valeurs de point on été ajustées en fonction de cette implantation.");
+        alert("Les valeurs de point et les postes ont été ajustés en fonction de cette implantation.");
     });
 }
 
 /* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
 est appelée À chaque modification du formulaire de classement. */
 function recalculer_ligne(element) {
+    /* on laisse la possibilité de choisir le salaire manuellement,
+       la réinitialisation du salaire de base s'opère dès qu'on choisi
+       un nouveau classement. */
+    if (element.attr('id').match('id_classement*'))
+        salaire_manuel = false;
+    else
+        salaire_manuel = true;
+
     var ligne = element.parents("tr");
     var inputs = ligne.find("input, select");
     var salaire_input;
+    var salaire;
     var valeur_point_input;
+    var classement_id;
+    var indemn_expat;
+    var indemn_fct;
+    var charges_patronales;
+    var autre;
+
     inputs.each(function() {
         var input = $(this);
-        if (input.attr('id').match('id_coefficient*')) {
-            coeff = clean_float(input.val())
+
+        if (input.attr('id').match('id_classement*')) {
+            classement_id = input.val();
         }
         if (input.attr('id').match('id_valeur_point*')) {
             valeur_point_input = input;
@@ -55,8 +94,14 @@ function recalculer_ligne(element) {
             salaire_input = input;
             salaire = clean_float(input.val())
         }
-        if (input.attr('id').match('id_indemn*')) {
-            indemn = clean_float(input.val())
+        if (input.attr('id').match('id_indemn_expat*')) {
+            indemn_expat = clean_float(input.val())
+        }
+        if (input.attr('id').match('id_indemn_fct*')) {
+            indemn_fct = clean_float(input.val())
+        }
+        if (input.attr('id').match('id_charges_patronales*')) {
+            charges_patronales = clean_float(input.val())
         }
         if (input.attr('id').match('id_autre*')) {
             autre = clean_float(input.val())
@@ -64,35 +109,65 @@ function recalculer_ligne(element) {
 
     });
 
-    /* on suggère un salaire de base en fonction du coefficient et de la valeur du point */
-    valeur_point_text = valeur_point_input.find(":selected").text();
-    if (valeur_point_text == "")
-        valeur_point = 0;
-    else
-        valeur_point = clean_float(valeur_point_text.split(" ")[0]);
-
-    salaire = clean_float(valeur_point * coeff);
-    salaire_input.val(salaire);
+    var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement_id});
+    chargement_coeff.success(function(data){
+        coeff = data.coefficient;
 
-    taux_euro = clean_float(ligne.find(".taux").html())
-    total = 0;
-    total = salaire + indemn + autre;
-    total_euro = total * taux_euro;
+        /* on suggère un salaire de base en fonction du coefficient et de la valeur du point */
+        valeur_point_text = valeur_point_input.find(":selected").text();
+        if (valeur_point_text == "")
+            valeur_point = 0;
+        else
+            valeur_point = clean_float(valeur_point_text.split(" ")[0]);
+        
+        if (salaire_manuel == false) {
+            salaire = clean_float(valeur_point * coeff);
+            salaire_input.val(salaire);
+        }
+        taux_euro = parseFloat(ligne.find(".taux").html())
+        total = 0;
+        total = salaire + indemn_expat + indemn_fct + charges_patronales + autre;
+        total_euro = total * taux_euro;
 
-    ligne.find(".total-devise").text(total.toFixed(2));
-    ligne.find(".total-euro").text(total_euro.toFixed(2));
+        ligne.find(".total-devise").text(clean_float(total));
+        ligne.find(".total-euro").text(clean_float(total_euro));
+    });
 
 }
 
 /* recalcule tout le classement */
 function recalculer_tout() {
-    $("#classement tr *[name*=devise]").each(function() {
+    $("#classement tr *[name*=salaire]").each(function() {
         recalculer_ligne($(this));
     });
 }
 
+function setup_taux_ligne(element) {
+  var input = element;
+  var ligne = input.parents("tr");
+  var chargement_devise = $.getJSON("/dae/devise/code", {'devise': input.val()});
+  chargement_devise.success(function(data) {
+      ligne.find(".taux").text(data.taux_euro)
+      ligne.find(".devise_code").text(data.devise_code)
+      recalculer_ligne(input);
+  });
+  chargement_devise.error(function(data) {
+      alert(data.responseText);
+      ligne.find(".taux").text(0)
+      ligne.find(".devise_code").text("???")
+  });
+}
+
 $(document).ready(function() {
 
+    /* Lorsqu'on choisit un poste dans la liste on recharge la page avec le
+    poste chargé dans la view (grâce à son id dans l'URL).*/
+    $('#id_poste').change(function() {
+        var id_poste = $(this).val();
+        if (id_poste)
+            window.location = '/dae/poste/' + id_poste;
+    });
+
     /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
     sélectionnée.
     Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
@@ -105,6 +180,9 @@ $(document).ready(function() {
 
 
     $('#id_valeur_point_min, #id_valeur_point_max').change(function(e) {
+        // pas de traitement si aucune valeur de point n'est choisie
+        if (this.value == '') return;
+
         var vp_input = $(this);
         var ligne = vp_input.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
 
@@ -136,51 +214,60 @@ $(document).ready(function() {
     });
 
     $('#id_devise_min, #id_devise_max').change(function(e) {
-        var input = $(this);
-        var ligne = input.parents("tr");
-        var chargement_devise = $.getJSON("/dae/devise/code", {'devise': this.value});
-        chargement_devise.success(function(data) {
-            ligne.find(".taux").text(data.taux_euro)
-            ligne.find(".devise_code").text(data.devise_code)
-            recalculer_ligne(input);
-        });
-        chargement_devise.error(function(data) {
-            alert(data.responseText);
-            ligne.find(".taux").text(0)
-            ligne.find(".devise_code").text("???")
-        });
-
-    });
-
-    $('#id_classement_min, #id_classement_max').change(function(e) {
-        var classement = $(this);
-        var ligne = classement.parents("tr");
-        var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement.val()});
-        chargement_coeff.success(function(data){
-            var inputs = ligne.find("input");
-            inputs.each(function() {
-                var input = $(this);
-                if (input.attr('id').match('id_coefficient*'))
-                    input.val(data.coefficient);
-            });
-            recalculer_ligne(classement);
-        });
-        chargement_coeff.error(function(data){
-        });
+        setup_taux_ligne($(this));
     });
 
-    /* refresh des totaux à chaque changement quelconque */
-    $('#classement input, #classement select').change(function() {
+    $('#id_classement_min, #id_classement_max, #classement input, #classement select').change(function(e) {
         recalculer_ligne($(this));
     });
-    
+
     /* au chargement, on calcule tout */
-    recalculer_tout();
+    $('#id_devise_min, #id_devise_max').each(function() {
+        setup_taux_ligne($(this));
+    });
+    // le setup de la devise par ligne est déjà suivi d'un recalcul de la ligne automatique
+    //recalculer_tout();
 
     /* calcul de la différence en mois */
     $("#id_date_debut, #id_date_fin").focusout(function() {
         contrat_mois();
     });
     contrat_mois();
+    
+    /* on charge les postes reliés à cette implantation */
+    charger_postes($("#id_implantation :selected").val());
+
+    $('#id_devise_comparaison, #elements-comparaison input').change(function(e) {
+        elements_comparaison($('#id_devise_comparaison').val());
+    });
+    elements_comparaison($('#id_devise_comparaison').val());
+
+    /* Traitement de la recherche AJAX pour les postes de comparaison */
+    $(".comparaison-interne .results_on_deck").bind('added', function() {
+        /* récupération du choix dans la liste */
+        var input_id = $(this).attr('id').replace('_on_deck', '');
+        var prefix_poste_connexe = $(this).attr('id').replace('recherche_on_deck', '');
+        var input = $('#'+input_id);
+        var poste_id = input.val();
+
+        /* interrogation par AJAX pour récupérer les données du poste */
+        var chargement_poste = $.getJSON("/dae/poste_resume/" + poste_id);
+        chargement_poste.success(function(data) {
+            $('#' + prefix_poste_connexe + 'implantation').val(data['implantation']);
+            $('#' + prefix_poste_connexe + 'nom').val(data['poste']);
+            $('#' + prefix_poste_connexe + 'montant').val(data['montant']);
+            $('#' + prefix_poste_connexe + 'devise').val(data['devise']);
+            $('#' + prefix_poste_connexe + 'montant_euros').val(data['montant_euros']);
+        });
+        chargement_poste.error(function(data) {
+            alert(data.responseText);
+        });
+        
+        /* on ne veut pas afficher la personne en-dessous */
+        $(this).find('div').remove();
+        input.val('');
+
+    });
+
 
 });