--- /dev/null
+dojo.require('dojo.data.ItemFileReadStore');
+dojo.require('dijit.form.Form');
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.DateTextBox');
+dojo.require('dijit.form.Button');
+dojo.require('dijit.form.ComboBox');
+dojo.require('openils.User');
+dojo.require('openils.widget.AutoFieldWidget');
+dojo.require('openils.MarcXPathParser');
+dojo.require('openils.acq.Picklist');
+dojo.require('openils.CGI');
+
+var attrDefs = {};
+var paramPL = null;
+var paramPO = null;
+var paramUR = null; // User Request ID
+
+function drawBriefRecordForm(fields) {
+
+ var tbody = dojo.byId('acq-brief-record-tbody');
+ var rowTmpl = dojo.byId('acq-brief-record-row');
+ var cgi = new openils.CGI();
+ paramPL = cgi.param('pl');
+ paramPO = cgi.param('po');
+ paramUR = cgi.param('ur');
+ prepop = JSON2js(cgi.param('prepop'));
+
+
+ if(paramPL) {
+ openils.Util.hide('acq-brief-record-po-row');
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.picklist.retrieve.authoritative'],
+ { async: true,
+ params: [openils.User.authtoken, paramPL],
+ oncomplete : function(r) {
+ var pl = openils.Util.readResponse(r);
+ plSelector.store =
+ new dojo.data.ItemFileReadStore({data:acqpl.toStoreData([pl])});
+ plSelector.attr('value', pl.name());
+ plSelector.attr('disabled', true);
+ }
+ }
+ );
+
+ } else {
+
+ if(paramPO) {
+ openils.Util.hide('acq-brief-record-pl-row');
+ poNumber.attr('value', paramPO);
+
+ } else {
+ openils.Util.hide('acq-brief-record-po-row');
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.picklist.user.retrieve.atomic'],
+ { async: true,
+ params: [openils.User.authtoken],
+ oncomplete : function(r) {
+ var list = openils.Util.readResponse(r);
+ plSelector.store =
+ new dojo.data.ItemFileReadStore({data:acqpl.toStoreData(list)});
+ }
+ }
+ );
+ }
+ }
+
+
+ /*
+ marcEditButton.onClick = function(fields) {
+ saveBriefRecord(fields, true);
+ }
+ */
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.lineitem_attr_definition.retrieve.all'],
+ { async : true,
+ params : [openils.User.authtoken],
+
+ oncomplete : function(r) {
+ var attrs = openils.Util.readResponse(r);
+ if(attrs && attrs.marc) {
+
+ attrs = attrs.marc.sort(
+ function(a, b) {
+ if(a.description < b.description)
+ return 1;
+ return -1;
+ }
+ );
+
+ var xpathParser = new openils.MarcXPathParser();
+ dojo.forEach(attrs,
+ function(def) {
+ attrDefs[def.code()] = xpathParser.parse(def.xpath());
+ var row = rowTmpl.cloneNode(true);
+ dojo.query('[name=name]', row)[0].innerHTML = def.description();
+ var textbox = new dijit.form.TextBox(
+ {"name": def.code()},
+ dojo.query('[name=widget]', row)[0]
+ );
+ if (prepop && prepop[def.id()])
+ textbox.attr("value", prepop[def.id()]);
+ tbody.appendChild(row);
+ }
+ );
+ }
+ }
+ }
+ );
+}
+
+function saveBriefRecord(fields, editMarc) {
+
+ if(paramPL) {
+ fields.picklist = paramPL;
+ delete fields.po;
+ compileBriefRecord(fields, editMarc);
+ return false;
+ }
+
+ if(paramPO) {
+ fields.po = paramPO;
+ delete fields.picklist;
+ compileBriefRecord(fields, editMarc);
+ return false;
+ }
+
+ // first, deal with the selection list
+ var picklist = plSelector.attr('value');
+
+ if(!picklist) {
+ compileBriefRecord(fields, editMarc);
+ return false;
+ }
+
+ // ComboBox value is the display string. find the actual picklist
+ // and create a new one if necessary
+ plSelector.store.fetch({
+ query : {name:picklist},
+
+ onComplete : function(items) {
+ if(items.length == 0) {
+
+ // create a new picklist for these items
+ openils.acq.Picklist.create(
+ {name:picklist, org_unit: openils.User.user.ws_ou()},
+ function(plId) {
+ fields.picklist = plId;
+ compileBriefRecord(fields, editMarc);
+ }
+ );
+
+ } else {
+ var id = plSelector.store.getValue(items[0], 'id');
+ fields.picklist = id;
+ compileBriefRecord(fields, editMarc);
+ }
+ }
+ });
+
+ return false;
+}
+
+function compileBriefRecord(fields, editMarc) {
+
+ var baseString = '<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
+ 'xmlns="http://www.loc.gov/MARC21/slim" ' +
+ 'xmlns:marc="http://www.loc.gov/MARC21/slim" ' +
+ 'xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd">' +
+ '<leader>00000nam a22000007a 4500</leader></record>';
+
+ var doc = new DOMParser().parseFromString(baseString, 'text/xml');
+
+ for(var f in fields) {
+
+ var def = attrDefs[f];
+ if(!def) continue;
+ var value = fields[f];
+ if(!value) continue;
+
+ var dfNode = doc.createElementNS('http://www.loc.gov/MARC21/slim', 'marc:datafield');
+ var sfNode = doc.createElementNS('http://www.loc.gov/MARC21/slim', 'marc:subfield');
+
+ // creates tags and fields in the document. If there are more than one
+ // option for the tag or code, use the first in the list
+ dfNode.setAttribute('tag', ''+def.tags[0]);
+ dfNode.setAttribute('ind1', ' ');
+ dfNode.setAttribute('ind2', ' ');
+ sfNode.setAttribute('code', ''+def.subfields[0]);
+ tNode = doc.createTextNode(value);
+
+ sfNode.appendChild(tNode);
+ dfNode.appendChild(sfNode);
+ doc.documentElement.appendChild(dfNode);
+ }
+
+
+ var xmlString = new XMLSerializer().serializeToString(doc);
+
+ var li = new fieldmapper.jub();
+ li.marc(xmlString);
+ li.picklist(fields.picklist);
+ if(fields.po) li.purchase_order(fields.po);
+ li.selector(openils.User.user.id());
+ li.creator(openils.User.user.id());
+ li.editor(openils.User.user.id());
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.lineitem.create'],
+ { async : true,
+ params : [openils.User.authtoken, li],
+ oncomplete : function(r) {
+ var id = openils.Util.readResponse(r);
+ if(!id) return;
+ if(editMarc) {
+ // XXX load marc editor
+ } else if (paramUR) {
+ // update User Request with Lineitem and reload request interface
+ var pcrud = new openils.PermaCrud({ authtoken : openils.User.authtoken });
+ var aur_obj = pcrud.retrieve('aur',paramUR);
+ aur_obj.lineitem( id );
+ pcrud.update( aur_obj, {
+ 'oncomplete' : function(r, cudResults) {
+ // Goes back to the list view
+ location.href = oilsBasePath + '/acq/picklist/user_request';
+ }
+ });
+ } else {
+ if(fields.picklist)
+ location.href = oilsBasePath + '/acq/picklist/view/' + fields.picklist;
+ else
+ location.href = oilsBasePath + '/acq/po/view/' + fields.po;
+ }
+ }
+ }
+ );
+
+ return false;
+}
+
+openils.Util.addOnLoad(drawBriefRecordForm);