1 dojo.require('dojo.data.ItemFileReadStore');
2 dojo.require('dijit.form.Form');
3 dojo.require('dijit.form.TextBox');
4 dojo.require('dijit.form.DateTextBox');
5 dojo.require('dijit.form.Button');
6 dojo.require('dijit.form.ComboBox');
7 dojo.require('openils.User');
8 dojo.require('openils.widget.AutoFieldWidget');
9 dojo.require('openils.MarcXPathParser');
10 dojo.require('openils.acq.Picklist');
11 dojo.require('openils.CGI');
16 var paramUR = null; // User Request ID
18 function drawBriefRecordForm(fields) {
20 var tbody = dojo.byId('acq-brief-record-tbody');
21 var rowTmpl = dojo.byId('acq-brief-record-row');
22 var cgi = new openils.CGI();
23 paramPL = cgi.param('pl');
24 paramPO = cgi.param('po');
25 paramUR = cgi.param('ur');
26 prepop = JSON2js(cgi.param('prepop'));
30 openils.Util.hide('acq-brief-record-po-row');
32 fieldmapper.standardRequest(
33 ['open-ils.acq', 'open-ils.acq.picklist.retrieve.authoritative'],
35 params: [openils.User.authtoken, paramPL],
36 oncomplete : function(r) {
37 var pl = openils.Util.readResponse(r);
39 new dojo.data.ItemFileReadStore({data:acqpl.toStoreData([pl])});
40 plSelector.attr('value', pl.name());
41 plSelector.attr('disabled', true);
49 openils.Util.hide('acq-brief-record-pl-row');
50 poNumber.attr('value', paramPO);
53 openils.Util.hide('acq-brief-record-po-row');
54 fieldmapper.standardRequest(
55 ['open-ils.acq', 'open-ils.acq.picklist.user.retrieve.atomic'],
57 params: [openils.User.authtoken],
58 oncomplete : function(r) {
59 var list = openils.Util.readResponse(r);
61 new dojo.data.ItemFileReadStore({data:acqpl.toStoreData(list)});
70 marcEditButton.onClick = function(fields) {
71 saveBriefRecord(fields, true);
75 fieldmapper.standardRequest(
76 ['open-ils.acq', 'open-ils.acq.lineitem_attr_definition.retrieve.all'],
78 params : [openils.User.authtoken],
80 oncomplete : function(r) {
81 var attrs = openils.Util.readResponse(r);
82 if(attrs && attrs.marc) {
84 attrs = attrs.marc.sort(
86 if(a.description < b.description)
92 var xpathParser = new openils.MarcXPathParser();
95 attrDefs[def.code()] = xpathParser.parse(def.xpath());
96 var row = rowTmpl.cloneNode(true);
97 dojo.query('[name=name]', row)[0].innerHTML = def.description();
98 var textbox = new dijit.form.TextBox(
100 dojo.query('[name=widget]', row)[0]
102 if (prepop && prepop[def.id()])
103 textbox.attr("value", prepop[def.id()]);
104 tbody.appendChild(row);
113 function saveBriefRecord(fields, editMarc) {
116 fields.picklist = paramPL;
118 compileBriefRecord(fields, editMarc);
124 delete fields.picklist;
125 compileBriefRecord(fields, editMarc);
129 // first, deal with the selection list
130 var picklist = plSelector.attr('value');
133 compileBriefRecord(fields, editMarc);
137 // ComboBox value is the display string. find the actual picklist
138 // and create a new one if necessary
139 plSelector.store.fetch({
140 query : {name:picklist},
142 onComplete : function(items) {
143 if(items.length == 0) {
145 // create a new picklist for these items
146 openils.acq.Picklist.create(
147 {name:picklist, org_unit: openils.User.user.ws_ou()},
149 fields.picklist = plId;
150 compileBriefRecord(fields, editMarc);
155 var id = plSelector.store.getValue(items[0], 'id');
156 fields.picklist = id;
157 compileBriefRecord(fields, editMarc);
165 function compileBriefRecord(fields, editMarc) {
167 var baseString = '<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
168 'xmlns="http://www.loc.gov/MARC21/slim" ' +
169 'xmlns:marc="http://www.loc.gov/MARC21/slim" ' +
170 'xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd">' +
171 '<leader>00000nam a22000007a 4500</leader></record>';
173 var doc = new DOMParser().parseFromString(baseString, 'text/xml');
175 for(var f in fields) {
177 var def = attrDefs[f];
179 var value = fields[f];
182 var dfNode = doc.createElementNS('http://www.loc.gov/MARC21/slim', 'marc:datafield');
183 var sfNode = doc.createElementNS('http://www.loc.gov/MARC21/slim', 'marc:subfield');
185 // creates tags and fields in the document. If there are more than one
186 // option for the tag or code, use the first in the list
187 dfNode.setAttribute('tag', ''+def.tags[0]);
188 dfNode.setAttribute('ind1', ' ');
189 dfNode.setAttribute('ind2', ' ');
190 sfNode.setAttribute('code', ''+def.subfields[0]);
191 tNode = doc.createTextNode(value);
193 sfNode.appendChild(tNode);
194 dfNode.appendChild(sfNode);
195 doc.documentElement.appendChild(dfNode);
199 var xmlString = new XMLSerializer().serializeToString(doc);
201 var li = new fieldmapper.jub();
203 li.picklist(fields.picklist);
204 if(fields.po) li.purchase_order(fields.po);
205 li.selector(openils.User.user.id());
206 li.creator(openils.User.user.id());
207 li.editor(openils.User.user.id());
209 fieldmapper.standardRequest(
210 ['open-ils.acq', 'open-ils.acq.lineitem.create'],
212 params : [openils.User.authtoken, li],
213 oncomplete : function(r) {
214 var id = openils.Util.readResponse(r);
217 // XXX load marc editor
218 } else if (paramUR) {
219 // update User Request with Lineitem and reload request interface
220 var pcrud = new openils.PermaCrud({ authtoken : openils.User.authtoken });
221 var aur_obj = pcrud.retrieve('aur',paramUR);
222 aur_obj.lineitem( id );
223 pcrud.update( aur_obj, {
224 'oncomplete' : function(r, cudResults) {
225 // Goes back to the list view
226 location.href = oilsBasePath + '/acq/picklist/user_request';
231 location.href = oilsBasePath + '/acq/picklist/view/' + fields.picklist;
233 location.href = oilsBasePath + '/acq/po/view/' + fields.po;
242 openils.Util.addOnLoad(drawBriefRecordForm);