]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/picklist/bib_search.js
LP#1463166 Apply funds from view/place orders and search
[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     // render the batch updater to activate fund selection, but leave
32     // it hidden for now since it's not fully functional in this UI.
33     liTable.initBatchUpdater(null, true);
34
35     fieldmapper.standardRequest(
36         ['open-ils.search', 'open-ils.search.z3950.retrieve_services'], 
37         {   async: true,
38             params: [user.authtoken],
39             oncomplete: _drawForm
40         }
41     );
42 }
43
44 function _drawForm(r) {
45
46     var sources = openils.Util.readResponse(r);
47     if(!sources) return;
48
49     for(var name in sources) {
50         source = sources[name];
51         if(name == 'native-evergreen-catalog') continue;
52         bibSourceSelect.addOption({value:name, label:source.label});
53         for(var attr in source.attrs) 
54             if(!attr.match(/^#/)) // xml comment nodes
55                 searchFields.push(source.attrs[attr]);
56     }
57
58     searchFields = searchFields.sort(
59         function(a,b) {
60             if(a.label < b.label) 
61                 return -1;
62             if(a.label > b.label) 
63                 return 1;
64             return 0;
65         }
66     );
67
68     var tbody = dojo.byId('oils-acq-search-fields-tbody');
69     var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
70
71     for(var f in searchFields) {
72         var field = searchFields[f];
73         if(dijit.byId('text_input_'+field.name)) continue;
74         var row = tmpl.cloneNode(true);
75         tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
76         var labelCell = dojo.query('[name=label]', row)[0];
77         var inputCell = dojo.query('[name=input]', row)[0];
78         labelCell.appendChild(document.createTextNode(field.label));
79         input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
80         inputCell.appendChild(input.domNode);
81     }
82 }
83
84 function clearSearchForm() {
85     for(var f in searchFields) {
86         var field = searchFields[f];
87         dijit.byId('text_input_'+field.name).setValue('');
88     }
89 }
90
91 var resultRow;
92 function doSearch(values) {
93     liTable.reset();
94     showDiv('oils-acq-pl-loading');
95
96     search = {
97         service : [],
98         username : [],
99         password : [],
100         search : {},
101         limit : values.limit,
102         offset : searchOffset
103     };
104     searchLimit = values.limit;
105     delete values.limit;
106
107     var selected = bibSourceSelect.getValue();
108     for(var i = 0; i < selected.length; i++) {
109         search.service.push(selected[i]);
110         search.username.push('');
111         search.password.push('');
112         sourceCount++;
113     }
114
115     for(var v in values) {
116         if(values[v]) {
117             var input = dijit.byId('text_input_'+v);
118             search.search[v] = values[v];
119         }
120     }
121
122     fieldmapper.standardRequest(
123         ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
124         {   async: true,
125             params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
126             onresponse: handleResult
127         }
128     );
129 }
130
131
132 function setRowAttr(td, liWrapper, field) {
133     var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
134     td.appendChild(document.createTextNode(val));
135 }
136
137 function handleResult(r) {
138     var result = openils.Util.readResponse(r);
139     liTable.show('list');
140     dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
141     var tbody = dojo.byId('plist-tbody');
142     if(result.lineitem)
143         liTable.addLineitem(result.lineitem);
144     if(result.complete) // hide the loading image
145         dojo.style('oils-acq-pl-loading','display', 'none');
146 }
147
148 function showDiv(div) {
149     var divs = [
150         'oils-acq-search-block', 
151         'oils-acq-pl-loading' ];
152     dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
153     liTable.hide();
154     dojo.style(div, 'display', 'block');
155 }
156
157
158 openils.Util.addOnLoad(drawForm);
159
160