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() { $('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) {
316 eligibles.length == 1
317 ? catStrings.getFormattedString(
318 'staff.cat.manage_multi_bib_items.prompt.confirm.peer_type_updated.singular',
319 [ data.hash.bpt[ $('bpt_menu').value ].name() ]
321 : catStrings.getFormattedString(
322 'staff.cat.manage_multi_bib_items.prompt.confirm.peer_type_updated.plural',
323 [ data.hash.bpt[ $('bpt_menu').value ].name(), eligibles.length ]
327 for (var i = 0; i < eligibles.length; i++) {
328 var obj = rows[ bpbcm_barcode_map[ eligibles[i] ] ].row.my.bpbcm;
330 obj.peer_type( $('bpt_menu').value );
331 bpbcm_list.push( obj );
333 var pcrud = new openils.PermaCrud( { authtoken :ses() });
337 'onerror': function(r) {
338 dump('onerror: ' + r + '\n');
340 'onresponse': function(r) {
341 dump('onresponse: ' + r + '\n');
343 'oncomplete': function(r,ids) {
344 dump('oncomplete: r = ' + r + '\n\tids = ' + js2JSON(ids) + '\n');
345 for (var i = 0; i < ids.length; i++) {
346 var bpbcm_id = ids[i];
348 rows[ bpbcm_barcode_map[ bpbcm_id ] ].row.my.bpbcm.peer_type( $('bpt_menu').value );
349 rows[ bpbcm_barcode_map[ bpbcm_id ] ].row.my.result = catStrings.getString('staff.cat.manage_multi_bib_items.result.column.value.peer_type_updated');
350 list.refresh_row( rows[ bpbcm_barcode_map[ bpbcm_id ] ] );
352 alert('error in oncomplete: ' + E);
362 alert('Error in manage_multi_home_items.js, handle_change(): ' + E);
366 function handle_remove() {
368 var node_list = list.retrieve_selection();
370 for (var i = 0; i < node_list.length; i++) {
371 var retrieve_id = node_list[i].getAttribute('retrieve_id');
372 if (retrieve_id && retrieve_id != 'undefined') {
373 eligibles.push( retrieve_id );
376 if (eligibles.length > 0) {
378 eligibles.length == 1
379 ? catStrings.getFormattedString(
380 'staff.cat.manage_multi_bib_items.prompt.confirm.unlink_item_from_bib.singular',
381 [ xul_param('docid') ]
383 : catStrings.getFormattedString(
384 'staff.cat.manage_multi_bib_items.prompt.confirm.unlink_item_from_bib.plural',
385 [ xul_param('docid'), eligibles.length ]
389 for (var i = 0; i < eligibles.length; i++) {
390 var obj = rows[ bpbcm_barcode_map[ eligibles[i] ] ].row.my.bpbcm;
392 bpbcm_list.push( obj );
394 var pcrud = new openils.PermaCrud( { authtoken :ses() });
398 'onerror': function(r) {
399 dump('onerror: ' + r + '\n');
401 'onresponse': function(r) {
402 dump('onresponse: ' + r + '\n');
404 'oncomplete': function(r,ids) {
405 dump('oncomplete: r = ' + r + '\n\tids = ' + js2JSON(ids) + '\n');
406 for (var i = 0; i < ids.length; i++) {
407 var bpbcm_id = ids[i];
409 var node = rows[ bpbcm_barcode_map[ bpbcm_id ] ].my_node;
410 var parentNode = node.parentNode;
411 parentNode.removeChild( node );
412 delete(rows[ bpbcm_barcode_map[ bpbcm_id ] ]);
414 alert('error in oncomplete: ' + E);
424 alert('Error in manage_multi_home_items.js, handle_remove(): ' + E);
428 function handle_opac() {
430 var node_list = list.retrieve_selection();
432 for (var i = 0; i < node_list.length; i++) {
433 var retrieve_id = node_list[i].getAttribute('retrieve_id');
434 if (retrieve_id && retrieve_id != 'undefined') {
435 eligibles.push( retrieve_id );
438 if (eligibles.length > 0) {
439 var selection_list = [];
440 for (var i = 0; i < eligibles.length; i++) {
441 selection_list.push({
442 'barcode' : bpbcm_barcode_map[ eligibles[i] ]
445 cat.util.show_in_opac(selection_list);
449 alert('Error in manage_multi_home_items.js, handle_opac(): ' + E);
453 function handle_barcodes(barcodes) {
457 for (var i = 0; i < barcodes.length; i++) {
458 if (typeof rows[barcodes[i]] == 'undefined') {
463 handle_submit(true,null,barcode);
471 JSAN.use('util.exec'); var exec = new util.exec();
472 exec.timer( funcs, 500 );
481 alert('Error in manage_multi_home_items.js, handle_barcodes(): ' + E);