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');
15 var searchFields = [];
20 var sourceCount = 0; // how many sources are we searching
21 var user = new openils.User();
27 liTable = new AcqLiTable();
28 liTable.enableActionsDropdownOptions("fs");
29 liTable.skipInitialEligibilityCheck = true;
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);
35 fieldmapper.standardRequest(
36 ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
38 params: [user.authtoken],
44 function _drawForm(r) {
46 var sources = openils.Util.readResponse(r);
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]);
58 searchFields = searchFields.sort(
68 var tbody = dojo.byId('oils-acq-search-fields-tbody');
69 var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
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);
84 function clearSearchForm() {
85 for(var f in searchFields) {
86 var field = searchFields[f];
87 dijit.byId('text_input_'+field.name).setValue('');
92 function doSearch(values) {
94 showDiv('oils-acq-pl-loading');
101 limit : values.limit,
102 offset : searchOffset
104 searchLimit = values.limit;
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('');
115 for(var v in values) {
117 var input = dijit.byId('text_input_'+v);
118 search.search[v] = values[v];
122 fieldmapper.standardRequest(
123 ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
125 params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
126 onresponse: handleResult
132 function setRowAttr(td, liWrapper, field) {
133 var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
134 td.appendChild(document.createTextNode(val));
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');
143 liTable.addLineitem(result.lineitem);
144 if(result.complete) // hide the loading image
145 dojo.style('oils-acq-pl-loading','display', 'none');
148 function showDiv(div) {
150 'oils-acq-search-block',
151 'oils-acq-pl-loading' ];
152 dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
154 dojo.style(div, 'display', 'block');
158 openils.Util.addOnLoad(drawForm);