1 /*******************************************************************************
3 *******************************************************************************/
6 function elements_comparaison(devise_id
) {
7 if (devise_id
== "") return;
8 var chargement_devise
= $
.getJSON("/dae/devise/code", {'devise': devise_id
});
9 chargement_devise
.success(function(data
) {
13 $
('#elements-comparaison input').each(function() {
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
);
20 chargement_devise
.error(function(data
) {
21 alert(data
.responseText
);
25 /* filter les postes en fonction de l'implantation choisie */
26 function charger_postes(implantation_id
) {
27 var selected
= $
("#id_poste :selected").val();
28 var params
= {'implantation_id' : implantation_id
};
29 var chargement_p
= $
.getJSON('/dae/liste_postes', params
);
30 chargement_p
.success(function(data
) {
34 $
.each(data
, function(index
) {
36 if (data
[index][0] == selected
)
37 select
= " selected=selected ";
38 options
+= '<option ' + select
+ ' value="' + data
[index][0] + '">' + data
[index][1] + '</option>';
41 $
("#id_poste").html(options
);
45 /* Construction dynamique des valeurs de point en fonction de l'implantation choisie */
46 function charger_valeurs_point(implantation_id
) {
47 var params
= {'implantation_id' : implantation_id
};
48 var chargement_vp
= $
.getJSON('/dae/liste_valeurs_point', params
);
49 var selected_min
= null;
50 var selected_max
= null;
51 chargement_vp
.success(function(data
) {
54 var options
= '<option value="">---------</option>';
55 $
.each(data
, function() {
57 if (this.suggestion
) {
58 suggestion
= ' style="font-weight: bold; color: black;" '
59 selected_min
= selected_min ||
this.id
;
60 selected_max
= selected_max ||
this.id
;
62 options
+= '<option' + suggestion
+ ' value="' + this.id
+ '">' + this.label
+ '</option>';
65 $
('#id_valeur_point_min').html(options
).val(selected_min
).trigger('change');
66 $
('#id_valeur_point_max').html(options
).val(selected_max
).trigger('change');
70 /* Calcul des totaux dans les 2 devises, selon les champs sélectionnés. Cette fonction
71 est appelée À chaque modification du formulaire de classement. */
72 function recalculer_ligne(element
) {
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;
79 salaire_manuel
= true;
81 var ligne
= element
.parents("tr");
82 var inputs
= ligne
.find("input, select");
85 var valeur_point_input
;
89 var charges_patronales
;
92 inputs
.each(function() {
95 if (input
.attr('id').match('id_classement*')) {
96 classement_id
= input
.val();
98 if (input
.attr('id').match('id_valeur_point*')) {
99 valeur_point_input
= input
;
101 if (input
.attr('id').match('id_salaire*')) {
102 salaire_input
= input
;
103 salaire
= clean_float(input
.val())
105 if (input
.attr('id').match('id_indemn_expat*')) {
106 indemn_expat
= clean_float(input
.val())
108 if (input
.attr('id').match('id_indemn_fct*')) {
109 indemn_fct
= clean_float(input
.val())
111 if (input
.attr('id').match('id_charges_patronales*')) {
112 charges_patronales
= clean_float(input
.val())
114 if (input
.attr('id').match('id_autre*')) {
115 autre
= clean_float(input
.val())
120 var chargement_coeff
= $
.getJSON("/dae/coefficient", {'classement': classement_id
});
121 chargement_coeff
.success(function(data
){
122 coeff
= data
.coefficient
;
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
== "")
129 valeur_point
= clean_float(valeur_point_text
.split(" ")[0]);
131 if (salaire_manuel
== false) {
132 salaire
= clean_float(valeur_point
* coeff
);
133 salaire_input
.val(salaire
);
135 taux_euro
= parseFloat(ligne
.find(".taux").html())
136 total
= salaire
+ indemn_expat
+ indemn_fct
+ charges_patronales
+ autre
;
137 remuneration
= total
- charges_patronales
;
138 total_euro
= total
* taux_euro
;
139 remuneration_euro
= remuneration
* taux_euro
;
141 ligne
.find(".total-devise").text(clean_float(total
));
142 ligne
.find(".remuneration-devise").text(clean_float(remuneration
));
143 ligne
.find(".total-euro").text(clean_float(total_euro
));
144 ligne
.find(".remuneration-euro").text(clean_float(remuneration_euro
));
149 /* recalcule tout le classement */
150 function recalculer_tout() {
151 $
("#classement tr *[name*=salaire]").each(function() {
152 recalculer_ligne($
(this));
156 function setup_taux_ligne(element
) {
158 var ligne
= input
.parents("tr");
159 var devise_id
= input
.val();
160 if (devise_id
== "") return;
161 var chargement_devise
= $
.getJSON("/dae/devise/code", {'devise': devise_id
});
162 chargement_devise
.success(function(data
) {
163 ligne
.find(".taux").text(data
.taux_euro
)
164 ligne
.find(".devise_code").text(data
.devise_code
)
165 recalculer_ligne(input
);
167 chargement_devise
.error(function(data
) {
168 alert(data
.responseText
);
169 ligne
.find(".taux").text(0)
170 ligne
.find(".devise_code").text("???")
174 $
(document
).ready(function() {
176 /* Lorsqu'on choisit un poste dans la liste on recharge la page avec le
177 poste chargé dans la view (grâce à son id dans l'URL).*/
178 $
('#id_poste').change(function() {
179 var id_poste
= $
(this).val();
181 window
.location
= '/dae/poste/' + id_poste
;
184 /* La fonctionnalité de présélection, est activé uniquement si aucune implantation n'a déjà été
186 Lorsque l'implantation est changée, on ajuste les valeurs de points en fonction de cette sélection */
187 var implantation_id
= $
("#id_implantation").val();
188 if (implantation_id
) {
189 charger_postes(implantation_id
);
190 charger_valeurs_point(implantation_id
);
192 $
("#id_implantation").change(function() {
193 var implantation_id
= this.value
;
194 charger_postes(implantation_id
);
195 charger_valeurs_point(implantation_id
);
199 $
('#id_valeur_point_min, #id_valeur_point_max').change(function(e
) {
200 // pas de traitement si aucune valeur de point n'est choisie
201 if (this.value
== '') return;
203 var vp_input
= $
(this);
204 var ligne
= vp_input
.parents("tr").parent(); // en fait on travaille sur tout le tableau dans ce cas!
206 var chargement_devise
= $
.getJSON("/dae/devise", {'valeur_point': this.value
});
207 chargement_devise
.success(function(data
) {
208 var selects
= ligne
.find("select");
209 selects
.each(function() {
211 if (s
.attr('id').match('id_devise*'))
213 ligne
.find(".taux").text(data
.taux_euro
)
214 ligne
.find(".devise_code").text(data
.devise_code
)
217 /* on synchronise les valeurs de points */
218 $
('#id_valeur_point_min, #id_valeur_point_max').each(function() {
220 if (vp
.val() != vp_input
.val()) {
221 vp
.val(vp_input
.val())
227 chargement_devise
.error(function(data
) {
228 alert(data
.responseText
);
233 $
('#id_devise_min, #id_devise_max').change(function(e
) {
234 setup_taux_ligne($
(this));
237 $
('#id_classement_min, #id_classement_max, #classement input, #classement select').change(function(e
) {
238 recalculer_ligne($
(this));
241 /* au chargement, on calcule tout */
242 $
('#id_devise_min, #id_devise_max').each(function() {
243 setup_taux_ligne($
(this));
245 // le setup de la devise par ligne est déjà suivi d'un recalcul de la ligne automatique
248 /* calcul de la différence en mois */
249 $
("#id_date_debut, #id_date_fin").focusout(function() {
254 /* on charge les postes reliés à cette implantation */
255 charger_postes($
("#id_implantation :selected").val());
257 $
('#id_devise_comparaison, #elements-comparaison input').change(function(e
) {
258 elements_comparaison($
('#id_devise_comparaison').val());
260 elements_comparaison($
('#id_devise_comparaison').val());
262 /* Traitement de la recherche AJAX pour les postes de comparaison */
263 $
(".comparaison-interne .results_on_deck").bind('added', function() {
264 /* récupération du choix dans la liste */
265 var input_id
= $
(this).attr('id').replace('_on_deck', '');
266 var prefix_poste_connexe
= $
(this).attr('id').replace('recherche_on_deck', '');
267 var input
= $
('#'+input_id
);
268 var poste_id
= input
.val();
270 /* interrogation par AJAX pour récupérer les données du poste */
271 var chargement_poste
= $
.getJSON("/dae/poste_resume/" + poste_id
);
272 chargement_poste
.success(function(data
) {
273 $
('#' + prefix_poste_connexe
+ 'implantation').val(data
['implantation']);
274 $
('#' + prefix_poste_connexe
+ 'nom').val(data
['poste']);
275 $
('#' + prefix_poste_connexe
+ 'montant').val(data
['montant']);
276 $
('#' + prefix_poste_connexe
+ 'devise').val(data
['devise']);
277 $
('#' + prefix_poste_connexe
+ 'montant_euros').val(data
['montant_euros']);
279 chargement_poste
.error(function(data
) {
280 alert(data
.responseText
);
283 /* on ne veut pas afficher la personne en-dessous */
284 $
(this).find('div').remove();