1 dojo.require('dojo.date.locale');
2 dojo.require('dojo.date.stamp');
3 dojo.require('dijit.form.Button');
4 dojo.require('dijit.form.TextBox');
5 dojo.require('dijit.form.FilteringSelect');
6 dojo.require('dijit.form.Textarea');
7 dojo.require('dijit.ProgressBar');
8 dojo.require('openils.User');
9 dojo.require('openils.Util');
10 dojo.require('openils.acq.Lineitem');
11 dojo.require('openils.acq.PO');
12 dojo.require('openils.acq.Picklist');
13 dojo.require('openils.widget.AutoFieldWidget');
14 dojo.require('dojo.data.ItemFileReadStore');
15 dojo.require('openils.widget.ProgressDialog');
16 dojo.require('openils.PermaCrud');
18 dojo.requireLocalization('openils.acq', 'acq');
19 var localeStrings = dojo.i18n.getLocalization('openils.acq', 'acq');
21 function AcqLiTable() {
25 this.toggleState = false;
26 this.tbody = dojo.byId('acq-lit-tbody');
28 this.authtoken = openils.User.authtoken;
29 this.rowTemplate = this.tbody.removeChild(dojo.byId('acq-lit-row'));
30 this.copyTbody = dojo.byId('acq-lit-li-details-tbody');
31 this.copyRow = this.copyTbody.removeChild(dojo.byId('acq-lit-li-details-row'));
32 this.copyBatchRow = dojo.byId('acq-lit-li-details-batch-row');
33 this.copyBatchWidgets = {};
34 this.liNotesTbody = dojo.byId('acq-lit-notes-tbody');
35 this.liNotesRow = this.liNotesTbody.removeChild(dojo.byId('acq-lit-notes-row'));
37 dojo.connect(acqLitLiActionsSelector, 'onChange',
39 self.applySelectedLiAction(this.attr('value'))
40 acqLitLiActionsSelector.attr('value', '_');
43 acqLitCreatePoSubmit.onClick = function() {
44 acqLitPoCreateDialog.hide();
45 self._createPO(acqLitPoCreateDialog.getValues());
48 acqLitSavePlButton.onClick = function() {
49 acqLitSavePlDialog.hide();
50 self._savePl(acqLitSavePlDialog.getValues());
53 dojo.byId('acq-lit-notes-new-button').onclick = function(){acqLitCreateLiNoteDialog.show();}
55 dojo.byId('acq-lit-select-toggle').onclick = function(){self.toggleSelect()};
56 dojo.byId('acq-lit-info-back-button').onclick = function(){self.show('list')};
57 dojo.byId('acq-lit-copies-back-button').onclick = function(){self.show('list')};
58 dojo.byId('acq-lit-notes-back-button').onclick = function(){self.show('list')};
60 this.reset = function() {
61 while(self.tbody.childNodes[0])
62 self.tbody.removeChild(self.tbody.childNodes[0]);
66 this.setNext = function(handler) {
67 var link = dojo.byId('acq-lit-next');
69 dojo.style(link, 'visibility', 'visible');
70 link.onclick = handler;
72 dojo.style(link, 'visibility', 'hidden');
76 this.setPrev = function(handler) {
77 var link = dojo.byId('acq-lit-prev');
79 dojo.style(link, 'visibility', 'visible');
80 link.onclick = handler;
82 dojo.style(link, 'visibility', 'hidden');
86 this.show = function(div) {
87 openils.Util.hide('acq-lit-table-div');
88 openils.Util.hide('acq-lit-info-div');
89 openils.Util.hide('acq-lit-li-details');
90 openils.Util.hide('acq-lit-notes-div');
93 openils.Util.show('acq-lit-table-div');
96 openils.Util.show('acq-lit-info-div');
99 openils.Util.show('acq-lit-li-details');
102 openils.Util.show('acq-lit-notes-div');
106 openils.Util.show(div);
110 this.hide = function() {
114 this.toggleSelect = function() {
116 dojo.forEach(self.selectors, function(i){i.checked = false});
118 dojo.forEach(self.selectors, function(i){i.checked = true});
119 self.toggleState = !self.toggleState;
123 /** @param all If true, assume all are selected */
124 this.getSelected = function(all) {
126 dojo.forEach(self.selectors,
129 selected.push(self.liCache[i.parentNode.parentNode.getAttribute('li')]);
135 this.setRowAttr = function(td, liWrapper, field, type) {
136 var val = liWrapper.findAttr(field, type || 'lineitem_marc_attr_definition') || '';
137 td.appendChild(document.createTextNode(val));
140 this.addLineitem = function(li) {
141 this.liCache[li.id()] = li;
143 // sort the lineitem notes on edit_time
144 if(!li.lineitem_notes()) li.lineitem_notes([]);
146 var liWrapper = new openils.acq.Lineitem({lineitem:li});
147 var row = self.rowTemplate.cloneNode(true);
148 row.setAttribute('li', li.id());
149 var tds = dojo.query('[attr]', row);
150 dojo.forEach(tds, function(td) {self.setRowAttr(td, liWrapper, td.getAttribute('attr'), td.getAttribute('attr_type'));});
151 dojo.query('[name=source_label]', row)[0].appendChild(document.createTextNode(li.source_label()));
153 var isbn = liWrapper.findAttr('isbn', 'lineitem_marc_attr_definition');
155 // XXX media prefix for added content
156 dojo.query('[name=jacket]', row)[0].setAttribute('src', '/opac/extras/ac/jacket/small/' + isbn);
159 dojo.query('[attr=title]', row)[0].onclick = function() {self.drawInfo(li.id())};
160 dojo.query('[name=copieslink]', row)[0].onclick = function() {self.drawCopies(li.id())};
161 dojo.query('[name=count]', row)[0].innerHTML = li.item_count() || 0;
162 dojo.query('[name=notes_count]', row)[0].innerHTML = li.lineitem_notes().length;
163 dojo.query('[name=noteslink]', row)[0].onclick = function() {self.drawLiNotes(li)};
165 var priceInput = dojo.query('[name=price]', row)[0];
166 var priceData = liWrapper.getPrice();
167 priceInput.value = (priceData) ? priceData.price : '';
168 priceInput.onchange = function() { self.updateLiPrice(priceInput, li) };
170 var recv_link = dojo.query('[name=receive_link]', row)[0];
171 if(li.state() == 'received') {
172 openils.Util.hide(recv_link)
174 recv_link.onclick = function() {
176 openils.Util.hide(recv_link)
180 self.tbody.appendChild(row);
181 self.selectors.push(dojo.query('[name=selectbox]', row)[0]);
184 this.drawLiNotes = function(li) {
188 li.lineitem_notes().sort(
190 if(a.edit_time() < b.edit_time()) return 1;
196 while(this.liNotesTbody.childNodes[0])
197 this.liNotesTbody.removeChild(this.liNotesTbody.childNodes[0]);
200 acqLitCreateLiNoteSubmit.onClick = function() {
201 acqLitCreateLiNoteDialog.hide();
202 var value = acqLitCreateLiNoteDialog.getValues().note;
204 var note = new fieldmapper.acqlin();
207 li.lineitem_notes().push(note);
208 note.lineitem(li.id());
209 self.addLiNote(li, note);
212 dojo.byId('acq-lit-notes-save-button').onclick = function() {
213 self.updateLiNotes(li);
216 dojo.forEach(li.lineitem_notes(), function(note) { self.addLiNote(li, note) });
219 this.addLiNote = function(li, note) {
221 var row = self.liNotesRow.cloneNode(true);
222 dojo.query('[name=creator]', row)[0].innerHTML = note.creator() || ''; /* XXX */
223 dojo.query('[name=editor]', row)[0].innerHTML = note.editor() || ''; /* XXX */
225 if(note.create_time()) {
226 dojo.query('[name=create_time]', row)[0].innerHTML =
227 dojo.date.locale.format(
228 dojo.date.stamp.fromISOString(note.create_time()),
229 {formatLength:'short'});
232 if(note.edit_time()) {
233 dojo.query('[name=edit_time]', row)[0].innerHTML =
234 dojo.date.locale.format(
235 dojo.date.stamp.fromISOString(note.edit_time()),
236 {formatLength:'short'});
239 new openils.widget.AutoFieldWidget({
242 parentNode : dojo.query('[name=value]', row)[0],
243 widgetClass : 'dijit.form.Textarea',
246 dojo.connect(w, 'onChange',
248 note.value(this.attr('value'));
249 note.ischanged(true);
255 dojo.query('[name=delete]', row)[0].onclick = function() {
256 note.isdeleted(true);
257 self.liNotesTbody.removeChild(row);
260 self.liNotesTbody.appendChild(row);
263 this.updateLiNotes = function(li) {
264 progressDialog.show();
266 var notes = li.lineitem_notes().filter(
268 if(note.ischanged() || note.isnew() || note.isdeleted())
273 fieldmapper.standardRequest(
274 ['open-ils.acq', 'open-ils.acq.lineitem_note.cud.batch'],
276 params : [this.authtoken, notes],
277 onresponse : function(r) {
278 var resp = openils.Util.readResponse(r);
281 progressDialog.hide();
282 self.drawLiNotes(li);
286 progressDialog.update(resp);
288 var newnote = resp.note;
289 var oldnote = li.lineitem_notes().filter(function(n) { return (n.value() == newnote.value()) })[0];
290 var notes = li.lineitem_notes().filter(function(n) { return (n.value() != newnote.value()) });
292 if(!openils.Util.isTrue(oldnote.isdeleted()))
294 li.lineitem_notes(notes);
300 this.updateLiPrice = function(input, li) {
302 var price = input.value;
303 var liWrapper = new openils.acq.Lineitem({lineitem:li});
304 var oldPrice = liWrapper.getPrice() || null;
306 if(oldPrice) oldPrice = oldPrice.price;
307 if(price == oldPrice) return;
309 fieldmapper.standardRequest(
310 ['open-ils.acq', 'open-ils.acq.lineitem.price.set'],
312 params : [this.authtoken, li.id(), price],
313 oncomplete : function(r) {
314 openils.Util.readResponse(r);
320 this.removeLineitem = function(liId) {
321 this.tbody.removeChild(dojo.query('[li='+liId+']', this.tbody)[0]);
322 delete this.liCache[liId];
325 this.drawInfo = function(liId) {
327 openils.acq.Lineitem.fetchAttrDefs(
329 self._fetchLineitem(liId, function(li){self._drawInfo(li);});
334 this._fetchLineitem = function(liId, handler) {
336 var li = this.liCache[liId];
337 if(li && li.marc() && li.lineitem_details())
340 fieldmapper.standardRequest(
341 ['open-ils.acq', 'open-ils.acq.lineitem.retrieve'],
344 params: [self.authtoken, liId, {
346 flesh_li_details: true,
347 flesh_fund_debit: true }],
349 oncomplete: function(r) {
350 var li = openils.Util.readResponse(r);
357 this._drawInfo = function(li) {
359 acqLitEditOrderMarc.onClick = function() { self.editOrderMarc(li); }
360 acqLitEditILSMarc.onClick = function() { self.editILSMarc(li); }
363 openils.Util.hide('acq-lit-marc-order-record-label');
364 openils.Util.hide(acqLitEditOrderMarc.domNode);
365 openils.Util.show('acq-lit-marc-real-record-label');
366 openils.Util.show(acqLitEditILSMarc.domNode);
368 openils.Util.show('acq-lit-marc-order-record-label');
369 openils.Util.show(acqLitEditOrderMarc.domNode);
370 openils.Util.hide('acq-lit-marc-real-record-label');
371 openils.Util.hide(acqLitEditILSMarc.domNode);
374 this.drawMarcHTML(li);
375 this.infoTbody = dojo.byId('acq-lit-info-tbody');
378 this.infoRow = this.infoTbody.removeChild(dojo.byId('acq-lit-info-row'));
379 while(this.infoTbody.childNodes[0])
380 this.infoTbody.removeChild(this.infoTbody.childNodes[0]);
382 for(var i = 0; i < li.attributes().length; i++) {
383 var attr = li.attributes()[i];
384 var row = this.infoRow.cloneNode(true);
386 var type = attr.attr_type().replace(/lineitem_(.*)_attr_definition/, '$1');
387 var name = openils.acq.Lineitem.attrDefs[type].filter(
389 return (a.code() == attr.attr_name());
391 ).pop().description();
393 dojo.query('[name=label]', row)[0].appendChild(document.createTextNode(name));
394 dojo.query('[name=value]', row)[0].appendChild(document.createTextNode(attr.attr_value()));
395 this.infoTbody.appendChild(row);
399 openils.Util.show('acq-lit-info-cat-link');
400 var link = dojo.byId('acq-lit-info-cat-link').getElementsByTagName('a')[0];
401 var href = link.getAttribute('href');
403 link.setAttribute('href', href + li.eg_bib_id());
405 openils.Util.hide('acq-lit-info-cat-link');
409 this.drawMarcHTML = function(li) {
410 var params = [null, true, li.marc()];
412 params = [li.eg_bib_id(), true];
414 fieldmapper.standardRequest(
415 ['open-ils.search', 'open-ils.search.biblio.record.html'],
418 oncomplete: function(r) {
419 dojo.byId('acq-lit-marc-div').innerHTML =
420 openils.Util.readResponse(r);
426 this.drawCopies = function(liId) {
430 this.copyWidgetCache = {};
432 acqLitSaveCopies.onClick = function() { self.saveCopyChanges(liId) };
433 acqLitBatchUpdateCopies.onClick = function() { self.batchCopyUpdate() };
435 while(this.copyTbody.childNodes[0])
436 this.copyTbody.removeChild(this.copyTbody.childNodes[0]);
438 this._drawBatchCopyWidgets();
440 this._fetchDistribFormulas(
442 openils.acq.Lineitem.fetchAttrDefs(
444 self._fetchLineitem(liId, function(li){self._drawCopies(li);});
451 this._fetchDistribFormulas = function(onload) {
452 if(this.distribForms) {
456 fieldmapper.standardRequest(
457 ['open-ils.acq', 'open-ils.acq.distribution_formula.ranged.retrieve.atomic'],
459 params: [openils.User.authtoken],
460 oncomplete: function(r) {
461 self.distribForms = openils.Util.readResponse(r);
462 self.distribFormulaStore =
463 new dojo.data.ItemFileReadStore(
464 {data:acqdf.toStoreData(self.distribForms)});
472 this._drawBatchCopyWidgets = function() {
473 var row = this.copyBatchRow;
474 dojo.forEach(['fund', 'owning_lib', 'location', 'circ_modifier', 'cn_label'],
476 if(self.copyBatchRowDrawn) {
477 self.copyBatchWidgets[field].attr('value', null);
479 var widget = new openils.widget.AutoFieldWidget({
482 parentNode : dojo.query('[name='+field+']', row)[0],
483 orgLimitPerms : ['CREATE_PICKLIST'],
484 dijitArgs : {required:false}
487 self.copyBatchWidgets[field] = widget.widget;
491 this.copyBatchRowDrawn = true;
494 this.batchCopyUpdate = function() {
496 var fields = ['fund', 'owning_lib', 'location', 'circ_modifier', 'cn_label'];
497 for(var k in this.copyWidgetCache) {
498 var cache = this.copyWidgetCache[k];
499 dojo.forEach(fields, function(f) {
500 var newval = self.copyBatchWidgets[f].attr('value');
501 if(newval) cache[f].attr('value', newval);
506 this._drawCopies = function(li) {
507 acqLitAddCopyCount.onClick = function() {
508 var count = acqLitCopyCountInput.attr('value');
509 for(var i = 0; i < count; i++)
512 if(li.lineitem_details().length > 0) {
513 dojo.forEach(li.lineitem_details(),
515 self.addCopy(li, copy);
523 this.virtCopyId = -1;
524 this.addCopy = function(li, copy) {
525 var row = this.copyRow.cloneNode(true);
526 this.copyTbody.appendChild(row);
530 copy = new fieldmapper.acqlid();
532 copy.id(this.virtCopyId--);
533 copy.lineitem(li.id());
536 this.copyCache[copy.id()] = copy;
537 row.setAttribute('copy_id', copy.id());
538 self.copyWidgetCache[copy.id()] = {};
540 dojo.forEach(['fund', 'owning_lib', 'location', 'barcode', 'cn_label', 'circ_modifier', 'note'],
542 var widget = new openils.widget.AutoFieldWidget({
546 parentNode : dojo.query('[name='+field+']', row)[0],
547 orgLimitPerms : ['CREATE_PICKLIST'],
551 // make sure we capture the value from any async widgets
552 function(w, ww) { copy[field](ww.getFormattedValue()) }
554 dojo.connect(widget.widget, 'onChange',
556 if(copy.isnew() || val != copy[field]()) {
557 // prevent setting ischanged() automatically on widget load for existing copies
558 copy[field](widget.getFormattedValue())
559 copy.ischanged(true);
563 self.copyWidgetCache[copy.id()][field] = widget.widget;
567 var recv_link = dojo.query('[name=receive]', row)[0];
568 if(copy.recv_time()) {
569 openils.Util.hide(recv_link);
571 recv_link.onclick = function() {
572 self.receiveLid(copy);
573 openils.Util.hide(recv_link);
578 openils.Util.hide(dojo.query('[name=delete]', row)[0].parentNode);
580 dojo.query('[name=delete]', row)[0].onclick =
581 function() { self.deleteCopy(row) };
585 this.deleteCopy = function(row) {
586 var copy = this.copyCache[row.getAttribute('copy_id')];
587 copy.isdeleted(true);
589 delete this.copyCache[copy.id()];
590 this.copyTbody.removeChild(row);
593 this.saveCopyChanges = function(liId) {
597 openils.Util.show('acq-lit-update-copies-progress');
599 for(var id in this.copyCache) {
600 var c = this.copyCache[id];
601 if(c.isnew() || c.ischanged() || c.isdeleted()) {
602 if(c.id() < 0) c.id(null);
607 if(copies.length == 0)
610 fieldmapper.standardRequest(
611 ['open-ils.acq', 'open-ils.acq.lineitem_detail.cud.batch'],
613 params: [openils.User.authtoken, copies],
614 onresponse: function(r) {
615 var res = openils.Util.readResponse(r);
616 litUpdateCopiesProgress.update(res);
618 oncomplete: function() {
619 openils.Util.hide('acq-lit-update-copies-progress');
620 self.drawCopies(liId);
626 this.applySelectedLiAction = function(action) {
630 case 'delete_selected':
631 this._deleteLiList(self.getSelected());
636 if(!this.createPoProviderSelector) {
637 var widget = new openils.widget.AutoFieldWidget({
638 fmField : 'provider',
640 parentNode : dojo.byId('acq-lit-po-provider'),
641 orgLimitPerms : ['CREATE_PURCHASE_ORDER'],
644 function(w) { self.createPoProviderSelector = w; }
648 acqLitPoCreateDialog.show();
651 case 'save_picklist':
652 this._loadPLSelect();
653 acqLitSavePlDialog.show();
664 case 'rollback_receive_po':
665 this.rollbackPoReceive();
668 case 'create_assets':
674 this.createAssets = function() {
675 if(!this.isPO) return;
676 if(!confirm(localeStrings.CREATE_PO_ASSETS_CONFIRM)) return;
677 this.show('acq-lit-progress-numbers');
679 fieldmapper.standardRequest(
680 ['open-ils.acq', 'open-ils.acq.purchase_order.assets.create'],
682 params: [this.authtoken, this.isPO],
683 onresponse: function(r) {
684 var resp = openils.Util.readResponse(r);
685 self._updateProgressNumbers(resp, true);
691 this.printPO = function() {
692 if(!this.isPO) return;
693 progressDialog.show(true);
694 fieldmapper.standardRequest(
695 ['open-ils.acq', 'open-ils.acq.purchase_order.format'],
697 params: [this.authtoken, this.isPO, 'html'],
698 oncomplete: function(r) {
699 progressDialog.hide();
700 var evt = openils.Util.readResponse(r);
701 if(evt && evt.template_output()) {
702 win = window.open('','', 'resizable,width=800,height=600,scrollbars=1');
703 win.document.body.innerHTML = evt.template_output().data();
711 this.receivePO = function() {
712 if(!this.isPO) return;
713 this.show('acq-lit-progress-numbers');
715 fieldmapper.standardRequest(
716 ['open-ils.acq', 'open-ils.acq.purchase_order.receive'],
718 params: [this.authtoken, this.isPO],
719 onresponse : function(r) {
720 var resp = openils.Util.readResponse(r);
721 self._updateProgressNumbers(resp, true);
727 this.receiveLi = function(li) {
728 if(!this.isPO) return;
729 progressDialog.show(true);
730 fieldmapper.standardRequest(
731 ['open-ils.acq', 'open-ils.acq.lineitem.receive'],
733 params: [this.authtoken, li.id()],
734 onresponse : function(r) {
735 var resp = openils.Util.readResponse(r);
736 progressDialog.hide();
742 this.receiveLid = function(li) {
743 if(!this.isPO) return;
744 progressDialog.show(true);
745 fieldmapper.standardRequest(
746 ['open-ils.acq', 'open-ils.acq.lineitem_detail.receive'],
748 params: [this.authtoken, li.id()],
749 onresponse : function(r) {
750 var resp = openils.Util.readResponse(r);
751 progressDialog.hide();
757 this.rollbackPoReceive = function() {
758 if(!this.isPO) return;
759 if(!confirm(localeStrings.ROLLBACK_PO_RECEIVE_CONFIRM)) return;
760 this.show('acq-lit-progress-numbers');
762 fieldmapper.standardRequest(
763 ['open-ils.acq', 'open-ils.acq.purchase_order.receive.rollback'],
765 params: [this.authtoken, this.isPO],
766 onresponse : function(r) {
767 var resp = openils.Util.readResponse(r);
768 self._updateProgressNumbers(resp, true);
774 this._updateProgressNumbers = function(resp, reloadOnComplete) {
776 dojo.byId('acq-pl-lit-li-processed').innerHTML = resp.li;
777 dojo.byId('acq-pl-lit-lid-processed').innerHTML = resp.lid;
778 dojo.byId('acq-pl-lit-debits-processed').innerHTML = resp.debits_accrued;
779 dojo.byId('acq-pl-lit-bibs-processed').innerHTML = resp.bibs;
780 dojo.byId('acq-pl-lit-indexed-processed').innerHTML = resp.indexed;
781 dojo.byId('acq-pl-lit-copies-processed').innerHTML = resp.copies;
782 if(resp.complete && reloadOnComplete)
783 location.href = location.href;
787 this._createPO = function(fields) {
788 this.show('acq-lit-progress-numbers');
789 var po = new fieldmapper.acqpo();
790 po.provider(this.createPoProviderSelector.attr('value'));
792 var selected = this.getSelected( (fields.create_from == 'all') );
793 if(selected.length == 0) return;
795 var max = selected.length * 3;
798 fieldmapper.standardRequest(
799 ['open-ils.acq', 'open-ils.acq.purchase_order.create'],
802 openils.User.authtoken,
805 lineitems : selected.map(function(li) { return li.id() }),
806 create_assets : fields.create_assets[0],
810 onresponse : function(r) {
811 var resp = openils.Util.readResponse(r);
812 self._updateProgressNumbers(resp);
814 location.href = oilsBasePath + '/eg/acq/po/view/' + resp.purchase_order.id();
820 this._deleteLiList = function(list, idx) {
821 if(idx == null) idx = 0;
822 if(idx >= list.length) return;
823 var liId = list[idx].id();
824 fieldmapper.standardRequest(
825 ['open-ils.acq', 'open-ils.acq.lineitem.delete'],
827 params: [openils.User.authtoken, liId],
828 oncomplete: function(r) {
829 self.removeLineitem(liId);
830 self._deleteLiList(list, ++idx);
836 this.editOrderMarc = function(li) {
838 /* To run in Firefox directly, must set signed.applets.codebase_principal_support
839 to true in about:config */
841 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
842 win = window.open('/xul/server/cat/marcedit.xul'); // XXX version?
846 record : {marc : li.marc()},
848 label: 'Save Record', // XXX I18N
849 func: function(xmlString) {
851 fieldmapper.standardRequest(
852 ['open-ils.acq', 'open-ils.acq.lineitem.update'],
854 params: [openils.User.authtoken, li],
855 oncomplete: function(r) {
856 openils.Util.readResponse(r);
858 self.drawInfo(li.id())
868 this.editILSMarc = function(li) {
870 /* To run in Firefox directly, must set signed.applets.codebase_principal_support
871 to true in about:config */
873 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
874 win = window.open('/xul/server/cat/marcedit.xul'); // XXX version?
876 var bib = new openils.PermaCrud().retrieve('bre', li.eg_bib_id());
880 record : {marc : li.marc()},
882 label: 'Save Record', // XXX I18N
883 func: function(xmlString) {
885 fieldmapper.standardRequest(
886 ['open-ils.cat', 'open-ils.cat.biblio.record_entry.update'],
888 params: [openils.User.authtoken, bib],
889 oncomplete: function(r) {
890 openils.Util.readResponse(r);
892 self.drawInfo(li.id())
901 this._savePl = function(values) {
903 var selected = this.getSelected( (values.which == 'all') );
904 openils.Util.show('acq-lit-generic-progress');
906 if(values.new_name) {
907 openils.acq.Picklist.create(
908 {name: values.new_name},
910 self._updateLiList(id, selected, 0,
912 location.href = oilsBasePath + '/eg/acq/picklist/view/' + id;
916 } else if(values.existing_pl) {
917 // update lineitems to use an existing picklist
918 self._updateLiList(values.existing_pl, selected, 0,
920 location.href = oilsBasePath + '/eg/acq/picklist/view/' + values.existing_pl;
925 this._updateLiList = function(pl, list, idx, oncomplete) {
926 if(idx >= list.length) return oncomplete();
929 litGenericProgress.update({maximum: list.length, progress: idx});
930 new openils.acq.Lineitem({lineitem:li}).update(
932 self._updateLiList(pl, list, ++idx, oncomplete);
937 this._loadPLSelect = function() {
938 if(this._plSelectLoaded) return;
940 function handleResponse(r) {
941 plList.push(r.recv().content());
943 var method = 'open-ils.acq.picklist.user.retrieve';
944 fieldmapper.standardRequest(
945 ['open-ils.acq', method],
947 params: [this.authtoken],
948 onresponse: handleResponse,
949 oncomplete: function() {
950 self._plSelectLoaded = true;
951 acqLitAddExistingSelect.store =
952 new dojo.data.ItemFileReadStore({data:acqpl.toStoreData(plList)});
953 acqLitAddExistingSelect.setValue();