2e7df8588fae1b62c6620b5c82f5000f23a7428f
[auf_django_references.git] / auf / django / references / static / references / etablissement-form.js
1 $(function() {
2
3 function etablissement_autocomplete(request, response) {
4 var form = $(this.form);
5 var pays = form.data('etablissement.critere_pays');
6 if (pays) {
7 request.pays = $(pays).val();
8 }
9 $.getJSON('/references/autocomplete/etablissements.json', request, response);
10 }
11
12 function etablissement_select(event, ui) {
13 var form = $(this.form);
14 form.find('[name=ref]').val(ui.item.id);
15 ref_changed(form);
16 }
17
18 function etablissement_change(event, ui) {
19 var form = $(this.form);
20 if (form.data('etablissement.nom_ref') != $(this).val()) {
21 form.find('[name=ref]').val('');
22 ref_changed(form);
23 }
24 }
25
26 function pays_change(event) {
27 var form = $(this.form);
28 var ref = form.find('[name=ref]');
29 if (ref.val()) {
30 ref.val('');
31 form.find('[name=nom]').val('');
32 ref_changed(form);
33 }
34 }
35
36 function ref_changed(form) {
37 var id = form.find('[name=ref]').val();
38 if (id) {
39 var critere_pays = form.data('etablissement.critere_pays');
40 $.get('/references/etablissements/' + id + '.json', function(data) {
41 var disabled_fields = [];
42 for (field in data) {
43 if (field == 'id' || (critere_pays && field == 'pays')) {
44 continue;
45 }
46 if (field == 'nom') {
47 form.data('etablissement.nom_ref', data[field]);
48 }
49 else {
50 var widget = form.find('[name=' + field + ']');
51 if (widget.is(':checkbox')) {
52 widget.attr('checked', data[field]);
53 }
54 else {
55 widget.val(data[field]);
56 }
57 widget.attr('disabled', true);
58 disabled_fields.push(field);
59 }
60 }
61 form.data('etablissement.disabled_fields', disabled_fields);
62 });
63 }
64 else {
65 $.each(form.data('etablissement.disabled_fields'), function() {
66 form.find('[name=' + this + ']').attr('disabled', false);
67 });
68 form.data('etablissement.nom_ref', '');
69 }
70 }
71
72 $('input.etablissement-autocomplete').each(function() {
73 var form = $(this.form);
74
75 // Cacher le champ ref et son label
76 var ref_field = form.find('[name=ref]');
77 ref_field.hide();
78 var ref_field_id = ref_field.attr('id');
79 if (ref_field_id) {
80 form.find('label[for=' + ref_field_id + ']').hide();
81 }
82
83 // On vérifie si le champ pays se trouve avant le champ à auto-compléter.
84 // Si c'est le cas, on va filtrer l'auto-complétion avec le pays
85 // sélectionné.
86 var all_inputs = form.find(':input');
87 var pays_input = all_inputs.filter('[name=pays]');
88 var pays_index = all_inputs.index(pays_input);
89 var my_index = all_inputs.index(this);
90 if (pays_index != -1 && pays_index < my_index) {
91 form.data('etablissement.critere_pays', pays_input.get());
92 pays_input.change(pays_change);
93 }
94 else {
95 form.data('etablissement.critere_pays', false);
96 }
97
98 // Réactiver les champs désactivés juste avant la soumission
99 form.data('etablissement.disabled_fields', []);
100 form.on('submit.etablissement', function() {
101 $.each($(this).data('etablissement.disabled_fields'), function() {
102 form.find('[name=' + this + ']').attr('disabled', false);
103 });
104 });
105
106 // Pré-remplir les champs si une référence est déjà indiquée
107 ref_changed(form);
108
109 // Mettre en place l'autocomplete
110 $(this).autocomplete({
111 source: etablissement_autocomplete,
112 select: etablissement_select
113 });
114 $(this).change(etablissement_change);
115 });
116
117 });