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