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