1 dojo.require('dijit.form.FilteringSelect');
2 dojo.require('dijit.Dialog');
3 dojo.require('dojox.form.CheckedMultiSelect');
4 dojo.require('fieldmapper.Fieldmapper');
5 dojo.require('dijit.form.Form');
6 dojo.require('dijit.form.TextBox');
7 dojo.require('dijit.form.NumberSpinner');
8 dojo.require('openils.Event');
9 dojo.require('openils.acq.Picklist');
10 dojo.require('openils.acq.Lineitem');
11 dojo.require('openils.User');
12 dojo.require('openils.Util');
14 var searchFields = [];
19 var sourceCount = 0; // how many sources are we searching
20 var user = new openils.User();
26 liTable = new AcqLiTable();
27 fieldmapper.standardRequest(
28 ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
30 params: [user.authtoken],
36 function _drawForm(r) {
38 var sources = openils.Util.readResponse(r);
41 for(var name in sources) {
42 source = sources[name];
43 if(name == 'native-evergreen-catalog') continue;
44 bibSourceSelect.addOption({value:name, label:source.label});
45 for(var attr in source.attrs)
46 if(!attr.match(/^#/)) // xml comment nodes
47 searchFields.push(source.attrs[attr]);
50 searchFields = searchFields.sort(
60 var tbody = dojo.byId('oils-acq-search-fields-tbody');
61 var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
63 for(var f in searchFields) {
64 var field = searchFields[f];
65 if(dijit.byId('text_input_'+field.name)) continue;
66 var row = tmpl.cloneNode(true);
67 tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
68 var labelCell = dojo.query('[name=label]', row)[0];
69 var inputCell = dojo.query('[name=input]', row)[0];
70 labelCell.appendChild(document.createTextNode(field.label));
71 input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
72 inputCell.appendChild(input.domNode);
76 function clearSearchForm() {
77 for(var f in searchFields) {
78 var field = searchFields[f];
79 dijit.byId('text_input_'+field.name).setValue('');
84 function doSearch(values) {
85 showDiv('oils-acq-pl-loading');
95 searchLimit = values.limit;
98 var selected = bibSourceSelect.getValue();
99 for(var i = 0; i < selected.length; i++) {
100 search.service.push(selected[i]);
101 search.username.push('');
102 search.password.push('');
106 for(var v in values) {
108 var input = dijit.byId('text_input_'+v);
109 search.search[v] = values[v];
113 fieldmapper.standardRequest(
114 ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
116 params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
117 onresponse: handleResult,
123 function setRowAttr(td, liWrapper, field) {
124 var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
125 td.appendChild(document.createTextNode(val));
128 function handleResult(r) {
129 var result = openils.Util.readResponse(r);
131 dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
132 var tbody = dojo.byId('plist-tbody');
134 liTable.addLineitem(result.lineitem);
135 if(result.complete) // hide the loading image
136 dojo.style('oils-acq-pl-loading','display', 'none');
140 function showDiv(div) {
142 'oils-acq-search-block',
143 'oils-acq-pl-loading' ];
144 dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
146 dojo.style(div, 'display', 'block');
149 function loadPLSelect() {
151 function handleResponse(r) {
152 plList.push(r.recv().content());
154 var method = 'open-ils.acq.picklist.user.retrieve';
155 fieldmapper.standardRequest(
156 ['open-ils.acq', method],
158 params: [openils.User.authtoken],
159 onresponse: handleResponse,
160 oncomplete: function() {
161 plAddExistingSelect.store =
162 new dojo.data.ItemFileReadStore({data:acqpl.toStoreData(plList)});
163 plAddExistingSelect.setValue();
170 function saveResults(values) {
171 selectedLIs = resultLIs;
173 if(values.which == 'selected')
174 selectedLIs = liTable.getSelected();
176 if(values.new_name && values.new_name != '') {
177 // save selected lineitems to a new picklist
178 if(values.which = 'selected') {
179 openils.acq.Picklist.create(
180 {name: values.new_name},
182 updateLiList(id, selectedLIs, 0,
183 function(){location.href = 'view/' + id});
187 // save all == change the name of the results picklist
188 resultPicklist.name(values.new_name);
189 openils.acq.Picklist.update(resultPicklist,
191 location.href = 'view/' + resultPicklist.id();
195 } else if(values.existing_pl) {
196 // update lineitems to use an existing picklist
197 updateLiList(values.existing_pl, selectedLIs, 0,
198 function(){location.href = 'view/' + values.existing_pl});
202 function updateLiList(pl, list, idx, oncomplete) {
203 if(idx >= list.length)
205 var li = selectedLIs[idx];
207 new openils.acq.Lineitem({lineitem:li}).update(
209 updateLiList(pl, list, ++idx, oncomplete);
214 openils.Util.addOnLoad(drawForm);