Small js refactoring
[auf_rh_dae.git] / project / assets / js / dae-embauche.js
1 /*******************************************************************************
2 * EMBAUCHE
3 *******************************************************************************/
4 function proposition_comparaison(devise_id) {
5 var chargement_devise = $.getJSON("/dae/devise/code", {'devise': devise_id});
6 chargement_devise.success(function(data) {
7 var salaire = $("#id_salaire").val();
8 var montant = parseFloat(data.taux_euro) * parseFloat(salaire);
9 $("#salaire-propose-euros").html(clean_float(montant));
10 });
11 chargement_devise.error(function(data) {
12 alert(data.responseText);
13 });
14 }
15
16 function activateDossierDropDowns() {
17 $('#id_classement, #id_devise').change(loadSalaire);
18 }
19
20 function loadSalaire() {
21 var implantation = $('#implantation').val();
22 var devise = $('#id_devise').val();
23 var classement = $('#id_classement').val();
24 if (implantation && devise && classement) {
25 $.getJSON('/dae/salaire/' + implantation + '/' + devise + '/' + classement,
26 function(data) {
27 if (data.status == 'OK') {
28 $('#id_salaire').val(clean_float(data.salaire_devise));
29 $('#id_salaire').trigger('change');
30 }
31 });
32 }
33 }
34
35 function round2(n) {
36 return Math.round(n * 100) / 100;
37 }
38
39 function remun_line(input) {
40 var idParts = input.attr('id').split('-');
41 var prefix = idParts[0] + "-" + idParts[1];
42 var field = idParts[2];
43
44 var montant_annuel = $('#' + prefix + '-montant');
45 var montant_annuel_euros = $('#' + prefix + '-montant_annuel_euros');
46
47 /* auto calcul a besoin d'un type (autrement ca devient un champs requis)*/
48 if ($('#' + prefix + '-type').val() == '') {
49 montant_annuel.val('');
50 montant_annuel_euros.val('');
51 return;
52 }
53
54 value = (montant_annuel.val());
55 value = roundNumber(value, 2)
56
57 montant_annuel.val(roundNumber(value, 0));
58
59 var devise = $('#' + prefix + '-devise').val();
60 var taux = parseFloat(DEVISES[devise]);
61 if (isNaN(taux)) taux = 0;
62 montant_annuel_euros.text(roundNumber((value * taux), 0))
63
64 }
65
66 function totalByIndex(selector, accessor) {
67 /*
68 aelector: the element where to display costs, and from which the index will be calculated.
69 accessor: a function to get all items that will be part of the total.
70 */
71 $(selector).each(function(){
72 var subtot = 0;
73 var i = $(this).index();
74 var prevs = accessor($(this));
75 prevs.each(function(){
76 var cell = $($(this).children('td')[i]);
77 var val;
78 if (cell.children('input').length == 1) {
79 val = cell.children('input').val();
80 } else {
81 val = cell.html();
82 }
83 subtot += clean_float(val);
84 });
85 $(this).html(subtot);
86 });
87 }
88
89 function remun_totaux() {
90 $('#global-cost input[type="text"]').each(function() {
91 remun_line($(this));
92 });
93 totalByIndex('#global-cost td.sous-total',
94 function(x){return x.parent('tr').prevUntil(':not(.calculable)')});
95 totalByIndex('#global-cost th.total',
96 function(x){return x.parent('tr').prevAll('.sous-totaux')});
97 }
98
99
100 activateDossierDropDowns();
101
102 /* Ajout des datespickers sur les inputs loadés via AJAX.
103 On s'assure qu'on est pas dans le cas initial où ils sont déjà ajoutés.
104 (La façon dont c'est fait requiert que les inputs soient uniquement dans la partie AJAX).*/
105 function datepicker() {
106 var date_pickers = $(".datetimeshortcuts");
107 if (date_pickers.length == 0)
108 DateTimeShortcuts.init();
109 }
110
111 function activateEmployeDropDown() {
112 $('#id_employe').change(loadEmploye);
113 }
114
115 function loadEmploye() {
116 var employeUrl = '/dae/employe/' + $(this).val();
117 $('#form-employe').html('<tr><td>Chargement...</td></tr>')
118 .load(employeUrl, activateEmployeDropDown);
119 var dossierUrl = '/dae/dossier/' + $('#poste').val() +
120 '/' + $(this).val();
121 $('#form-dossier').html('<tr><td>Chargement...</td></tr>')
122 .load(dossierUrl, function() {
123 datepicker();
124 activateDossierDropDowns();
125 $("#id_contrat_date_debut, #id_contrat_date_fin").focusout(function() {contrat_mois();});
126 });
127 }
128
129 $(document).ready(function() {
130
131 /* Lorsqu'on choisit un poste dans la liste on recharge la page avec le
132 poste chargé dans la view (grâce à son id dans l'URL).*/
133 $('#id_poste').change(function() {
134 window.location = '/dae/embauche/' + $(this).val();
135 });
136
137 /* on lance le JS au chargement de la page, la toute première fois,
138 puis on cable le change au select pour le rechargement. */
139 //loadEmploye();
140 activateEmployeDropDown();
141
142 /* calcul de la différence en mois */
143 $("#id_contrat_date_debut, #id_contrat_date_fin").focusout(function() {
144 contrat_mois();
145 });
146 contrat_mois();
147
148 /* totaux remu */
149 $('#global-cost input, #global-cost select').change(function() {
150 // remun_line($(this));
151 remun_totaux();
152 });
153
154 /* Ajouter une ligne aux couts globals */
155 /*$('#type-remun').change(function() {
156 var dossier_id = $('#dossier').attr('dossier');
157 if ($(this).val() != '') {
158 $('#global-cost').html('<tr><td>Chargement...</td></tr>')
159 .load('/dae/add-remun/' +
160 dossier_id + '/' +
161 $(this).val(), function() {
162 $('#type-remun').val('');
163 });
164 }
165 });
166 */
167 remun_totaux();
168
169 /* Traitement de la recherche AJAX pour les dossiers de comparaison */
170 $(".results_on_deck").bind('added', function() {
171
172 /* récupération du choix dans la liste */
173 var input_id = $(this).attr('id').replace('_on_deck', '');
174 var prefix_dossier_connexe = $(this).attr('id').replace('recherche_on_deck', '');
175 var input = $('#'+input_id);
176 var dossier_id = input.val();
177
178 /* interrogation par AJAX pour récupérer les données du dossier */
179 var chargement_dossier = $.getJSON("/dae/dossier_resume/" + dossier_id);
180 chargement_dossier.success(function(data) {
181 $('#' + prefix_dossier_connexe + 'implantation').val(data['implantation']);
182 $('#' + prefix_dossier_connexe + 'classement').val(data['classement']);
183 $('#' + prefix_dossier_connexe + 'statut').val(data['statut']);
184 $('#' + prefix_dossier_connexe + 'poste').val(data['poste']);
185 $('#' + prefix_dossier_connexe + 'personne').val(data['personne']);
186 $('#' + prefix_dossier_connexe + 'montant').val(data['montant']);
187 $('#' + prefix_dossier_connexe + 'devise').val(data['devise']);
188 $('#' + prefix_dossier_connexe + 'montant_euros').val(data['montant_euros']);
189 });
190 chargement_dossier.error(function(data) {
191 alert(data.responseText);
192 });
193
194 /* on ne veut pas afficher la personne en-dessous */
195 $(this).find('div').remove();
196 input.val('');
197
198 });
199
200 });