1 var data; var list; var error; var net; var sound;
3 var bpbcm_barcode_map = {};
8 //// parent interfaces may call this
9 function default_focus() { document.getElementById('scanbox').focus(); }
14 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
16 commonStrings = $('commonStrings');
17 catStrings = $('catStrings');
19 if (typeof JSAN == 'undefined') {
21 commonStrings.getString('common.jsan.missing')
25 JSAN.errorLevel = "die"; // none, warn, or die
26 JSAN.addRepository('..');
28 JSAN.use('util.error'); error = new util.error();
29 JSAN.use('util.sound'); sound = new util.sound();
30 JSAN.use('util.widgets');
31 JSAN.use('util.functional');
32 JSAN.use('util.list');
33 JSAN.use('OpenILS.data'); data = new OpenILS.data();
34 data.stash_retrieve();
35 JSAN.use('util.network'); net = new util.network();
36 dojo.require('openils.PermaCrud');
41 $('list_actions').appendChild( list.render_list_actions() );
42 list.set_list_actions();
44 $('submit').addEventListener('command', function() { handle_submit(true); }, false);
45 $('remove').addEventListener('command', function() { handle_remove(); }, false);
46 $('change').addEventListener('command', function() { handle_change(); }, false);
47 $('opac').addEventListener('command', function() { handle_opac(); }, false);
48 $('scanbox').addEventListener('keypress', handle_keypress, false);
51 if (typeof xulG.set_tab_name == 'function') {
53 catStrings.getFormattedString(
54 'staff.cat.manage_multi_bib_items.tab_name',
55 [ xul_param('docid') ]
60 if (! xul_param('no_bib_summary')) {
61 if (typeof bib_brief_overlay == 'function') {
62 $("bib_brief_groupbox").hidden = false;
63 bib_brief_overlay( { 'mvr_id' : xul_param('docid') } );
68 alert('Error in manage_multi_home_items.js, my_init(): ' + E);
72 function init_menu() {
74 var ml = util.widgets.make_menulist(
75 util.functional.map_list(
76 data.list.bpt.sort( function(a,b) {
77 if (a.name().toUpperCase() < b.name().toUpperCase()) return -1;
78 if (a.name().toUpperCase() > b.name().toUpperCase()) return 1;
82 return [ obj.name(), obj.id() ];
86 ml.setAttribute('id','bpt_menu');
87 $('menu_placeholder').appendChild(ml);
89 alert('Error in manage_multi_home_items.js, init_menu(): ' + E);
93 function init_list() {
95 list = new util.list( 'list' );
98 'retrieve_row' : function(params) {
99 if (params.row.my.bpbcm) {
100 params.row_node.setAttribute('retrieve_id',params.row.my.bpbcm.id());
102 params.on_retrieve(params.row);
112 'editable' : false, 'render' : function(my) { return my.result; }
115 list.fm_columns('acp', {
116 '*' : { 'expanded_label' : false, 'hidden' : true },
117 'acp_barcode' : { 'hidden' : false },
118 'acp_opac_visible' : { 'hidden' : false },
119 'acp_holdable' : { 'hidden' : false }
122 list.fm_columns('mvr', {
123 '*' : { 'expanded_label' : false, 'hidden' : true },
124 'mvr_title' : { 'hidden' : false },
125 'mvr_author' : { 'hidden' : false },
126 'mvr_isbn' : { 'hidden' : false },
127 'mvr_tcn' : { 'hidden' : false },
128 'mvr_id' : { 'hidden' : false }
131 list.fm_columns('bpbcm', {
132 '*' : { 'expanded_label' : false, 'hidden' : true },
133 'bpbcm_peer_type' : {
135 'render' : function(my) { return my.bpbcm ? data.hash.bpt[ my.bpbcm.peer_type() ].name() : ''; }
142 alert('Error in manage_multi_home_items.js, init_list(): ' + E);
146 function handle_keypress(ev) {
148 if (ev.keyCode && ev.keyCode == 13) {
152 alert('Error in manage_multi_home_items.js, handle_keypress(): ' + E);
156 function handle_submit(create,my_bpbcm,my_barcode) {
161 barcode = my_barcode;
163 barcode = $('scanbox').value;
164 $('scanbox').value = '';
169 var placeholder_acp = new acp();
170 placeholder_acp.barcode(barcode);
174 'acp' : placeholder_acp,
180 if (barcode && rows[barcode]) {
181 var node = rows[barcode].my_node;
182 var parentNode = node.parentNode;
183 parentNode.removeChild( node );
184 delete(rows[barcode]);
187 row_params = list.append(row_params);
189 rows[barcode] = row_params;
192 function handle_req(req) {
194 var robj = req.getResultObject();
195 row_params.row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.error');
196 if (typeof robj.ilsevent != 'undefined') {
197 row_params.row.my.result = robj.textcode;
199 rows[robj.copy.barcode()] = row_params;
200 if (row_params.row.my.bpbcm) {
201 bpbcm_barcode_map[ row_params.row.my.bpbcm.id() ] = robj.copy.barcode();
204 row_params.row.my.acp = robj.copy;
205 row_params.row.my.mvr = robj.mvr;
207 if (create && robj.mvr.doc_id() != xul_param('docid')) {
208 var new_bpbcm = new bpbcm();
210 new_bpbcm.peer_type($('bpt_menu').value);
211 new_bpbcm.peer_record(xul_param('docid'));
212 new_bpbcm.target_copy(robj.copy.id());
213 var pcrud = new openils.PermaCrud( { authtoken :ses() });
214 pcrud.create(new_bpbcm, {
215 "onerror" : function(r) {
216 dump('onerror, r = ' + js2JSON(r) + '\n');
218 "oncomplete": function (r, objs) {
222 row_params.row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.success');
223 row_params.row.my.bpbcm = obj;
224 bpbcm_barcode_map[ obj.id() ] = robj.copy.barcode();
226 row_params.row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.failed');
229 list.refresh_row( row_params );
231 alert('Error in manage_multi_home_items.js, handle_submit, pcrud create oncomplete callback: ' + E);
236 if (robj.mvr.doc_id() != xul_param('docid')) {
237 row_params.row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.item_linked_to_bib');
239 row_params.row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.item_native_to_bib');
243 list.refresh_row( row_params );
245 alert('Error in manage_multi_home_items.js, handle_submit, acp details callback: ' + E);
251 'FM_ACP_DETAILS', // FIXME: want this to be authoritative
252 [ ses(), my_bpbcm.target_copy() ],
257 'FM_ACP_DETAILS_VIA_BARCODE.authoritative',
264 alert('Error in manage_multi_home_items.js, handle_submit(): ' + E);
268 function populate_list() {
270 var pcrud = new openils.PermaCrud( { authtoken :ses() });
274 peer_record : xul_param('docid')
279 onerror : function(r) {
280 alert('Error in manage_multi_home_items.js, populate_list(), pcrud.search onerror: ' + r);
282 oncomplete : function() {
283 if (xul_param('barcodes')) { // incoming from Holdings Maintenance
284 handle_barcodes( xul_param('barcodes') );
287 onresponse : function(r) {
289 var my_bpbcm = openils.Util.readResponse(r);
290 if (typeof my_bpbcm.ils_event != 'undefined') { throw(my_bpbcm); }
291 handle_submit(false,my_bpbcm);
293 alert('Error in manage_multi_home_items.js, populate_list(), pcrud.search onresponse: ' + E);
300 alert('Error in manage_multi_home_items.js, populate_list(): ' + E);
304 function handle_change() {
306 var node_list = list.retrieve_selection();
308 for (var i = 0; i < node_list.length; i++) {
309 var retrieve_id = node_list[i].getAttribute('retrieve_id');
310 if (retrieve_id && retrieve_id != 'undefined') {
311 eligibles.push( retrieve_id );
314 if (eligibles.length > 0) {
315 var new_peer_type = widget_prompt( $('bpt_menu').cloneNode(true), {
316 'title' : catStrings.getString('staff.cat.manage_multi_bib_items.prompt.title')
321 for (var i = 0; i < eligibles.length; i++) {
322 var obj = rows[ bpbcm_barcode_map[ eligibles[i] ] ].row.my.bpbcm;
324 obj.peer_type( new_peer_type );
325 bpbcm_list.push( obj );
327 var pcrud = new openils.PermaCrud( { authtoken :ses() });
331 'onerror': function(r) {
332 dump('onerror: ' + r + '\n');
334 'onresponse': function(r) {
335 dump('onresponse: ' + r + '\n');
337 'oncomplete': function(r,ids) {
338 dump('oncomplete: r = ' + r + '\n\tids = ' + js2JSON(ids) + '\n');
339 for (var i = 0; i < ids.length; i++) {
340 var bpbcm_id = ids[i];
342 rows[ bpbcm_barcode_map[ bpbcm_id ] ].row.my.bpbcm.peer_type( new_peer_type );
343 rows[ bpbcm_barcode_map[ bpbcm_id ] ].row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.peer_type_updated');
344 list.refresh_row( rows[ bpbcm_barcode_map[ bpbcm_id ] ] );
346 alert('error in oncomplete: ' + E);
356 alert('Error in manage_multi_home_items.js, handle_change(): ' + E);
360 function handle_remove() {
362 var node_list = list.retrieve_selection();
364 for (var i = 0; i < node_list.length; i++) {
365 var retrieve_id = node_list[i].getAttribute('retrieve_id');
366 if (retrieve_id && retrieve_id != 'undefined') {
367 eligibles.push( retrieve_id );
370 if (eligibles.length > 0) {
372 eligibles.length == 1
373 ? catStrings.getFormattedString(
374 'staff.cat.manage_multi_bib_items.prompt.confirm.unlink_item_from_bib.singular',
375 [ xul_param('docid') ]
377 : catStrings.getFormattedString(
378 'staff.cat.manage_multi_bib_items.prompt.confirm.unlink_item_from_bib.plural',
379 [ xul_param('docid'), eligibles.length ]
383 for (var i = 0; i < eligibles.length; i++) {
384 var obj = rows[ bpbcm_barcode_map[ eligibles[i] ] ].row.my.bpbcm;
386 bpbcm_list.push( obj );
388 var pcrud = new openils.PermaCrud( { authtoken :ses() });
392 'onerror': function(r) {
393 dump('onerror: ' + r + '\n');
395 'onresponse': function(r) {
396 dump('onresponse: ' + r + '\n');
398 'oncomplete': function(r,ids) {
399 dump('oncomplete: r = ' + r + '\n\tids = ' + js2JSON(ids) + '\n');
400 for (var i = 0; i < ids.length; i++) {
401 var bpbcm_id = ids[i];
403 var node = rows[ bpbcm_barcode_map[ bpbcm_id ] ].my_node;
404 var parentNode = node.parentNode;
405 parentNode.removeChild( node );
406 delete(rows[ bpbcm_barcode_map[ bpbcm_id ] ]);
408 alert('error in oncomplete: ' + E);
418 alert('Error in manage_multi_home_items.js, handle_remove(): ' + E);
422 function handle_opac() {
424 var node_list = list.retrieve_selection();
426 for (var i = 0; i < node_list.length; i++) {
427 var retrieve_id = node_list[i].getAttribute('retrieve_id');
428 if (retrieve_id && retrieve_id != 'undefined') {
429 eligibles.push( retrieve_id );
432 if (eligibles.length > 0) {
433 var selection_list = [];
434 for (var i = 0; i < eligibles.length; i++) {
435 selection_list.push({
436 'barcode' : bpbcm_barcode_map[ eligibles[i] ]
439 cat.util.show_in_opac(selection_list);
443 alert('Error in manage_multi_home_items.js, handle_opac(): ' + E);
447 function handle_barcodes(barcodes) {
451 for (var i = 0; i < barcodes.length; i++) {
452 if (typeof rows[barcodes[i]] == 'undefined') {
457 handle_submit(true,null,barcode);
465 JSAN.use('util.exec'); var exec = new util.exec();
466 exec.timer( funcs, 500 );
475 alert('Error in manage_multi_home_items.js, handle_barcodes(): ' + E);