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 320f508..e471611 100644 (file)
@@ -2,6 +2,25 @@
 *          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();
@@ -43,14 +62,30 @@ function charger_valeurs_point(implantation_id) {
 /* 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;
@@ -59,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())
@@ -68,39 +109,63 @@ 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() {
-        window.location = '/dae/poste/' + $(this).val();
+        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é
@@ -115,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!
 
@@ -146,46 +214,19 @@ $(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("???")
-        });
-
+        setup_taux_ligne($(this));
     });
 
-    $('#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){
-        });
-    });
-
-    /* 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() {
@@ -196,4 +237,37 @@ $(document).ready(function() {
     /* 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('');
+
+    });
+
+
 });