sync vp
[auf_rh_dae.git] / project / media / js / dae.js
1 /* string to float */
2 function clean_float(value){
3 if (isNaN(value) || value == undefined)
4 output = 0;
5 else
6 output = parseFloat(value);
7 output = Math.round(output*100)/100;
8 return output;
9 }
10
11 /* Construction dynamique des valeurs de point en fonction de l'implantation choisie */
12 function 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
27 /* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
28 est appelée À chaque modification du formulaire de classement. */
29 function recalculer(element) {
30 var ligne = element.parents("tr");
31 var inputs = ligne.find("input, select");
32 var salaire_input;
33 var valeur_point_input;
34 inputs.each(function() {
35 var input = $(this);
36 if (input.attr('id').match('id_coefficient*')) {
37 coeff = clean_float(input.val())
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;
44 salaire = clean_float(input.val())
45 }
46 if (input.attr('id').match('id_indemn*')) {
47 indemn = clean_float(input.val())
48 }
49 if (input.attr('id').match('id_autre*')) {
50 autre = clean_float(input.val())
51 }
52
53 });
54
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
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);
91 var ligne = vp_input.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
92
93 var chargement_devise = $.getJSON("/dae/devise", {'valeur_point': this.value});
94 chargement_devise.success(function(data) {
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 });
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
112 recalculer(vp_input);
113 });
114 chargement_devise.error(function(data) {
115 });
116
117 });
118
119 $('#id_devise_min, #id_devise_max').change(function(e) {
120 var input = $(this);
121 var ligne = input.parents("tr");
122 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': this.value});
123 chargement_devise.success(function(data) {
124 ligne.find(".taux").text(data.taux_euro)
125 ligne.find(".devise_code").text(data.devise_code)
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("???")
132 });
133
134 });
135
136 $('#id_classement_min, #id_classement_max').change(function(e) {
137 var classement = $(this);
138 var ligne = classement.parents("tr");
139 var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement.val()});
140 chargement_coeff.success(function(data){
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);
146 });
147 recalculer(classement);
148 });
149 chargement_coeff.error(function(data){
150 });
151 });
152
153 /* refresh des totaux à chaque changement quelconque */
154 $('#classement input, #classement select').change(function() {
155 recalculer($(this));
156 });
157
158 });