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