ergo
[auf_rh_dae.git] / project / media / js / dae.js
CommitLineData
f87fe1a1
OL
1/* string to float */
2function clean_float(value){
86f1e48d 3 if (isNaN(value) || value == undefined)
f87fe1a1
OL
4 output = 0;
5 else
6 output = parseFloat(value);
7 output = Math.round(output*100)/100;
8 return output;
9}
10
26b327fa 11/* Construction dynamique des valeurs de point en fonction de l'implantation choisie */
f87fe1a1
OL
12function charger_valeurs_point(implantation_id) {
13 var params = {'implantation_id' : implantation_id};
994474ba
OL
14 var chargement_vp = $.getJSON('/dae/liste_valeurs_point', params);
15 chargement_vp.success(function(data) {
16 var items = [];
f87fe1a1 17
994474ba
OL
18 var options = "";
19 $.each(data, function() {
20 options += '<option value="' + this.id + '">' + this.label + '</option>';
21 });
f87fe1a1 22
994474ba
OL
23 $("#id_valeur_point_min").html(options);
24 $("#id_valeur_point_max").html(options);
25 alert("Les valeurs de point on été ajustées en fonction de cette implantation.");
f87fe1a1
OL
26 });
27}
28
26b327fa
OL
29/* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
30est appelée À chaque modification du formulaire de classement. */
f87fe1a1
OL
31function recalculer(element) {
32 var ligne = element.parents("tr");
86f1e48d
OL
33 var inputs = ligne.find("input, select");
34 var salaire_input;
35 var valeur_point_input;
f87fe1a1
OL
36 inputs.each(function() {
37 var input = $(this);
86f1e48d 38 if (input.attr('id').match('id_coefficient*')) {
f87fe1a1 39 coeff = clean_float(input.val())
86f1e48d
OL
40 }
41 if (input.attr('id').match('id_valeur_point*')) {
42 valeur_point_input = input;
43 }
44 if (input.attr('id').match('id_salaire*')) {
45 salaire_input = input;
f87fe1a1 46 salaire = clean_float(input.val())
86f1e48d
OL
47 }
48 if (input.attr('id').match('id_indemn*')) {
f87fe1a1 49 indemn = clean_float(input.val())
86f1e48d
OL
50 }
51 if (input.attr('id').match('id_autre*')) {
f87fe1a1 52 autre = clean_float(input.val())
86f1e48d 53 }
f87fe1a1
OL
54
55 });
56
86f1e48d
OL
57 /* on suggère un salaire de base en fonction du coefficient et de la valeur du point */
58 valeur_point_text = valeur_point_input.find(":selected").text();
59 valeur_point = clean_float(valeur_point_text.split(" ")[0]);
60 if (valeur_point > 0 && coeff > 0) {
61 salaire = clean_float(valeur_point * coeff);
62 salaire_input.val(salaire);
63 }
64
f87fe1a1
OL
65 taux_euro = clean_float(ligne.find(".taux").html())
66 total = 0;
67 total = salaire + indemn + autre;
68 total_euro = total * taux_euro;
69
70 ligne.find(".total-devise").text(total.toFixed(2));
71 ligne.find(".total-euro").text(total_euro.toFixed(2));
72
73}
74
75$(document).ready(function() {
76
77 /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
78 sélectionnée.
994474ba 79 Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
f87fe1a1 80 var implantation_id = $("#id_implantation").val();
994474ba
OL
81 $("#id_implantation").change(function() {
82 var implantation_id = this.value;
83 charger_valeurs_point(implantation_id);
84 });
f87fe1a1
OL
85
86
87 $('#id_valeur_point_min, #id_valeur_point_max').change(function(e) {
88 var vp_input = $(this);
26b327fa 89 var ligne = vp_input.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
f87fe1a1 90
86f1e48d
OL
91 var chargement_devise = $.getJSON("/dae/devise", {'valeur_point': this.value});
92 chargement_devise.success(function(data) {
f87fe1a1
OL
93 var selects = ligne.find("select");
94 selects.each(function() {
95 var s = $(this);
96 if (s.attr('id').match('id_devise*'))
97 s.val(data.devise)
98 ligne.find(".taux").text(data.taux_euro)
99 ligne.find(".devise_code").text(data.devise_code)
100 });
26b327fa
OL
101
102 /* on synchronise les valeurs de points */
103 $('#id_valeur_point_min, #id_valeur_point_max').each(function() {
104 var vp = $(this);
105 if (vp.val() != vp_input.val()) {
106 vp.val(vp_input.val())
107 }
108 });
109
86f1e48d 110 recalculer(vp_input);
f87fe1a1 111 });
86f1e48d
OL
112 chargement_devise.error(function(data) {
113 });
114
f87fe1a1
OL
115 });
116
117 $('#id_devise_min, #id_devise_max').change(function(e) {
118 var input = $(this);
119 var ligne = input.parents("tr");
86f1e48d
OL
120 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': this.value});
121 chargement_devise.success(function(data) {
f87fe1a1
OL
122 ligne.find(".taux").text(data.taux_euro)
123 ligne.find(".devise_code").text(data.devise_code)
86f1e48d
OL
124 recalculer(input);
125 });
126 chargement_devise.error(function(data) {
127 alert(data.responseText);
128 ligne.find(".taux").text(0)
129 ligne.find(".devise_code").text("???")
f87fe1a1
OL
130 });
131
132 });
133
134 $('#id_classement_min, #id_classement_max').change(function(e) {
135 var classement = $(this);
136 var ligne = classement.parents("tr");
86f1e48d
OL
137 var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement.val()});
138 chargement_coeff.success(function(data){
f87fe1a1
OL
139 var inputs = ligne.find("input");
140 inputs.each(function() {
141 var input = $(this);
142 if (input.attr('id').match('id_coefficient*'))
143 input.val(data.coefficient);
86f1e48d
OL
144 });
145 recalculer(classement);
146 });
147 chargement_coeff.error(function(data){
f87fe1a1 148 });
f87fe1a1
OL
149 });
150
26b327fa 151 /* refresh des totaux à chaque changement quelconque */
86f1e48d 152 $('#classement input, #classement select').change(function() {
f87fe1a1
OL
153 recalculer($(this));
154 });
155
156});