Initial dev repository
[kcls-web.git] / js / ui / default / acq / picklist / bib_search.js
diff --git a/js/ui/default/acq/picklist/bib_search.js b/js/ui/default/acq/picklist/bib_search.js
new file mode 100644 (file)
index 0000000..4345728
--- /dev/null
@@ -0,0 +1,155 @@
+dojo.require('dijit.form.FilteringSelect');
+dojo.require('dijit.ProgressBar');
+dojo.require('dijit.Dialog');
+dojo.require('dojox.form.CheckedMultiSelect');
+dojo.require('fieldmapper.Fieldmapper');
+dojo.require('dijit.form.Form');
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.NumberSpinner');
+dojo.require('openils.Event');
+dojo.require('openils.acq.Picklist');
+dojo.require('openils.acq.Lineitem');
+dojo.require('openils.User');
+dojo.require('openils.Util');
+
+var searchFields = [];
+var resultPicklist;
+var resultLIs;
+var selectedLIs;
+var recvCount = 0;
+var sourceCount = 0; // how many sources are we searching
+var user = new openils.User();
+var searchLimit = 10;
+var liCache = {};
+var liTable;
+
+function drawForm() {
+    liTable = new AcqLiTable();
+    liTable.skipInitialEligibilityCheck = true;
+
+    fieldmapper.standardRequest(
+        ['open-ils.search', 'open-ils.search.z3950.retrieve_services'], 
+        {   async: true,
+            params: [user.authtoken],
+            oncomplete: _drawForm
+        }
+    );
+}
+
+function _drawForm(r) {
+
+    var sources = openils.Util.readResponse(r);
+    if(!sources) return;
+
+    for(var name in sources) {
+        source = sources[name];
+        if(name == 'native-evergreen-catalog') continue;
+        bibSourceSelect.addOption({value:name, label:source.label});
+        for(var attr in source.attrs) 
+            if(!attr.match(/^#/)) // xml comment nodes
+                searchFields.push(source.attrs[attr]);
+    }
+
+    searchFields = searchFields.sort(
+        function(a,b) {
+            if(a.label < b.label) 
+                return -1;
+            if(a.label > b.label) 
+                return 1;
+            return 0;
+        }
+    );
+
+    var tbody = dojo.byId('oils-acq-search-fields-tbody');
+    var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
+
+    for(var f in searchFields) {
+        var field = searchFields[f];
+        if(dijit.byId('text_input_'+field.name)) continue;
+        var row = tmpl.cloneNode(true);
+        tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
+        var labelCell = dojo.query('[name=label]', row)[0];
+        var inputCell = dojo.query('[name=input]', row)[0];
+        labelCell.appendChild(document.createTextNode(field.label));
+        input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
+        inputCell.appendChild(input.domNode);
+    }
+}
+
+function clearSearchForm() {
+    for(var f in searchFields) {
+        var field = searchFields[f];
+        dijit.byId('text_input_'+field.name).setValue('');
+    }
+}
+
+var resultRow;
+function doSearch(values) {
+    liTable.reset();
+    showDiv('oils-acq-pl-loading');
+
+    search = {
+        service : [],
+        username : [],
+        password : [],
+        search : {},
+        limit : values.limit,
+        offset : searchOffset
+    };
+    searchLimit = values.limit;
+    delete values.limit;
+
+    var selected = bibSourceSelect.getValue();
+    for(var i = 0; i < selected.length; i++) {
+        search.service.push(selected[i]);
+        search.username.push('');
+        search.password.push('');
+        sourceCount++;
+    }
+
+    for(var v in values) {
+        if(values[v]) {
+            var input = dijit.byId('text_input_'+v);
+            search.search[v] = values[v];
+        }
+    }
+
+    fieldmapper.standardRequest(
+        ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
+        {   async: true,
+            params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
+            onresponse: handleResult
+        }
+    );
+}
+
+
+function setRowAttr(td, liWrapper, field) {
+    var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
+    td.appendChild(document.createTextNode(val));
+}
+
+function handleResult(r) {
+    var result = openils.Util.readResponse(r);
+    liTable.show('list');
+    dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
+    var tbody = dojo.byId('plist-tbody');
+    if(result.lineitem)
+        liTable.addLineitem(result.lineitem);
+    if(result.complete) // hide the loading image
+        dojo.style('oils-acq-pl-loading','display', 'none');
+}
+
+function showDiv(div) {
+    var divs = [
+        'oils-acq-search-block', 
+        'oils-acq-pl-loading' ];
+    dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
+    liTable.hide();
+    dojo.style(div, 'display', 'block');
+}
+
+
+openils.Util.addOnLoad(drawForm);
+
+