1 /*******************************************************************************
3 *******************************************************************************/
6 function elements_comparaison(devise_id
) {
7 var chargement_devise
= $
.getJSON("/dae/devise/code", {'devise': devise_id
});
8 chargement_devise
.success(function(data
) {
12 $
('#elements-comparaison input').each(function() {
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
);
19 chargement_devise
.error(function(data
) {
20 alert(data
.responseText
);
24 /* filter les postes en fonction de l'implantation choisie */
25 function charger_postes(implantation_id
) {
26 var selected
= $
("#id_poste :selected").val();
27 var params
= {'implantation_id' : implantation_id
};
28 var chargement_p
= $
.getJSON('/dae/liste_postes', params
);
29 chargement_p
.success(function(data
) {
33 $
.each(data
, function(index
) {
35 if (data
[index][0] == selected
)
36 select
= " selected=selected ";
37 options
+= '<option ' + select
+ ' value="' + data
[index][0] + '">' + data
[index][1] + '</option>';
40 $
("#id_poste").html(options
);
44 /* Construction dynamique des valeurs de point en fonction de l'implantation choisie */
45 function charger_valeurs_point(implantation_id
) {
46 var params
= {'implantation_id' : implantation_id
};
47 var chargement_vp
= $
.getJSON('/dae/liste_valeurs_point', params
);
48 var selected_min
= $
('#id_valeur_point_min').val()
49 var selected_max
= $
('#id_valeur_point_max').val()
50 chargement_vp
.success(function(data
) {
53 var options
= '<option value="">---------</option>';
54 $
.each(data
, function() {
56 if (this.suggestion
) {
57 suggestion
= ' style="font-weight: bold; color: black;" '
58 selected_min
= selected_min ||
this.id
;
59 selected_max
= selected_max ||
this.id
;
61 options
+= '<option' + suggestion
+ ' value="' + this.id
+ '">' + this.label
+ '</option>';
64 $
('#id_valeur_point_min').html(options
).val(selected_min
);
65 $
('#id_valeur_point_max').html(options
).val(selected_max
);
69 /* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
70 est appelée À chaque modification du formulaire de classement. */
71 function recalculer_ligne(element
) {
72 /* on laisse la possibilité de choisir le salaire manuellement,
73 la réinitialisation du salaire de base s'opère dès qu'on choisi
74 un nouveau classement. */
75 if (element
.attr('id').match('id_classement*'))
76 salaire_manuel
= false;
78 salaire_manuel
= true;
80 var ligne
= element
.parents("tr");
81 var inputs
= ligne
.find("input, select");
84 var valeur_point_input
;
88 var charges_patronales
;
91 inputs
.each(function() {
94 if (input
.attr('id').match('id_classement*')) {
95 classement_id
= input
.val();
97 if (input
.attr('id').match('id_valeur_point*')) {
98 valeur_point_input
= input
;
100 if (input
.attr('id').match('id_salaire*')) {
101 salaire_input
= input
;
102 salaire
= clean_float(input
.val())
104 if (input
.attr('id').match('id_indemn_expat*')) {
105 indemn_expat
= clean_float(input
.val())
107 if (input
.attr('id').match('id_indemn_fct*')) {
108 indemn_fct
= clean_float(input
.val())
110 if (input
.attr('id').match('id_charges_patronales*')) {
111 charges_patronales
= clean_float(input
.val())
113 if (input
.attr('id').match('id_autre*')) {
114 autre
= clean_float(input
.val())
119 var chargement_coeff
= $
.getJSON("/dae/coefficient", {'classement': classement_id
});
120 chargement_coeff
.success(function(data
){
121 coeff
= data
.coefficient
;
123 /* on suggère un salaire de base en fonction du coefficient et de la valeur du point */
124 valeur_point_text
= valeur_point_input
.find(":selected").text();
125 if (valeur_point_text
== "")
128 valeur_point
= clean_float(valeur_point_text
.split(" ")[0]);
130 if (salaire_manuel
== false) {
131 salaire
= clean_float(valeur_point
* coeff
);
132 salaire_input
.val(salaire
);
134 taux_euro
= parseFloat(ligne
.find(".taux").html())
135 total
= salaire
+ indemn_expat
+ indemn_fct
+ charges_patronales
+ autre
;
136 remuneration
= total
- charges_patronales
;
137 total_euro
= total
* taux_euro
;
138 remuneration_euro
= remuneration
* taux_euro
;
140 ligne
.find(".total-devise").text(clean_float(total
));
141 ligne
.find(".remuneration-devise").text(clean_float(remuneration
));
142 ligne
.find(".total-euro").text(clean_float(total_euro
));
143 ligne
.find(".remuneration-euro").text(clean_float(remuneration_euro
));
148 /* recalcule tout le classement */
149 function recalculer_tout() {
150 $
("#classement tr *[name*=salaire]").each(function() {
151 recalculer_ligne($
(this));
155 function setup_taux_ligne(element
) {
157 var ligne
= input
.parents("tr");
158 var chargement_devise
= $
.getJSON("/dae/devise/code", {'devise': input
.val()});
159 chargement_devise
.success(function(data
) {
160 ligne
.find(".taux").text(data
.taux_euro
)
161 ligne
.find(".devise_code").text(data
.devise_code
)
162 recalculer_ligne(input
);
164 chargement_devise
.error(function(data
) {
165 alert(data
.responseText
);
166 ligne
.find(".taux").text(0)
167 ligne
.find(".devise_code").text("???")
171 $
(document
).ready(function() {
173 /* Lorsqu'on choisit un poste dans la liste on recharge la page avec le
174 poste chargé dans la view (grâce à son id dans l'URL).*/
175 $
('#id_poste').change(function() {
176 var id_poste
= $
(this).val();
178 window
.location
= '/dae/poste/' + id_poste
;
181 /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
183 Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
184 var implantation_id
= $
("#id_implantation").val();
185 if (implantation_id
) {
186 charger_postes(implantation_id
);
187 charger_valeurs_point(implantation_id
);
189 $
("#id_implantation").change(function() {
190 var implantation_id
= this.value
;
191 charger_postes(implantation_id
);
192 charger_valeurs_point(implantation_id
);
196 $
('#id_valeur_point_min, #id_valeur_point_max').change(function(e
) {
197 // pas de traitement si aucune valeur de point n'est choisie
198 if (this.value
== '') return;
200 var vp_input
= $
(this);
201 var ligne
= vp_input
.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
203 var chargement_devise
= $
.getJSON("/dae/devise", {'valeur_point': this.value
});
204 chargement_devise
.success(function(data
) {
205 var selects
= ligne
.find("select");
206 selects
.each(function() {
208 if (s
.attr('id').match('id_devise*'))
210 ligne
.find(".taux").text(data
.taux_euro
)
211 ligne
.find(".devise_code").text(data
.devise_code
)
214 /* on synchronise les valeurs de points */
215 $
('#id_valeur_point_min, #id_valeur_point_max').each(function() {
217 if (vp
.val() != vp_input
.val()) {
218 vp
.val(vp_input
.val())
224 chargement_devise
.error(function(data
) {
225 alert(data
.responseText
);
230 $
('#id_devise_min, #id_devise_max').change(function(e
) {
231 setup_taux_ligne($
(this));
234 $
('#id_classement_min, #id_classement_max, #classement input, #classement select').change(function(e
) {
235 recalculer_ligne($
(this));
238 /* au chargement, on calcule tout */
239 $
('#id_devise_min, #id_devise_max').each(function() {
240 setup_taux_ligne($
(this));
242 // le setup de la devise par ligne est déjà suivi d'un recalcul de la ligne automatique
245 /* calcul de la différence en mois */
246 $
("#id_date_debut, #id_date_fin").focusout(function() {
251 /* on charge les postes reliés à cette implantation */
252 charger_postes($
("#id_implantation :selected").val());
254 $
('#id_devise_comparaison, #elements-comparaison input').change(function(e
) {
255 elements_comparaison($
('#id_devise_comparaison').val());
257 elements_comparaison($
('#id_devise_comparaison').val());
259 /* Traitement de la recherche AJAX pour les postes de comparaison */
260 $
(".comparaison-interne .results_on_deck").bind('added', function() {
261 /* récupération du choix dans la liste */
262 var input_id
= $
(this).attr('id').replace('_on_deck', '');
263 var prefix_poste_connexe
= $
(this).attr('id').replace('recherche_on_deck', '');
264 var input
= $
('#'+input_id
);
265 var poste_id
= input
.val();
267 /* interrogation par AJAX pour récupérer les données du poste */
268 var chargement_poste
= $
.getJSON("/dae/poste_resume/" + poste_id
);
269 chargement_poste
.success(function(data
) {
270 $
('#' + prefix_poste_connexe
+ 'implantation').val(data
['implantation']);
271 $
('#' + prefix_poste_connexe
+ 'nom').val(data
['poste']);
272 $
('#' + prefix_poste_connexe
+ 'montant').val(data
['montant']);
273 $
('#' + prefix_poste_connexe
+ 'devise').val(data
['devise']);
274 $
('#' + prefix_poste_connexe
+ 'montant_euros').val(data
['montant_euros']);
276 chargement_poste
.error(function(data
) {
277 alert(data
.responseText
);
280 /* on ne veut pas afficher la personne en-dessous */
281 $
(this).find('div').remove();