]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/picklist/bib_search.js
f0fa454cde1cf0b08b13605bbf5859941f61b911
[working/Evergreen.git] / Open-ILS / web / js / ui / default / acq / picklist / bib_search.js
1 dojo.require('dijit.form.FilteringSelect');
2 dojo.require('dijit.ProgressBar');
3 dojo.require('dijit.Dialog');
4 dojo.require('dojox.form.CheckedMultiSelect');
5 dojo.require('fieldmapper.Fieldmapper');
6 dojo.require('dijit.form.Form');
7 dojo.require('dijit.form.TextBox');
8 dojo.require('dijit.form.NumberSpinner');
9 dojo.require('openils.Event');
10 dojo.require('openils.acq.Picklist');
11 dojo.require('openils.acq.Lineitem');
12 dojo.require('openils.User');
13 dojo.require('openils.Util');
14
15 var searchFields = [];
16 var resultPicklist;
17 var resultLIs;
18 var selectedLIs;
19 var recvCount = 0;
20 var sourceCount = 0; // how many sources are we searching
21 var user = new openils.User();
22 var searchLimit = 10;
23 var liCache = {};
24 var liTable;
25
26 function drawForm() {
27     liTable = new AcqLiTable();
28     liTable.enableActionsDropdownOptions("fs");
29     liTable.skipInitialEligibilityCheck = true;
30
31     fieldmapper.standardRequest(
32         ['open-ils.search', 'open-ils.search.z3950.retrieve_services'], 
33         {   async: true,
34             params: [user.authtoken],
35             oncomplete: _drawForm
36         }
37     );
38 }
39
40 function _drawForm(r) {
41
42     var sources = openils.Util.readResponse(r);
43     if(!sources) return;
44
45     for(var name in sources) {
46         source = sources[name];
47         if(name == 'native-evergreen-catalog') continue;
48         bibSourceSelect.addOption({value:name, label:source.label});
49         for(var attr in source.attrs) 
50             if(!attr.match(/^#/)) // xml comment nodes
51                 searchFields.push(source.attrs[attr]);
52     }
53
54     searchFields = searchFields.sort(
55         function(a,b) {
56             if(a.label < b.label) 
57                 return -1;
58             if(a.label > b.label) 
59                 return 1;
60             return 0;
61         }
62     );
63
64     var tbody = dojo.byId('oils-acq-search-fields-tbody');
65     var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
66
67     for(var f in searchFields) {
68         var field = searchFields[f];
69         if(dijit.byId('text_input_'+field.name)) continue;
70         var row = tmpl.cloneNode(true);
71         tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
72         var labelCell = dojo.query('[name=label]', row)[0];
73         var inputCell = dojo.query('[name=input]', row)[0];
74         labelCell.appendChild(document.createTextNode(field.label));
75         input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
76         inputCell.appendChild(input.domNode);
77     }
78 }
79
80 function clearSearchForm() {
81     for(var f in searchFields) {
82         var field = searchFields[f];
83         dijit.byId('text_input_'+field.name).setValue('');
84     }
85 }
86
87 var resultRow;
88 function doSearch(values) {
89     liTable.reset();
90     showDiv('oils-acq-pl-loading');
91
92     search = {
93         service : [],
94         username : [],
95         password : [],
96         search : {},
97         limit : values.limit,
98         offset : searchOffset
99     };
100     searchLimit = values.limit;
101     delete values.limit;
102
103     var selected = bibSourceSelect.getValue();
104     for(var i = 0; i < selected.length; i++) {
105         search.service.push(selected[i]);
106         search.username.push('');
107         search.password.push('');
108         sourceCount++;
109     }
110
111     for(var v in values) {
112         if(values[v]) {
113             var input = dijit.byId('text_input_'+v);
114             search.search[v] = values[v];
115         }
116     }
117
118     fieldmapper.standardRequest(
119         ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
120         {   async: true,
121             params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
122             onresponse: handleResult
123         }
124     );
125 }
126
127
128 function setRowAttr(td, liWrapper, field) {
129     var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
130     td.appendChild(document.createTextNode(val));
131 }
132
133 function handleResult(r) {
134     var result = openils.Util.readResponse(r);
135     liTable.show('list');
136     dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
137     var tbody = dojo.byId('plist-tbody');
138     if(result.lineitem)
139         liTable.addLineitem(result.lineitem);
140     if(result.complete) // hide the loading image
141         dojo.style('oils-acq-pl-loading','display', 'none');
142 }
143
144 function showDiv(div) {
145     var divs = [
146         'oils-acq-search-block', 
147         'oils-acq-pl-loading' ];
148     dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
149     liTable.hide();
150     dojo.style(div, 'display', 'block');
151 }
152
153
154 openils.Util.addOnLoad(drawForm);
155
156