fix js valeur point
[auf_rh_dae.git] / project / assets / js / dae-poste.js
CommitLineData
25410b22
OL
1/*******************************************************************************
2* POSTE
3*******************************************************************************/
4
72b571f4
OL
5
6function elements_comparaison(devise_id) {
15061532 7 if (devise_id == "") return;
72b571f4
OL
8 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': devise_id});
9 chargement_devise.success(function(data) {
10 /* data.devise
11 data.taux_euro
12 data.devise_code */
13 $('#elements-comparaison input').each(function() {
14 var input = $(this);
15 var montant = data.taux_euro * parseFloat(input.val());
16 input.parent().find(".devise_euro").html(clean_float(montant) + " EUR");
17 input.parent().find(".devise").html(data.devise_code);
18 });
19 });
20 chargement_devise.error(function(data) {
21 alert(data.responseText);
22 });
23}
24
6d047148
OL
25/* filter les postes en fonction de l'implantation choisie */
26function charger_postes(implantation_id) {
4bce4d24 27 var selected = $("#id_poste :selected").val();
6d047148
OL
28 var params = {'implantation_id' : implantation_id};
29 var chargement_p = $.getJSON('/dae/liste_postes', params);
30 chargement_p.success(function(data) {
31 var items = [];
32
33 var options = "";
34 $.each(data, function(index) {
4bce4d24
OL
35 select = "";
36 if (data[index][0] == selected)
37 select = " selected=selected ";
38 options += '<option ' + select + ' value="' + data[index][0] + '">' + data[index][1] + '</option>';
6d047148
OL
39 });
40
41 $("#id_poste").html(options);
42 });
43}
01191cd0 44
25410b22
OL
45/* Construction dynamique des valeurs de point en fonction de l'implantation choisie */
46function charger_valeurs_point(implantation_id) {
47 var params = {'implantation_id' : implantation_id};
48 var chargement_vp = $.getJSON('/dae/liste_valeurs_point', params);
2f7a8932
OL
49 var selected_min = null;
50 var selected_max = null;
25410b22
OL
51 chargement_vp.success(function(data) {
52 var items = [];
53
11f22317 54 var options = '<option value="">---------</option>';
25410b22 55 $.each(data, function() {
7ad0549c
OL
56 var suggestion = "";
57 if (this.suggestion) {
11f22317 58 suggestion = ' style="font-weight: bold; color: black;" '
b1504b48
EMS
59 selected_min = selected_min || this.id;
60 selected_max = selected_max || this.id;
7ad0549c 61 }
11f22317 62 options += '<option' + suggestion + ' value="' + this.id + '">' + this.label + '</option>';
25410b22
OL
63 });
64
2f7a8932
OL
65 $('#id_valeur_point_min').html(options).val(selected_min).trigger('change');
66 $('#id_valeur_point_max').html(options).val(selected_max).trigger('change');
25410b22
OL
67 });
68}
69
70/* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
71est appelée À chaque modification du formulaire de classement. */
72function recalculer_ligne(element) {
28ae09c3
OL
73 /* on laisse la possibilité de choisir le salaire manuellement,
74 la réinitialisation du salaire de base s'opère dès qu'on choisi
75 un nouveau classement. */
76 if (element.attr('id').match('id_classement*'))
77 salaire_manuel = false;
78 else
79 salaire_manuel = true;
80
25410b22
OL
81 var ligne = element.parents("tr");
82 var inputs = ligne.find("input, select");
83 var salaire_input;
5f61bccb 84 var salaire;
25410b22 85 var valeur_point_input;
5f61bccb
OL
86 var classement_id;
87 var indemn_expat;
88 var indemn_fct;
89 var charges_patronales;
90 var autre;
91
25410b22
OL
92 inputs.each(function() {
93 var input = $(this);
7dcb8d40
OL
94
95 if (input.attr('id').match('id_classement*')) {
96 classement_id = input.val();
25410b22
OL
97 }
98 if (input.attr('id').match('id_valeur_point*')) {
99 valeur_point_input = input;
100 }
101 if (input.attr('id').match('id_salaire*')) {
102 salaire_input = input;
103 salaire = clean_float(input.val())
104 }
5f61bccb
OL
105 if (input.attr('id').match('id_indemn_expat*')) {
106 indemn_expat = clean_float(input.val())
107 }
108 if (input.attr('id').match('id_indemn_fct*')) {
109 indemn_fct = clean_float(input.val())
110 }
111 if (input.attr('id').match('id_charges_patronales*')) {
112 charges_patronales = clean_float(input.val())
25410b22
OL
113 }
114 if (input.attr('id').match('id_autre*')) {
115 autre = clean_float(input.val())
116 }
117
118 });
119
7dcb8d40
OL
120 var chargement_coeff = $.getJSON("/dae/coefficient", {'classement': classement_id});
121 chargement_coeff.success(function(data){
122 coeff = data.coefficient;
123
124 /* on suggère un salaire de base en fonction du coefficient et de la valeur du point */
125 valeur_point_text = valeur_point_input.find(":selected").text();
126 if (valeur_point_text == "")
127 valeur_point = 0;
128 else
6559f73b 129 valeur_point = clean_float(valeur_point_text.split(" ")[2]);
28ae09c3
OL
130 if (salaire_manuel == false) {
131 salaire = clean_float(valeur_point * coeff);
132 salaire_input.val(salaire);
133 }
d1ca1d61 134 taux_euro = parseFloat(ligne.find(".taux").html())
5f61bccb 135 total = salaire + indemn_expat + indemn_fct + charges_patronales + autre;
0f3e6f87 136 remuneration = total - charges_patronales;
7dcb8d40 137 total_euro = total * taux_euro;
0f3e6f87 138 remuneration_euro = remuneration * taux_euro;
25410b22 139
d1ca1d61 140 ligne.find(".total-devise").text(clean_float(total));
0f3e6f87 141 ligne.find(".remuneration-devise").text(clean_float(remuneration));
d1ca1d61 142 ligne.find(".total-euro").text(clean_float(total_euro));
0f3e6f87 143 ligne.find(".remuneration-euro").text(clean_float(remuneration_euro));
7dcb8d40 144 });
25410b22
OL
145
146}
147
148/* recalcule tout le classement */
149function recalculer_tout() {
4ee3b82d 150 $("#classement tr *[name*=salaire]").each(function() {
25410b22
OL
151 recalculer_ligne($(this));
152 });
153}
154
5f61bccb
OL
155function setup_taux_ligne(element) {
156 var input = element;
157 var ligne = input.parents("tr");
15061532
OL
158 var devise_id = input.val();
159 if (devise_id == "") return;
160 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': devise_id});
5f61bccb
OL
161 chargement_devise.success(function(data) {
162 ligne.find(".taux").text(data.taux_euro)
163 ligne.find(".devise_code").text(data.devise_code)
164 recalculer_ligne(input);
165 });
166 chargement_devise.error(function(data) {
167 alert(data.responseText);
168 ligne.find(".taux").text(0)
169 ligne.find(".devise_code").text("???")
170 });
171}
172
2c8d834d
OL
173function poste_redirection() {
174 var id_poste = $("#id_poste").val();
175 if (id_poste)
176 window.location = '/dae/poste/' + id_poste +
177 '?type_intervention=' + $("input[name='type_intervention']:checked").val();
178}
179
25410b22
OL
180$(document).ready(function() {
181
4bce4d24
OL
182 /* Lorsqu'on choisit un poste dans la liste on recharge la page avec le
183 poste chargé dans la view (grâce à son id dans l'URL).*/
184 $('#id_poste').change(function() {
2c8d834d 185 poste_redirection();
4bce4d24
OL
186 });
187
25410b22
OL
188 /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
189 sélectionnée.
190 Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
191 var implantation_id = $("#id_implantation").val();
26a23ec9
OL
192 var null_vp_min = $("#valeur_point_min").val() == '';
193 var null_vp_max = $("#valeur_point_max").val() == '';
194
195 if (implantation_id && null_vp_min && null_vp_max) {
09a606d0
OL
196 charger_postes(implantation_id);
197 charger_valeurs_point(implantation_id);
198 }
25410b22
OL
199 $("#id_implantation").change(function() {
200 var implantation_id = this.value;
6d047148 201 charger_postes(implantation_id);
25410b22
OL
202 charger_valeurs_point(implantation_id);
203 });
204
2c8d834d
OL
205 $('#poste_id_shortcut').change(function() {
206 var poste_id_rh = $('#poste_id_shortcut').val();
207 var key = 'rh-'+poste_id_rh;
208 $('#id_poste').val(key);
209 if ($('#id_poste').val() == key) {
210 poste_redirection();
211 }
212
213 });
214
25410b22
OL
215
216 $('#id_valeur_point_min, #id_valeur_point_max').change(function(e) {
4ee3b82d
OL
217 // pas de traitement si aucune valeur de point n'est choisie
218 if (this.value == '') return;
219
25410b22
OL
220 var vp_input = $(this);
221 var ligne = vp_input.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
222
223 var chargement_devise = $.getJSON("/dae/devise", {'valeur_point': this.value});
224 chargement_devise.success(function(data) {
225 var selects = ligne.find("select");
226 selects.each(function() {
227 var s = $(this);
228 if (s.attr('id').match('id_devise*'))
229 s.val(data.devise)
230 ligne.find(".taux").text(data.taux_euro)
231 ligne.find(".devise_code").text(data.devise_code)
232 });
233
234 /* on synchronise les valeurs de points */
235 $('#id_valeur_point_min, #id_valeur_point_max').each(function() {
236 var vp = $(this);
237 if (vp.val() != vp_input.val()) {
238 vp.val(vp_input.val())
239 }
240 });
241
989ec341 242 recalculer_tout();
25410b22
OL
243 });
244 chargement_devise.error(function(data) {
245 alert(data.responseText);
246 });
11f22317 247
25410b22
OL
248 });
249
250 $('#id_devise_min, #id_devise_max').change(function(e) {
5f61bccb 251 setup_taux_ligne($(this));
25410b22
OL
252 });
253
02a2e65a 254 $('#id_classement_min, #id_classement_max, #classement input, #classement select').change(function(e) {
25410b22
OL
255 recalculer_ligne($(this));
256 });
02a2e65a 257
25410b22 258 /* au chargement, on calcule tout */
5f61bccb
OL
259 $('#id_devise_min, #id_devise_max').each(function() {
260 setup_taux_ligne($(this));
261 });
262 // le setup de la devise par ligne est déjà suivi d'un recalcul de la ligne automatique
263 //recalculer_tout();
25410b22 264
01191cd0
OL
265 /* calcul de la différence en mois */
266 $("#id_date_debut, #id_date_fin").focusout(function() {
267 contrat_mois();
268 });
269 contrat_mois();
11f22317 270
4bce4d24
OL
271 /* on charge les postes reliés à cette implantation */
272 charger_postes($("#id_implantation :selected").val());
01191cd0 273
72b571f4
OL
274 $('#id_devise_comparaison, #elements-comparaison input').change(function(e) {
275 elements_comparaison($('#id_devise_comparaison').val());
276 });
277 elements_comparaison($('#id_devise_comparaison').val());
278
068d1462 279 /* Traitement de la recherche AJAX pour les postes de comparaison */
a03c8b3a 280 $(".comparaison-interne .results_on_deck").bind('added', function() {
068d1462
OL
281 /* récupération du choix dans la liste */
282 var input_id = $(this).attr('id').replace('_on_deck', '');
283 var prefix_poste_connexe = $(this).attr('id').replace('recherche_on_deck', '');
284 var input = $('#'+input_id);
285 var poste_id = input.val();
286
287 /* interrogation par AJAX pour récupérer les données du poste */
288 var chargement_poste = $.getJSON("/dae/poste_resume/" + poste_id);
289 chargement_poste.success(function(data) {
290 $('#' + prefix_poste_connexe + 'implantation').val(data['implantation']);
291 $('#' + prefix_poste_connexe + 'nom').val(data['poste']);
292 $('#' + prefix_poste_connexe + 'montant').val(data['montant']);
293 $('#' + prefix_poste_connexe + 'devise').val(data['devise']);
294 $('#' + prefix_poste_connexe + 'montant_euros').val(data['montant_euros']);
5d84008f
OL
295 $('#' + prefix_poste_connexe + 'statut').val(data['statut']);
296 $('#' + prefix_poste_connexe + 'classement').val(data['classement']);
068d1462
OL
297 });
298 chargement_poste.error(function(data) {
299 alert(data.responseText);
300 });
11f22317 301
068d1462
OL
302 /* on ne veut pas afficher la personne en-dessous */
303 $(this).find('div').remove();
304 input.val('');
305
306 });
307
308
25410b22 309});