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();
25 fieldmapper.standardRequest(
26 ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
28 params: [user.authtoken],
34 function _drawForm(r) {
36 var sources = openils.Util.readResponse(r);
39 for(var name in sources) {
40 source = sources[name];
41 if(name == 'native-evergreen-catalog') continue;
42 bibSourceSelect.addOption({value:name, label:source.label});
43 for(var attr in source.attrs)
44 if(!attr.match(/^#/)) // xml comment nodes
45 searchFields.push(source.attrs[attr]);
48 searchFields = searchFields.sort(
58 var tbody = dojo.byId('oils-acq-search-fields-tbody');
59 var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
61 for(var f in searchFields) {
62 var field = searchFields[f];
63 if(dijit.byId('text_input_'+field.name)) continue;
64 var row = tmpl.cloneNode(true);
65 tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
66 var labelCell = dojo.query('[name=label]', row)[0];
67 var inputCell = dojo.query('[name=input]', row)[0];
68 labelCell.appendChild(document.createTextNode(field.label));
69 input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
70 inputCell.appendChild(input.domNode);
74 function clearSearchForm() {
75 for(var f in searchFields) {
76 var field = searchFields[f];
77 dijit.byId('text_input_'+field.name).setValue('');
82 function doSearch(values) {
83 showDiv('oils-acq-pl-loading');
85 var tbody = dojo.byId('plist-tbody');
87 resultRow = tbody.removeChild(dojo.byId('plist-row'));
88 while(tbody.childNodes[0]) tbody.removeChild(tbody.childNodes[0]);
98 searchLimit = values.limit;
101 var selected = bibSourceSelect.getValue();
102 for(var i = 0; i < selected.length; i++) {
103 search.service.push(selected[i]);
104 search.username.push('');
105 search.password.push('');
109 for(var v in values) {
111 var input = dijit.byId('text_input_'+v);
112 search.search[v] = values[v];
116 fieldmapper.standardRequest(
117 ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
119 params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
120 onresponse: handleResult,
125 var selectState = false;
126 function toggleSelect() {
127 var inputs = dojo.query('[name=selectbox]', dojo.byId('plist-tbody'));
129 dojo.forEach(inputs, function(i){i.checked = false});
131 dojo.forEach(inputs, function(i){i.checked = true});
132 selectState = !selectState;
135 function getSelected() {
136 var inputs = dojo.query('[name=selectbox]', dojo.byId('plist-tbody'));
138 dojo.forEach(inputs, function(i) {
140 selected.push(liCache[i.parentNode.parentNode.getAttribute('li')]);
145 function setRowAttr(td, liWrapper, field) {
146 var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
147 td.appendChild(document.createTextNode(val));
150 function handleResult(r) {
151 var result = openils.Util.readResponse(r);
152 dojo.style('oils-acq-pl-search-results', 'display', 'block');
153 var tbody = dojo.byId('plist-tbody');
155 if(result.lineitem) {
156 var li = result.lineitem;
157 liCache[li.id()] = li;
158 var liWrapper = new openils.acq.Lineitem({lineitem:li});
159 var row = resultRow.cloneNode(true);
160 row.setAttribute('li', li.id());
161 var tds = dojo.query('[attr]', row);
162 dojo.forEach(tds, function(td) {setRowAttr(td, liWrapper, td.getAttribute('attr'));});
163 dojo.query('[name=source_label]', row)[0].appendChild(document.createTextNode(li.source_label()));
164 tbody.appendChild(row);
167 if(result.complete) // hide the loading image
168 showDiv('oils-acq-pl-search-results');
172 function showDiv(div) {
174 'oils-acq-pl-search-results',
175 'oils-acq-search-block',
176 'oils-acq-pl-loading' ];
177 dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
178 dojo.style(div, 'display', 'block');
181 function loadPLSelect() {
183 function handleResponse(r) {
184 plList.push(r.recv().content());
186 var method = 'open-ils.acq.picklist.user.retrieve';
187 fieldmapper.standardRequest(
188 ['open-ils.acq', method],
190 params: [openils.User.authtoken],
191 onresponse: handleResponse,
192 oncomplete: function() {
193 plAddExistingSelect.store =
194 new dojo.data.ItemFileReadStore({data:acqpl.toStoreData(plList)});
195 plAddExistingSelect.setValue();
202 function saveResults(values) {
203 selectedLIs = resultLIs;
205 if(values.which == 'selected')
206 selectedLIs = getSelected();
208 if(values.new_name && values.new_name != '') {
209 // save selected lineitems to a new picklist
210 if(values.which = 'selected') {
211 openils.acq.Picklist.create(
212 {name: values.new_name},
214 updateLiList(id, selectedLIs, 0,
215 function(){location.href = 'view/' + id});
219 // save all == change the name of the results picklist
220 resultPicklist.name(values.new_name);
221 openils.acq.Picklist.update(resultPicklist,
223 location.href = 'view/' + resultPicklist.id();
227 } else if(values.existing_pl) {
228 // update lineitems to use an existing picklist
229 updateLiList(values.existing_pl, selectedLIs, 0,
230 function(){location.href = 'view/' + values.existing_pl});
234 function updateLiList(pl, list, idx, oncomplete) {
235 if(idx >= list.length)
237 var li = selectedLIs[idx];
239 new openils.acq.Lineitem({lineitem:li}).update(
241 updateLiList(pl, list, ++idx, oncomplete);
246 openils.Util.addOnLoad(drawForm);