From: erickson Date: Tue, 28 Apr 2009 21:07:41 +0000 (+0000) Subject: added code to build the marc xml from the form, added option to select destination... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f836a40d495ad5a4e73c015c8f450357134f7b5a;p=Evergreen.git added code to build the marc xml from the form, added option to select destination selection list for brief record. added stub for 'finish editing via marc editor' option git-svn-id: svn://svn.open-ils.org/ILS/trunk@13009 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/web/js/ui/default/acq/picklist/brief_record.js b/Open-ILS/web/js/ui/default/acq/picklist/brief_record.js index 8ccabe2d75..39ec57b840 100644 --- a/Open-ILS/web/js/ui/default/acq/picklist/brief_record.js +++ b/Open-ILS/web/js/ui/default/acq/picklist/brief_record.js @@ -3,9 +3,13 @@ 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'); + +var attrDefs = {}; function drawBriefRecordForm(fields) { @@ -13,6 +17,23 @@ function drawBriefRecordForm(fields) { var rowTmpl = dojo.byId('acq-brief-record-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], @@ -29,8 +50,10 @@ function drawBriefRecordForm(fields) { } ); + 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(); new dijit.form.TextBox({name : def.code()}, dojo.query('[name=widget]', row)[0]); @@ -43,8 +66,104 @@ function drawBriefRecordForm(fields) { ); } -function compileBriefRecord(fields) { - console.log(js2JSON(fields)); +function saveBriefRecord(fields, editMarc) { + + // 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) { + dojo.mixin(fields, {picklist:plId}); + compileBriefRecord(fields, editMarc); + } + ); + + } else { + var id = plSelector.store.getValue(items[0], 'id'); + dojo.mixin(fields, {picklist:id}); + compileBriefRecord(fields, editMarc); + } + } + }); + + return false; +} + +function compileBriefRecord(fields, editMarc) { + + var baseString = '' + + ''; + + 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); + 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(fields.picklist) + location.href = location.href + '/../view/' + fields.picklist; + } + } + } + ); + return false; } diff --git a/Open-ILS/web/templates/default/acq/picklist/brief_record.tt2 b/Open-ILS/web/templates/default/acq/picklist/brief_record.tt2 index 73be27884e..923b0e240c 100644 --- a/Open-ILS/web/templates/default/acq/picklist/brief_record.tt2 +++ b/Open-ILS/web/templates/default/acq/picklist/brief_record.tt2 @@ -4,10 +4,14 @@

New Brief Record


+ + + + @@ -15,9 +19,8 @@ - + +
Add To Selection List
- -