[#2534] Fait du champ "ref" dans EtablissementBase un champ one-to-one
[auf_django_references.git] / auf / django / references / static / references / jquery.etablissement-autocomplete.js
1 (function($) {
2
3 function set_ref_etablissement(form, id) {
4 form.find('[name=ref]').val(id);
5 $.get('/references/etablissements/' + id + '.json', function(data) {
6 for (field in data) {
7 if (field != 'id') {
8 var widget = form.find('[name=' + field + ']');
9 var value = $('<span class="etablissement-value"></span>');
10 value.insertBefore(widget);
11 if (widget.is(':checkbox')) {
12 value.append('<img src="/static/references/icon-' +
13 (data[field] ? 'yes' : 'no') + '.gif" alt="' +
14 (data[field] ? 'oui' : 'non') + '/>');
15 widget.attr('checked', data[field]);
16 }
17 else {
18 value.insertBefore(widget);
19 if (widget.is('select')) {
20 value.append(widget.find('option[value=' + data[field] + ']').text());
21 }
22 else {
23 value.append(data[field]);
24 }
25 widget.val(data[field]);
26 }
27
28 if (field == 'nom') {
29 var button = $(
30 '<button type="button" class="etablissement-change-button">' +
31 'Modifier</button>'
32 );
33 value.append(' ');
34 button.appendTo(value);
35 button.click(function() { unset_ref_etablissement(form); })
36 }
37 widget.addClass('etablissement-hidden').hide();
38 widget
39 .next('.add-another,.datetimeshortcuts')
40 .addClass('etablissement-hidden')
41 .hide();
42 }
43 }
44 });
45 }
46
47 function unset_ref_etablissement(form) {
48 form.find('[name=ref]').val('');
49 form.find('[name=nom]').val('');
50 form.find('.etablissement-value').remove();
51 form.find('.etablissement-hidden').show();
52 }
53
54 $.fn.etablissement_autocomplete = function(exclude_refs) {
55
56 var form = this.closest('form');
57
58 // Cacher le champ ref et son label
59 var ref_field = form.find('[name=ref]');
60 ref_field.hide();
61 var ref_field_id = ref_field.attr('id');
62 if (ref_field_id) {
63 form.find('label[for=' + ref_field_id + ']').hide();
64 }
65
66 // On vérifie si le champ pays se trouve avant le champ à auto-compléter.
67 // Si c'est le cas, on va filtrer l'auto-complétion avec le pays
68 // sélectionné.
69 var all_inputs = form.find(':input');
70 var pays_input = all_inputs.filter('[name=pays]');
71 var pays_index = all_inputs.index(pays_input);
72 var my_index = all_inputs.index(this);
73 var critere_pays = false;
74 if (pays_index != -1 && pays_index < my_index) {
75 var critere_pays = pays_input.get();
76 }
77
78 // Pré-remplir les champs si une référence est déjà indiquée
79 var ref_id = form.find('[name=ref]').val();
80 if (ref_id) {
81 set_ref_etablissement(form, ref_id);
82 }
83
84 // Mettre en place l'autocomplete
85 this.autocomplete({
86 source: function(request, response) {
87 if (critere_pays) {
88 request.pays = $(critere_pays).val();
89 }
90 if (exclude_refs) {
91 request.exclude_refs = exclude_refs;
92 }
93 if (ref_id) {
94 request.include = ref_id;
95 }
96 $.getJSON('/references/autocomplete/etablissements.json', request, response);
97 },
98 select: function(event, ui) {
99 set_ref_etablissement(form, ui.item.id)
100 }
101 });
102
103 }
104
105 })(jQuery);