835bac271f966a697ac318075c2b79b8592123bb
[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 var chargement_vp = $.getJSON('/dae/liste_valeurs_point', params);
15 chargement_vp.success(function(data) {
16 var items = [];
17
18 var options = "";
19 $.each(data, function() {
20 options += '<option value="' + this.id + '">' + this.label + '</option>';
21 });
22
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.");
26 });
27 }
28
29 /* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
30 est appelée À chaque modification du formulaire de classement. */
31 function recalculer_ligne(element) {
32 var ligne = element.parents("tr");
33 var inputs = ligne.find("input, select");
34 var salaire_input;
35 var valeur_point_input;
36 inputs.each(function() {
37 var input = $(this);
38 if (input.attr('id').match('id_coefficient*')) {
39 coeff = clean_float(input.val())
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;
46 salaire = clean_float(input.val())
47 }
48 if (input.attr('id').match('id_indemn*')) {
49 indemn = clean_float(input.val())
50 }
51 if (input.attr('id').match('id_autre*')) {
52 autre = clean_float(input.val())
53 }
54
55 });
56
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
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 /* recalcule tout le classement */
76 function recalculer_tout() {
77 $("#classement tr *[name*=devise]").each(function() {
78 recalculer_ligne($(this));
79 });
80 }
81
82 $(document).ready(function() {
83
84 /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
85 sélectionnée.
86 Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
87 var implantation_id = $("#id_implantation").val();
88 $("#id_implantation").change(function() {
89 var implantation_id = this.value;
90 charger_valeurs_point(implantation_id);
91 });
92
93
94 $('#id_valeur_point_min, #id_valeur_point_max').change(function(e) {
95 var vp_input = $(this);
96 var ligne = vp_input.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
97
98 var chargement_devise = $.getJSON("/dae/devise", {'valeur_point': this.value});
99 chargement_devise.success(function(data) {
100 var selects = ligne.find("select");
101 selects.each(function() {
102 var s = $(this);
103 if (s.attr('id').match('id_devise*'))
104 s.val(data.devise)
105 ligne.find(".taux").text(data.taux_euro)
106 ligne.find(".devise_code").text(data.devise_code)
107 });
108
109 /* on synchronise les valeurs de points */
110 $('#id_valeur_point_min, #id_valeur_point_max').each(function() {
111 var vp = $(this);
112 if (vp.val() != vp_input.val()) {
113 vp.val(vp_input.val())
114 }
115 });
116
117 recalculer_ligne(vp_input);
118 });
119 chargement_devise.error(function(data) {
120 });
121
122 });
123
124 $('#id_devise_min, #id_devise_max').change(function(e) {
125 var input = $(this);
126 var ligne = input.parents("tr");
127 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': this.value});
128 chargement_devise.success(function(data) {
129 ligne.find(".taux").text(data.taux_euro)
130 ligne.find(".devise_code").text(data.devise_code)
131 recalculer_ligne(input);
132 });
133 chargement_devise.error(function(data) {
134 alert(data.responseText);
135 ligne.find(".taux").text(0)
136 ligne.find(".devise_code").text("???")
137 });
138
139 });
140
141 $('#id_classement_min, #id_classement_max').change(function(e) {
142 var classement = $(this);
143 var ligne = classement.parents("tr");
144 var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement.val()});
145 chargement_coeff.success(function(data){
146 var inputs = ligne.find("input");
147 inputs.each(function() {
148 var input = $(this);
149 if (input.attr('id').match('id_coefficient*'))
150 input.val(data.coefficient);
151 });
152 recalculer_ligne(classement);
153 });
154 chargement_coeff.error(function(data){
155 });
156 });
157
158 /* refresh des totaux à chaque changement quelconque */
159 $('#classement input, #classement select').change(function() {
160 recalculer_ligne($(this));
161 });
162
163 /* au chargement, on calcule tout */
164 recalculer_tout();
165
166 });