1 dump('entering manage_items.js\n');
3 function $(id) { return document.getElementById(id); }
5 if (typeof serial == 'undefined') serial = {};
6 serial.manage_items = function (params) {
8 JSAN.use('util.error'); this.error = new util.error();
9 JSAN.use('util.network'); this.network = new util.network();
10 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
12 this.current_sunit_id = -1; //default to **AUTO**
13 this.mode = 'receive';
17 serial.manage_items.prototype = {
19 'list_sitem_map' : {},
21 'set_sdist_ids' : function () {
25 obj.holding_lib = $('serial_item_lib_menu').value;
26 var robj = obj.network.request(
28 'open-ils.pcrud.id_list.sdist',
29 [ ses(), {"holding_lib" : obj.holding_lib, "+ssub":{"record_entry" : obj.docid}}, {"join":"ssub"} ]
32 if (typeof robj.ilsevent != 'undefined') throw(robj);
33 obj.sdist_ids = robj.length ? robj : [robj];
38 obj.error.standard_unexpected_error_alert('set_sdist_ids failed!',E);
42 'build_menus' : function () {
45 // draw library drop-down
46 obj.org_ids = obj.network.simple_request('FM_SSUB_AOU_IDS_RETRIEVE_VIA_RECORD_ID.authoritative',[ obj.docid ]);
47 if (typeof obj.org_ids.ilsevent != 'undefined') throw(obj.org_ids);
48 JSAN.use('util.functional');
49 obj.org_ids = util.functional.map_list( obj.org_ids, function (o) { return Number(o); });
51 var org = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
53 JSAN.use('util.file'); JSAN.use('util.widgets');
55 var file; var list_data; var ml;
57 file = new util.file('offline_ou_list');
58 if (file._file.exists()) {
59 list_data = file.get_object(); file.close();
60 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
61 ml.setAttribute('id','serial_item_lib_menu'); document.getElementById('serial_item_lib_menu_box').appendChild(ml);
62 //TODO: class this menu properly
63 for (var i = 0; i < obj.org_ids.length; i++) {
64 ml.getElementsByAttribute('value',obj.org_ids[i])[0].setAttribute('class','has_distributions');
66 /*TODO: add/enable this legend?
67 ml.firstChild.addEventListener(
70 document.getElementById('legend').setAttribute('hidden','false');
74 ml.firstChild.addEventListener(
77 document.getElementById('legend').setAttribute('hidden','true');
84 //if (document.getElementById('serial_item_refresh_button')) document.getElementById('serial_item_refresh_button').focus();
86 // get latest sdist id list based on library drowdown
88 obj.refresh_list('main');
89 obj.refresh_list('workarea');
95 throw(document.getElementById('catStrings').getString('staff.cat.copy_browser.missing_library') + '\n');
97 file = new util.file('serial_items_prefs.'+obj.data.server_unadorned);
98 util.widgets.load_attributes(file);
99 ml.value = ml.getAttribute('value');
102 ml.setAttribute('value',ml.value);
105 // deal with mode radio selectedIndex, as load_attributes is setting a "read-only" value
106 if ($('mode_receive').getAttribute('selected')) {
107 $('serial_manage_items_mode').selectedIndex = 0;
109 $('serial_manage_items_mode').selectedIndex = 1;
112 // setup recent sunits list
113 var recent_sunits_file = new util.file('serial_items_recent_sunits_'+obj.docid+'.'+obj.data.server_unadorned);
114 util.widgets.load_attributes(recent_sunits_file);
115 var recent_sunits_popup = $('serial_items_recent_sunits');
116 obj.sunit_entries = JSON2js(recent_sunits_popup.getAttribute('sunit_json'));
117 for (i = 0; i < obj.sunit_entries.length; i++) {
118 var sunit_info = obj.sunit_entries[i];
119 var new_menu_item = recent_sunits_popup.appendItem(sunit_info.label);
120 new_menu_item.setAttribute('id', 'serial_items_recent_sunits_entry_'+sunit_info.id);
121 new_menu_item.setAttribute('sunit_id', sunit_info.id);
122 new_menu_item.setAttribute('command', 'cmd_set_sunit');
126 'init' : function( params ) {
129 obj.docid = params['docid'];
132 obj.set_sunit($('serial_items_current_sunit').getAttribute('sunit_id'), $('serial_items_current_sunit').getAttribute('sunit_label'), $('serial_items_current_sunit').getAttribute('sdist_id'), $('serial_items_current_sunit').getAttribute('sstr_id'));
136 var mode_radio_group = $('serial_manage_items_mode');
137 obj.set_mode(mode_radio_group.selectedItem.id.substr(5));
138 mode_radio_group.addEventListener(
142 var mode = ev.target.id.substr(5); //strip out 'mode_'
144 obj.refresh_list('main');
145 obj.refresh_list('workarea');
149 $('serial_manage_items_show_all').addEventListener(
154 obj.refresh_list('main');
155 obj.refresh_list('workarea');
160 JSAN.use('util.controller'); obj.controller = new util.controller();
164 'save_columns' : [ [ 'command' ], function() { obj.lists.main.save_columns(); } ],
165 'cmd_broken' : [ ['command'], function() { alert('Not Yet Implemented'); } ],
166 'sel_clip' : [ ['command'], function() { obj.lists.main.clipboard(); } ],
171 var new_item = new sitem();
172 new_item.issuance(new siss());
173 new_item.stream(1); //FIXME: hard-coded stream
174 new_item.issuance().subscription(1); //FIXME: hard-coded subscription
176 new_item.issuance().isnew(1);
177 spawn_sitem_editor( {'sitems' : [new_item], 'do_edit' : 1 } );
179 obj.refresh_list('main');
182 obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.edit_items.error'),E);
190 if (!obj.retrieve_ids || obj.retrieve_ids.length == 0) return;
192 JSAN.use('util.functional');
193 var list = util.functional.map_list(
200 spawn_sitem_editor( { 'sitem_ids' : list, 'do_edit' : 1 } );
202 obj.refresh_list(obj.selected_list);
205 obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.edit_items.error'),E);
209 'cmd_reset_items' : [
213 if (!obj.retrieve_ids || obj.retrieve_ids.length == 0) return;
215 JSAN.use('util.functional');
216 var list = util.functional.map_list(
223 var robj = obj.network.request(
225 'open-ils.serial.reset_items',
228 if (typeof robj.ilsevent != 'undefined') throw(robj);
230 alert('Successfully reset '+robj.num_items+' item(s)');
232 obj.refresh_list('main');
233 obj.refresh_list('workarea');
235 obj.error.standard_unexpected_error_alert('staff.serial.manage_items.reset_items.error',E);
239 'cmd_delete_items' : [
243 JSAN.use('util.functional');
244 var list = util.functional.map_list(
247 return obj.list_sitem_map[o.sitem_id];
251 if (list.length != 1) {
252 delete_msg = document.getElementById('catStrings').getFormattedString('staff.cat.copy_browser.delete_items.confirm.plural', [list.length]);
254 delete_msg = document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.confirm');
256 var r = obj.error.yns_alert(
258 document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.title'),
259 document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.delete'),
260 document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.cancel'),
262 document.getElementById('commonStrings').getString('common.confirm')
266 for (var i = 0; i < list.length; i++) {
267 list[i].isdeleted('1');
269 var robj = obj.network.request(
271 'open-ils.serial.item.fleshed.batch.update',
272 [ ses(), list, true ],
275 'title' : document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.override'),
276 'overridable_events' : [ // FIXME: replace or delete these events
277 1208 /* TITLE_LAST_COPY */,
278 1227 /* COPY_DELETE_WARNING */,
282 if (robj == null) throw(robj);
283 if (typeof robj.ilsevent != 'undefined') {
284 if ( (robj.ilsevent != 0) && (robj.ilsevent != 1227 /* COPY_DELETE_WARNING */) && (robj.ilsevent != 1208 /* TITLE_LAST_COPY */) ) throw(robj);
286 obj.refresh_list(obj.selected_list);
291 obj.error.standard_unexpected_error_alert('staff.serial.manage_items.delete_items.error',E);
300 var target = evt.explicitOriginalTarget;
301 var label = target.label;
302 var sunit_id = target.getAttribute('sunit_id');
303 var sdist_id = target.getAttribute('sdist_id');
304 var sstr_id = target.getAttribute('sstr_id');
305 obj.set_sunit(sunit_id, label, sdist_id, sstr_id);
306 obj.save_sunit(sunit_id, label, sdist_id, sstr_id);
307 if (obj.mode == 'bind') {
308 obj.refresh_list('main');
309 obj.refresh_list('workarea');
312 obj.error.standard_unexpected_error_alert('cmd_set_sunit failed!',E);
316 'cmd_set_other_sunit' : [
319 obj.set_other_sunit();
320 if (obj.mode == 'bind') {
321 obj.refresh_list('main');
322 obj.refresh_list('workarea');
326 'cmd_predict_items' : [
329 alert('Subscription selection needed here'); //FIXME: make this prompt, or discard this feature
332 'cmd_receive_items' : [
336 JSAN.use('util.functional');
337 var donor_unit_ids = {};
338 var list = util.functional.map_list(
341 var item = obj.list_sitem_map[o.sitem_id];
343 donor_unit_ids[item.unit().id()] = 1;
345 item.unit(obj.current_sunit_id);
350 var method; var success_label;
351 if (obj.mode == 'receive') {
352 method = 'open-ils.serial.receive_items';
353 success_label = 'received';
354 } else { // bind mode
355 method = 'open-ils.serial.bind_items';
356 success_label = 'bound';
359 // deal with barcodes and call numbers for *NEW* units
361 var call_numbers = {};
362 var call_numbers_by_issuance_id = {};
364 if (obj.current_sunit_id < 0) { // **AUTO** or **NEW** units
365 var new_unit_barcode = '';
366 var new_unit_call_number = '';
367 for (var i = 0; i < list.length; i++) {
369 if (new_unit_barcode) {
370 barcodes[item.id()] = new_unit_barcode;
371 call_numbers[item.id()] = new_unit_call_number;
375 if (obj.current_sunit_id == -1) {
376 prompt_text = 'for '+item.issuance().label()+ ' from Distribution: '+item.stream().distribution().label()+'/'+item.stream().id()+':';
377 } else { // must be -2
378 prompt_text = 'for the new unit:';
382 var barcode = window.prompt('Please enter a barcode ' + prompt_text,
384 'Unit Barcode Prompt');
385 barcode = String( barcode ).replace(/\s/g,'');
386 /* Casting a possibly null input value to a String turns it into "null" */
387 if (!barcode || barcode == 'null') {
388 alert('Invalid barcode entered, defaulting to system-generated.');
391 var test = obj.network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ barcode ]);
392 if (typeof test.ilsevent == 'undefined') {
393 alert('Another copy has barcode "' + barcode + '", defaulting to system-generated.');
397 barcodes[item.id()] = barcode;
400 if (typeof call_numbers_by_issuance_id[item.issuance().id()] == 'undefined') {
401 var default_cn = 'DEFAULT';
402 // if they defined a *_call_number, honor it as the default
403 var preset_cn_id = item.stream().distribution()[obj.mode + '_call_number']();
405 var preset_default_cn = obj.network.request(
407 'open-ils.pcrud.retrieve.acn',
408 [ ses(), preset_cn_id ]
410 if (preset_default_cn) {
411 default_cn = preset_default_cn.label();
414 // for now, let's default to the last created call number if there is one
415 // TODO: make this distribution specific
416 var acn_list = obj.network.request(
418 'open-ils.pcrud.search.acn',
419 [ ses(), {"record" : obj.docid, "owning_lib" : obj.holding_lib, "deleted" : 'f' }, {"order_by" : {"acn" : "create_date DESC"}, "limit" : "1" } ]
423 default_cn = acn_list.label();
426 var call_number = window.prompt('Please enter/adjust a call number ' + prompt_text,
427 default_cn, //TODO: real default by setting
428 'Unit Call Number Prompt');
429 call_number = String( call_number ).replace(/^\s+/,'').replace(/\s$/,'');
430 /* Casting a possibly null input value to a String turns it into "null" */
431 if (!call_number || call_number == 'null') {
432 alert('Invalid call number entered, setting to "DEFAULT".');
433 call_number = 'DEFAULT'; //TODO: real default by setting
435 call_numbers[item.id()] = call_number;
436 call_numbers_by_issuance_id[item.issuance().id()] = call_number;
438 // we have already seen this same issuance, so use the same call number
439 call_numbers[item.id()] = call_numbers_by_issuance_id[item.issuance().id()];
442 if (obj.current_sunit_id == -2) {
443 new_unit_barcode = barcode;
444 new_unit_call_number = call_number;
449 var robj = obj.network.request(
452 [ ses(), list, barcodes, call_numbers, donor_unit_ids ]
454 if (typeof robj.ilsevent != 'undefined') throw(robj); //TODO: catch for override
456 alert('Successfully '+success_label+' '+robj.num_items+' item(s)');
458 if (obj.current_sunit_id == -2) {
459 obj.current_sunit_id = robj.new_unit_id;
462 obj.rebuild_current_sunit(list[0].stream().distribution().label(), list[0].stream().distribution().id(), list[0].stream().id());
463 obj.refresh_list('main');
464 obj.refresh_list('workarea');
467 obj.error.standard_unexpected_error_alert('cmd_receive_items failed!',E);
475 /*if (!obj.retrieve_ids || obj.retrieve_ids.length == 0) return;
477 JSAN.use('util.functional');
478 var list = util.functional.map_list(
485 spawn_sunit_editor( { 'sunit_ids' : [1], 'edit' : 1 } ); //FIXME: hard-coded sunit
488 obj.error.standard_unexpected_error_alert('cmd_edit_sunit failed!',E);
493 'cmd_items_print' : [ ['command'], function() { obj.items_print(obj.selected_list); } ],
494 'cmd_items_export' : [ ['command'], function() { obj.items_export(obj.selected_list); } ],
495 'cmd_refresh_list' : [ ['command'], function() { obj.set_sdist_ids(); obj.refresh_list('main'); obj.refresh_list('workarea'); } ]
500 obj.retrieve('main'); // retrieve main list
501 obj.retrieve('workarea'); // retrieve shelving unit list
503 obj.controller.view.sel_clip.setAttribute('disabled','true');
507 'items_print' : function(which) {
510 var list = obj.lists[which];
511 /* FIXME: serial items print template? JSAN.use('patron.util');
513 'patron' : patron.util.retrieve_fleshed_au_via_id(ses(),obj.patron_id),
514 'template' : 'items_out'
516 list.print( params );
518 obj.error.standard_unexpected_error_alert('manage_items printing',E);
522 'items_export' : function(which) {
525 var list = obj.lists[which];
526 list.dump_csv_to_clipboard();
528 obj.error.standard_unexpected_error_alert('manage_items export',E);
532 'rebuild_current_sunit' : function(sdist_label, sdist_id, sstr_id) {
535 var robj = obj.network.request(
537 'open-ils.pcrud.retrieve.sunit',
538 [ ses(), obj.current_sunit_id]
540 if (!robj) return; // current sunit is NEW or AUTO
542 var label = '[' + sdist_label + '/' + sstr_id + ' #' + obj.current_sunit_id + '] ' + robj.summary_contents();
543 obj.set_sunit(obj.current_sunit_id, label, sdist_id, sstr_id);
544 obj.save_sunit(obj.current_sunit_id, label, sdist_id, sstr_id);
546 obj.error.standard_unexpected_error_alert('serial items set_sunit',E);
550 'set_sunit' : function(sunit_id, label, sdist_id, sstr_id) {
553 obj.current_sunit_id = sunit_id;
554 obj.current_sunit_sdist_id = sdist_id;
555 obj.current_sunit_sstr_id = sstr_id;
557 $('serial_workarea_sunit_desc').firstChild.nodeValue = '**' + label + '**';
559 $('serial_workarea_sunit_desc').firstChild.nodeValue = label;
560 obj.add_sunit_to_menu(sunit_id, label, sdist_id, sstr_id);
563 obj.error.standard_unexpected_error_alert('serial items set_sunit',E);
567 'save_sunit' : function(sunit_id, label, sdist_id, sstr_id) {
570 $('serial_items_current_sunit').setAttribute('sunit_id', sunit_id);
571 $('serial_items_current_sunit').setAttribute('sunit_label', label);
573 $('serial_items_current_sunit').setAttribute('sdist_id', sdist_id);
574 $('serial_items_current_sunit').setAttribute('sstr_id', sstr_id);
576 var recent_sunits_file = new util.file('serial_items_recent_sunits_'+obj.docid+'.'+obj.data.server_unadorned);
577 util.widgets.save_attributes(recent_sunits_file, { 'serial_items_recent_sunits' : [ 'sunit_json' ], 'serial_items_current_sunit' : [ 'sunit_id', 'sunit_label', 'sdist_id', 'sstr_id' ] });
579 obj.error.standard_unexpected_error_alert('serial items save_sunit',E);
583 'set_other_sunit' : function() {
586 JSAN.use('util.window'); var win = new util.window();
587 var select_unit_window = win.open(
588 xulG.url_prefix(urls.XUL_SERIAL_SELECT_UNIT),
590 'chrome,resizable,modal,centerscreen',
591 {'sdist_ids' : obj.sdist_ids}
593 if (!select_unit_window.sunit_selection) {
597 var selection = select_unit_window.sunit_selection;
598 var sunit_id = selection.sunit;
599 var sdist_id = selection.sdist;
600 var sstr_id = selection.sstr;
601 var label = selection.label;
603 obj.set_sunit(sunit_id, label, sdist_id, sstr_id);
604 obj.save_sunit(sunit_id, label, sdist_id, sstr_id);
606 obj.error.standard_unexpected_error_alert('serial items set_other_sunit',E);
610 'add_sunit_to_menu' : function(sunit_id, label, sdist_id, sstr_id) {
614 // check if it is already in sunit_entries, remove it
615 for (i = 0; i < obj.sunit_entries.length; i++) {
616 if (obj.sunit_entries[i].id == sunit_id) {
617 obj.sunit_entries.splice(i,1);
618 var menu_item = $('serial_items_recent_sunits_entry_'+sunit_id);
619 menu_item.parentNode.removeChild(menu_item);
623 // add to front of array
624 obj.sunit_entries.unshift({"id" : sunit_id, "label" : label, "sdist_id" : sdist_id, "sstr_id" : sstr_id});
625 var recent_sunits_popup = $('serial_items_recent_sunits');
626 var new_menu_item = recent_sunits_popup.insertItemAt(0,label);
627 new_menu_item.setAttribute('id', 'serial_items_recent_sunits_entry_'+sunit_id);
628 new_menu_item.setAttribute('sunit_id', sunit_id);
629 new_menu_item.setAttribute('sdist_id', sdist_id);
630 new_menu_item.setAttribute('sstr_id', sstr_id);
631 new_menu_item.setAttribute('command', 'cmd_set_sunit');
633 // pop off from sunit_entries if it already has 10 sunits
634 if (obj.sunit_entries.length > 10) {
635 var sunit_info = obj.sunit_entries.pop();
636 var menu_item = $('serial_items_recent_sunits_entry_'+sunit_info.id);
637 menu_item.parentNode.removeChild(menu_item);
640 recent_sunits_popup.setAttribute('sunit_json', js2JSON(obj.sunit_entries));
643 obj.error.standard_unexpected_error_alert('serial items add_sunit_to_menu',E);
647 'set_mode' : function(mode) {
656 if (mode == 'receive') {
657 $('serial_workarea_mode_label').value = 'Recently Received';
658 if ($('serial_manage_items_show_all').checked) {
659 obj.lists.main.sitem_retrieve_params = {};
661 obj.lists.main.sitem_retrieve_params = {'date_received' : null };
663 obj.lists.main.sitem_extra_params ={'order_by' : {'sitem' : 'date_expected ASC, stream ASC'}};
665 obj.lists.workarea.sitem_retrieve_params = {'date_received' : {"!=" : null}};
666 obj.lists.workarea.sitem_extra_params ={'order_by' : {'sitem' : 'date_received DESC'}, 'limit' : 30};
667 } else { // bind mode
668 $('serial_workarea_mode_label').value = 'Bound Items in Current Working Unit';
669 if ($('serial_manage_items_show_all').checked) {
670 obj.lists.main.sitem_retrieve_params = {};
672 obj.lists.main.sitem_retrieve_params = {'date_received' : {'!=' : null}}; // unit set dynamically in 'retrieve'
674 obj.lists.main.sitem_extra_params ={'order_by' : {'sitem' : 'date_expected ASC, stream ASC'}};
676 obj.lists.workarea.sitem_retrieve_params = {}; // unit set dynamically in 'retrieve'
677 obj.lists.workarea.sitem_extra_params ={'order_by' : {'sitem' : 'date_received DESC'}};
679 // default to **NEW UNIT**
680 // For now, keep the unit static. TODO: Eventually, keep track of and store the last used unit value for both receive and bind separately
681 // obj.set_sunit(-2, 'New Unit', '', '');
685 'save_settings' : function() {
688 JSAN.use('util.file'); var file = new util.file('serial_items_prefs.'+obj.data.server_unadorned);
689 util.widgets.save_attributes(file, { 'serial_item_lib_menu' : [ 'value' ], 'mode_receive' : [ 'selected' ], 'mode_bind' : [ 'selected' ], 'serial_manage_items_show_all' : [ 'checked' ] });
692 'init_lists' : function() {
695 JSAN.use('circ.util');
696 var columns = item_columns({});
698 function retrieve_row(params) {
700 var row = params.row;
701 obj.network.simple_request(
702 'FM_SITEM_FLESHED_BATCH_RETRIEVE.authoritative',
704 //[ ses(), row.my.sitem_id, {"flesh":2,"flesh_fields":{"sitem":["creator","editor","issuance","stream","unit","notes"], "sunit":["call_number"], "sstr":["distribution"]}}],
707 var robj = req.getResultObject();
708 if (typeof robj.ilsevent != 'undefined') throw(robj);
709 if (typeof robj.ilsevent == 'null') throw('null result');
711 obj.list_sitem_map[sitem.id()] = sitem;
712 row.my.sitem = sitem;
713 //params.row_node.setAttribute( 'retrieve_id', js2JSON({'copy_id':copy_id,'circ_id':row.my.circ.id(),'barcode':row.my.acp.barcode(),'doc_id': ( row.my.record ? row.my.record.id() : null ) }) );
714 params.row_node.setAttribute( 'retrieve_id', js2JSON({'sitem_id':sitem.id()}) );
715 dump('dumping... ' + js2JSON(obj.list_sitem_map[sitem.id()]));
716 if (typeof params.on_retrieve == 'function') {
717 params.on_retrieve(row);
721 obj.error.standard_unexpected_error_alert('staff.serial.manage_items.retrieve_row.callback_error', E);
727 obj.error.standard_unexpected_error_alert('staff.serial.manage_items.retrieve_row.error_in_retrieve_row',E);
732 JSAN.use('util.list');
735 obj.lists.main = new util.list('item_tree');
739 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
740 'retrieve_row' : retrieve_row,
741 'on_select' : function(ev) {
742 obj.selected_list = 'main';
743 JSAN.use('util.functional');
744 var sel = obj.lists.main.retrieve_selection();
745 obj.controller.view.sel_clip.setAttribute('disabled',sel.length < 1);
746 var list = util.functional.map_list(
748 function(o) { return JSON2js( o.getAttribute('retrieve_id') ); }
750 if (typeof obj.on_select == 'function') {
753 if (typeof window.xulG == 'object' && typeof window.xulG.on_select == 'function') {
754 obj.error.sdump('D_CAT','manage_items: Calling external .on_select()\n');
755 window.xulG.on_select(list);
761 obj.lists.workarea = new util.list('workarea_tree');
762 obj.lists.workarea.init(
765 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
766 'retrieve_row' : retrieve_row,
767 'on_select' : function(ev) {
768 obj.selected_list = 'workarea';
769 JSAN.use('util.functional');
770 var sel = obj.lists.workarea.retrieve_selection();
771 obj.controller.view.sel_clip.setAttribute('disabled',sel.length < 1);
772 var list = util.functional.map_list(
774 function(o) { return JSON2js( o.getAttribute('retrieve_id') ); }
776 if (typeof obj.on_select == 'function') {
779 if (typeof window.xulG == 'object' && typeof window.xulG.on_select == 'function') {
780 obj.error.sdump('D_CAT','serctrl: Calling external .on_select()\n');
781 window.xulG.on_select(list);
783 obj.error.sdump('D_CAT','serctrl: No external .on_select()\n');
790 'refresh_list' : function(list_name) {
793 //TODO Optimize this?
794 obj.retrieve(list_name);
797 'retrieve' : function(list_name) {
799 var list = obj.lists[list_name];
803 if (!obj.sdist_ids.length) { // no sdists to retrieve items for
807 var rparams = list.sitem_retrieve_params;
809 rparams['+sstr'] = { "distribution" : obj.sdist_ids };
811 if (obj.mode == 'bind') {
812 if (list_name == 'workarea') {
813 rparams['unit'] = obj.current_sunit_id;
814 } else if (!$('serial_manage_items_show_all').checked){
815 rparams['unit'] = {"<>" : obj.current_sunit_id};
819 var other_params = list.sitem_extra_params;
820 other_params.join = 'sstr';
822 robj = obj.network.simple_request(
824 [ ses(), rparams, other_params ]
828 } else if (typeof robj.ilsevent!='undefined') {
829 obj.error.standard_unexpected_error_alert('Failed to retrieve serial item ID list',E);
830 } else if (!robj.length) {
834 for (i = 0; i < robj.length; i++) {
835 list.append( { 'row' : { 'my' : { 'sitem_id' : robj[i] } }, 'to_bottom' : true, 'no_auto_select' : true } );
839 'on_select' : function(list) {
841 dump('manage_items.on_select list = ' + js2JSON(list) + '\n');
845 /*obj.controller.view.cmd_items_claimed_returned.setAttribute('disabled','false');
846 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','false');*/
848 obj.retrieve_ids = list;
852 function item_columns(modify,params) {
854 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
855 //JSAN.use('util.network'); var network = new util.network();
864 'render' : function(my) { return my.sitem.id(); },
865 'persist' : 'hidden width ordinal'
869 'label' : 'Issuance Label',
873 'render' : function(my) { return my.sitem.issuance().label(); },
874 'persist' : 'hidden width ordinal'
877 'id' : 'distribution',
878 'label' : 'Distribution',
882 'persist' : 'hidden width ordinal',
883 'render' : function(my) { return my.sitem.stream().distribution().label(); }
887 'label' : 'Stream ID',
891 'persist' : 'hidden width ordinal',
892 'render' : function(my) { return my.sitem.stream().id(); }
895 'id' : 'date_published',
896 'label' : 'Date Published',
900 'render' : function(my) { return my.sitem.issuance().date_published().substr(0,10); },
901 'persist' : 'hidden width ordinal'
904 'id' : 'date_expected',
905 'label' : 'Date Expected',
909 'render' : function(my) { return my.sitem.date_expected().substr(0,10); },
910 'persist' : 'hidden width ordinal'
913 'id' : 'date_received',
914 'label' : 'Date Received',
918 'render' : function(my) { return my.sitem.date_received().substr(0,10); },
919 'persist' : 'hidden width ordinal'
927 'render' : function(my) { return my.sitem.notes().length; },
928 'persist' : 'hidden width ordinal'
931 'id' : 'call_number',
932 'label' : 'Call Number',
936 'persist' : 'hidden width ordinal',
937 'render' : function(my) { return my.sitem.unit().call_number().label(); }
940 'id' : 'unit_id_contents',
941 'label' : 'Unit ID / Contents',
945 'render' : function(my) { return '[' + my.sitem.unit().id() + '] ' + my.sitem.unit().summary_contents() ; },
946 'persist' : 'hidden width ordinal'
954 'persist' : 'hidden width ordinal',
955 'render' : function(my) { return my.sitem.creator().usrname(); }
958 'id' : 'create_date',
959 'label' : document.getElementById('circStrings').getString('staff.circ.utils.create_date'),
963 'persist' : 'hidden width ordinal',
964 'render' : function(my) { return my.sitem.create_date().substr(0,10); }
972 'persist' : 'hidden width ordinal',
973 'render' : function(my) { return my.sitem.editor().usrname(); }
977 'label' : document.getElementById('circStrings').getString('staff.circ.utils.edit_date'),
981 'persist' : 'hidden width ordinal',
982 'render' : function(my) { return my.sitem.edit_date().substr(0,10); }
985 'id' : 'holding_code',
986 'label' : 'Holding Code',
990 'render' : function(my) { return my.sitem.issuance().holding_code(); },
991 'persist' : 'hidden width ordinal'
994 'id' : 'holding_type',
995 'label' : 'Holding Type',
999 'render' : function(my) { return my.sitem.issuance().holding_type(); },
1000 'persist' : 'hidden width ordinal'
1003 'id' : 'holding_link_id',
1004 'label' : 'Holding Link ID',
1008 'render' : function(my) { return my.sitem.issuance().holding_link_id(); },
1009 'persist' : 'hidden width ordinal'
1012 for (var i = 0; i < c.length; i++) {
1013 if (modify[ c[i].id ]) {
1014 for (var j in modify[ c[i].id ]) {
1015 c[i][j] = modify[ c[i].id ][j];
1020 if (params.just_these) {
1021 JSAN.use('util.functional');
1023 for (var i = 0; i < params.just_these.length; i++) {
1024 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
1025 new_c.push( function(y){ return y; }( x ) );
1029 if (params.except_these) {
1030 JSAN.use('util.functional');
1032 for (var i = 0; i < c.length; i++) {
1033 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
1034 if (!x) new_c.push(c[i]);
1039 //return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
1043 spawn_sitem_editor = function(params) {
1045 if (!params.sitem_ids && !params.sitems) return;
1046 if (params.sitem_ids && params.sitem_ids.length == 0) return;
1047 if (params.sitems && params.sitems.length == 0) return;
1048 if (params.sitem_ids) params.sitem_ids = js2JSON(params.sitem_ids); // legacy
1049 if (!params.caller_handles_update) params.handle_update = 1; // legacy
1052 JSAN.use('util.network'); obj.network = new util.network();
1053 JSAN.use('util.error'); obj.error = new util.error();
1056 if (params.sitem_ids && params.sitem_ids.length > 1 && params.do_edit == 1)
1057 title = 'Batch Edit Items';
1058 else /* if(params.sitems && params.sitems.length > 1 && params.do_edit == 1)
1059 title = 'Batch View Items';
1060 else if(params.sitem_ids && params.sitem_ids.length == 1) */
1061 title = 'Edit Item';/*
1063 title = 'View Item';*/
1065 JSAN.use('util.window'); var win = new util.window();
1066 params.in_modal = true;
1067 var my_xulG = win.open(
1068 (urls.XUL_SERIAL_ITEM_EDITOR),
1070 'chrome,modal,resizable',
1073 if (my_xulG.sitems && params.do_edit) {
1074 return my_xulG.sitems;
1079 JSAN.use('util.error'); var error = new util.error();
1080 error.standard_unexpected_error_alert('error in spawn_sitem_editor',E);
1084 dump('exiting manage_items.js\n');