1 // find_this_id = document id
3 var org_shortname2id = {};
5 var browse_meter_per = 0;
6 var orgs_with_copies = [];
7 var orgs_with_copies_hash = {};
11 mw.sdump('D_CAT','TESTING: browse_list.js: ' + mw.G['main_test_variable'] + '\n');
12 var tc = document.getElementById('browse_list_tree_children');
13 build_tree_branch(tc,mw.G['org_tree'],true);
14 my_treerow = document.getElementById( 'org_unit_' + mw.G.user_ou.shortname() ).firstChild;
15 document.getElementById('browse_meter').value = 0;
16 document.getElementById('browse_meter').setAttribute('real', '0.0');
21 function refresh_browse_list() {
22 mw.sdump('D_CAT','=-=-=-=-=-=-=-=-=\n\n\nrefresh_browse_list()\n');
24 var nl = document.getElementsByTagName('treeitem');
25 for (var i = 0; i < nl.length; i++) {
26 var v_treeitem = nl[i];
27 if (v_treeitem.getAttribute('object_type') == 'volume') {
28 var org_treechildren = v_treeitem.parentNode;
29 var org_treeitem = org_treechildren.parentNode;
30 org_treeitem.removeChild(org_treechildren);
31 var org_treerow = org_treeitem.firstChild;
32 org_treerow.childNodes[1].setAttribute('label','0');
33 org_treerow.childNodes[2].setAttribute('label','0');
36 document.getElementById('browse_meter').value = 0;
37 document.getElementById('browse_meter').setAttribute('real', '0.0');
41 function button_toggle_my_libraries(ev) {
42 // label = Hide My Libraries
43 // alt_label = Show My Libraries
44 var target = document.getElementById('browse_list_button1');
45 if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
46 swap_attributes('browse_list_button1','label','alt_label');
47 var toggle = cycle_attribute( target,'toggle', [ '1', '2' ] );
48 for (var i in mw.G.my_orgs) {
49 var lib = mw.G.my_orgs[i];
50 var item = document.getElementById('org_unit_'+lib.shortname());
61 function button_toggle_libraries(ev) {
62 // label = Show Other Libraries With Copies
63 // alt_label = Show Just My Libraries
64 var target = document.getElementById('browse_list_button2');
65 if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
66 swap_attributes('browse_list_button2','label','alt_label');
67 var toggle = cycle_attribute( target,'toggle',['1','2'] );
69 mw.sdump('D_CAT','Showing just my libraries...\n');
70 /*hide_branch( document.getElementById('org_unit_PINES') );
71 for (var i = 0; i < mw.G.my_orgs.length; i++) {
73 document.getElementById( 'org_unit_' + mw.G.my_orgs[i].shortname() )
76 var nl = document.getElementsByTagName('treeitem');
77 for (var i = 0; i < nl.length; i++) {
79 if (item.getAttribute('id').substr(0,9) != 'org_unit_') continue;
80 if (mw.G.my_orgs_hash[ item.getAttribute('myid') ]) {
81 //item.setAttribute('hidden','false');
84 //item.setAttribute('hidden','true');
89 mw.sdump('D_CAT','Showing other libraries with copies...\n');
90 var nl = document.getElementsByTagName('treeitem');
91 for (var i = 0; i < nl.length; i++) {
93 if (item.getAttribute('copies') == 'true') {
94 //item.setAttribute('hidden','false');
95 //mw.sdump('D_CAT','\tunhiding ' + item.getAttribute('id') + '\n');
98 //item.setAttribute('hidden','true');
99 //mw.sdump('D_CAT','\thiding ' + item.getAttribute('id') + '\n');
107 function unhide_branch(item,do_open,do_copies) {
108 if (item.getAttribute('id') == 'org_unit_PINES') { return; }
109 //mw.sdump('D_CAT','Unhiding ' + item.getAttribute('id') + '\n');
110 item.setAttribute('hidden','false');
112 item.setAttribute('open','true');
115 item.setAttribute('copies','true');
117 if (item.parentNode && item.parentNode.setAttribute) {
118 var id = item.parentNode.getAttribute('id');
119 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
120 unhide_branch(item.parentNode,do_open,do_copies);
125 function hide_branch(item,do_open,do_copies) {
126 if (item.getAttribute('id') == 'org_unit_PINES') { return; }
127 //mw.sdump('D_CAT','Hiding ' + item.getAttribute('id') + '\n');
128 item.setAttribute('hidden','true');
130 item.setAttribute('open','false');
133 item.setAttribute('copies','true');
135 if (item.parentNode && item.parentNode.setAttribute) {
136 var id = item.parentNode.getAttribute('id');
137 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
138 hide_branch(item.parentNode,do_open,do_copies);
143 function gather_copies() {
145 mw.sdump('D_CAT','Hello : ' + timer_elapsed('world') + '\n');
146 /* user_async_request(
148 'open-ils.cat.asset.copy_tree.global.retrieve',
149 [ mw.G['auth_ses'][0], find_this_id ],
150 gather_copies_callback
153 var orgs_with_copies = user_request(
155 'open-ils.cat.actor.org_unit.retrieve_by_title',
158 for (var i = 0; i < orgs_with_copies.length; i++) {
159 orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
161 var bucket = new Array();
162 for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
163 //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
164 if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
166 if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
167 bucket.push( mw.G.my_orgs[i].id() );
169 document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
172 'open-ils.cat.asset.copy_tree.retrieve',
173 [ mw.G['auth_ses'][0], find_this_id, bucket ],
175 gather_copies_callback(request);
176 document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
177 gather_other_copies();
180 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
183 function gather_other_copies() {
184 var w_s = 10; var c_s = 0;
185 var bucket = new Array();
187 var nl = document.getElementsByTagName('treeitem');
188 for (var i = 0; i < nl.length; i++) {
190 if (item.getAttribute('can_have_vols') == '0') continue;
191 //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
192 if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
193 if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
194 bucket.push( item.getAttribute('myid') );
198 'open-ils.cat.asset.copy_tree.retrieve',
199 [ mw.G['auth_ses'][0], find_this_id, bucket ],
200 gather_copies_callback
202 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
203 bucket = new Array();
207 if (bucket.length > 0) {
210 'open-ils.cat.asset.copy_tree.retrieve',
211 [ mw.G['auth_ses'][0], find_this_id, bucket ],
212 gather_copies_callback
214 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
216 browse_meter_per = 100 / counter_peek('world');
217 mw.sdump('D_CAT',timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
220 function find_my_treerow_index() {
221 var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
223 //mw.sdump('D_CAT','find_my_treerow: count = ' + count + ' nl.length = ' + nl.length + '\n');
224 for (var i = 0; i < nl.length; i++) {
226 var item = row.parentNode;
227 if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
230 var open_attr = item.getAttribute('open');
231 var hidden_prop = item.hidden;
232 //mw.sdump('D_CAT','id = ' + item.getAttribute('id') + ' hidden_attr = ' + hidden_attr + ' hidden_prop = ' + hidden_prop + '\n');
233 if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
240 function gather_copies_callback(request) {
241 mw.sdump('D_CAT','gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
242 var result = request.getResultObject();
243 var n_volumes = 0; var n_copies = 0; var flag = false;
244 //mw.sdump('D_CAT','copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
245 for (var y in result) {
246 if (result[y] && (typeof(result[y])=='object')) {
247 var volume = result[y]; n_volumes++;
248 //mw.sdump('D_CAT','\nvolume = ' + js2JSON(volume) + '\n');
249 mw.sdump('D_CAT',' volume id = ' + volume.id() + '\n');
250 var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
251 //mw.sdump('D_CAT','lib = ' + js2JSON(lib) + '\n');
252 if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
253 var callnumber = volume.label();
254 var copies = volume.copies();
255 //mw.sdump('D_CAT','\tcopies = ' + js2JSON(copies) + '\n');
256 var item = document.getElementById('org_unit_'+lib.shortname());
257 if (!item) { mw.sdump('D_CAT','skipping\n'); continue; }
259 var item_row = item.firstChild;
260 var volumes_treecell;
261 if (item_row.childNodes.length == 1) {
262 volumes_treecell = document.createElement('treecell');
263 volumes_treecell.setAttribute('label','0');
264 item_row.appendChild(volumes_treecell);
266 volumes_treecell = item_row.childNodes[1];
268 volumes_treecell.setAttribute(
270 parseInt(volumes_treecell.getAttribute('label')) + 1
274 if (item_row.childNodes.length < 3) {
275 copies_treecell = document.createElement('treecell');
276 copies_treecell.setAttribute('label','0');
277 item_row.appendChild(copies_treecell);
279 copies_treecell = item_row.childNodes[2];
281 copies_treecell.setAttribute(
283 parseInt(copies_treecell.getAttribute('label')) + copies.length
288 var nl = item.getElementsByTagName('treechildren');
289 //unhide_branch(item,false,true);
290 item.setAttribute('copies',true);
291 if (nl.length == 0) {
292 cn_treechildren = document.createElement('treechildren');
293 item.appendChild(cn_treechildren);
295 cn_treechildren = nl[0];
298 var cn_treeitem = document.createElement('treeitem');
299 cn_treeitem.setAttribute('container','true');
300 cn_treeitem.setAttribute('open','true');
301 cn_treeitem.setAttribute('object_type','volume');
302 cn_treeitem.setAttribute('volume_id',volume.id());
303 cn_treeitem.setAttribute('callnumber',volume.label());
304 cn_treeitem.setAttribute('ou_id',lib.id());
306 cn_treechildren.appendChild(cn_treeitem);
308 var cn_treerow = document.createElement('treerow');
309 cn_treeitem.appendChild(cn_treerow);
311 var cn_treecell = document.createElement('treecell');
312 cn_treecell.setAttribute('label',callnumber);
313 cn_treerow.appendChild(cn_treecell);
315 var treechildren = document.createElement('treechildren');
316 cn_treeitem.appendChild(treechildren);
317 //mw.sdump('D_CAT', 'org_unit_'+lib+' item = '+item.tagName+'\n');
318 for (var j = 0; j < copies.length; j++) {
319 var copy = copies[j]; n_copies++;
320 //mw.sdump('D_CAT','barcode: ' + copy.barcode() + '\n');
322 var treeitem = document.createElement('treeitem');
323 treeitem.setAttribute('open','true');
324 treeitem.setAttribute('container','true');
325 treeitem.setAttribute('class','barcode_row');
326 treeitem.setAttribute('object_type','copy');
327 treeitem.setAttribute('ou_shortname',lib.shortname());
328 treeitem.setAttribute('ou_id',lib.id());
329 treeitem.setAttribute('callnumber',callnumber);
330 treeitem.setAttribute('barcode',copy.barcode());
331 treeitem.setAttribute('copy_id',copy.id());
332 treeitem.setAttribute('volume_id',volume.id());
333 //treeitem.setAttribute('copy',js2JSON(copy));
334 treechildren.appendChild(treeitem);
336 var treerow = document.createElement('treerow');
337 treeitem.appendChild(treerow);
340 copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
341 //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() ,
342 mw.G.acpl_hash[ copy.location() ].name() ,
343 //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() ,
344 mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
345 yesno( copy.circulate() ) , yesno( copy.ref() ) ,
346 yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
347 copy.loan_duration() , copy.fine_level() , copy.create_date() ,
348 copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
349 copy.deposit_amount() , copy.price() , copy.status()
352 for (var i = 0; i < list.length; i++ ) {
353 var treecell = document.createElement('treecell');
354 treecell.setAttribute('label',list[i]);
355 treerow.appendChild(treecell);
360 mw.sdump('D_CAT','gather_copies problem: ' + result[y] + '\n');
364 var tree = document.getElementById('browse_list_tree');
365 if (tree.currentIndex != -1) {
366 //mw.sdump('D_CAT','currentIndex != -1 = ' + tree.currentIndex + '\n');
367 //tree.treeBoxObject.scrollToRow( tree.currentIndex );
368 tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
370 //mw.sdump('D_CAT','currentIndex == -1\n');
371 var find = find_my_treerow_index();
372 mw.sdump('D_CAT','find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
373 //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
375 find = find + n_volumes + n_copies;
376 tree.view.selection.select( find );
378 //tree.treeBoxObject.ensureRowIsVisible( find );
380 var meter = document.getElementById('browse_meter');
381 var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
382 meter.setAttribute('real',real);
383 meter.value = Math.ceil( real );
384 if ( counter_peek('gather') == counter_peek('world') ) {
385 document.getElementById('browse_libs').setAttribute('value','Finished');
386 document.getElementById('browse_libs').setAttribute('hidden','true');
388 meter.setAttribute('hidden','true');
390 mw.sdump('D_CAT','gather callback done : ' + timer_elapsed('gather') + '\n');
394 function build_tree_branch(treechildren,org,hide) {
396 var name = org.name();
397 var shortname = org.shortname(); org_shortname2id[shortname] = id;
398 var children = org.children();
399 var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
400 var item = make_treeitem('org_unit_' + shortname, name, flag);
401 item.setAttribute('hidden',hide);
402 item.setAttribute('ou_id',org.id());
403 //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) {
404 if ( mw.G.my_orgs_hash[ id ] ) {
405 item.setAttribute('open','true');
406 item.setAttribute('hidden','false');
407 item.setAttribute('myorg','true');
411 //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols()
412 mw.G.aout_hash[ org.ou_type() ].can_have_vols()
414 item.setAttribute( 'myid', org.id() );
415 if (children && (children.length > 0)) {
416 var n_treechildren = document.createElement('treechildren');
417 for (var i in children) {
418 var child = children[i];
419 build_tree_branch(n_treechildren, child, true);
421 item.appendChild(n_treechildren);
423 treechildren.appendChild(item);
426 function make_treeitem(id,name,flag) {
427 var treeitem = document.createElement('treeitem');
428 treeitem.setAttribute('id',id);
429 treeitem.setAttribute('container','true');
430 var treerow = make_treerow(name,flag);
431 treeitem.appendChild(treerow);
432 treeitem.setAttribute('object_type','org_unit');
436 function make_treerow(name,flag) {
437 var treerow = document.createElement('treerow');
438 var treecell = document.createElement('treecell');
439 treecell.setAttribute('label',name);
440 treerow.appendChild(treecell);
441 treecell = document.createElement('treecell');
442 if (flag) treecell.setAttribute('label',0);
443 treerow.appendChild(treecell);
444 treecell = document.createElement('treecell');
445 if (flag) treecell.setAttribute('label',0);
446 treerow.appendChild(treecell);
451 function get_selected_rows_by_object_type(tree,object_type) {
452 var items = get_list_from_tree_selection(tree);
453 var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
454 return eval(command);
457 function build_CopyBrowser_Context(ev) {
458 mw.sdump('D_CAT','build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
459 mw.sdump('D_CAT','this = ' + this.tagName + '\n');
461 var popup = document.getElementById('browse_menu');
464 var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
466 var hitlist = document.getElementById('browse_list_tree');
467 var start = new Object(); var end = new Object();
468 var numRanges = hitlist.view.selection.getRangeCount();
469 for (var t=0; t<numRanges; t++){
470 hitlist.view.selection.getRangeAt(t,start,end);
471 for (var v=start.value; v<=end.value; v++){
472 var i = hitlist.contentView.getItemAtIndex(v);
473 //mw.sdump('D_CAT',i + ':' + i.firstChild.childNodes.length + '\n');
474 switch( i.getAttribute('object_type') ) {
475 case 'volume' : volume_flag++; break;
476 case 'copy' : copy_flag++; break;
477 case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
481 mw.sdump('D_CAT','volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
482 if (library_flag > 0) {
483 var menuitem = document.createElement('menuitem');
484 popup.appendChild(menuitem);
485 menuitem.setAttribute('label','Add Volumes');
486 menuitem.setAttribute('command','cmd_volume_add');
487 popup.appendChild( document.createElement( 'menuseparator' ) );
489 if (volume_flag > 0) {
490 var menuitem = document.createElement('menuitem');
491 popup.appendChild(menuitem);
492 if (volume_flag > 1) {
493 menuitem.setAttribute('label','Edit Volumes');
495 menuitem.setAttribute('label','Edit Volume');
497 menuitem.setAttribute('command','cmd_volume_edit');
498 popup.appendChild( document.createElement( 'menuseparator' ) );
499 menuitem = document.createElement('menuitem');
500 popup.appendChild(menuitem);
501 menuitem.setAttribute('label','Add Copies');
502 menuitem.setAttribute('command','cmd_copy_add');
503 menuitem = document.createElement('menuitem');
504 popup.appendChild( document.createElement( 'menuseparator' ) );
507 var menuitem = document.createElement('menuitem');
508 popup.appendChild(menuitem);
510 menuitem.setAttribute('label','Edit Copies');
512 menuitem.setAttribute('label','Edit Copy');
514 menuitem.setAttribute('command','cmd_copy_edit');
515 popup.appendChild( document.createElement( 'menuseparator' ) );
517 if (volume_flag > 0) {
518 var menuitem = document.createElement('menuitem');
519 popup.appendChild(menuitem);
520 if (volume_flag > 1) {
521 menuitem.setAttribute('label','Delete Volumes');
523 menuitem.setAttribute('label','Delete Volume');
525 menuitem.setAttribute('command','cmd_volume_delete');
526 popup.appendChild( document.createElement( 'menuseparator' ) );
530 var menuitem = document.createElement('menuitem');
531 popup.appendChild(menuitem);
533 menuitem.setAttribute('label','Delete Copies');
535 menuitem.setAttribute('label','Delete Copy');
537 menuitem.setAttribute('command','cmd_copy_delete');
538 popup.appendChild( document.createElement( 'menuseparator' ) );
541 var menuitem = document.createElement('menuitem');
542 popup.appendChild(menuitem);
543 menuitem.setAttribute('label','Refresh Listing');
544 menuitem.setAttribute('command','cmd_refresh');
547 function volume_add(tab,params) {
548 mw.sdump('D_CAT','trying to volume_add()\n');
549 params['shortcut'] = 'volume_add';
551 //var items = get_selected_rows(tree);
552 var items = get_list_from_tree_selection(params.tree);
556 return obj.getAttribute('object_type') == 'org_unit';
559 var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
561 parentWindow.new_tab('main_tabbox');
562 w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
564 w = mw.new_window( chrome );
566 mw.sdump('D_CAT','setting use_this_tree\n');
567 w.tree_items = items;
568 w.record_id = find_this_id;
572 function copy_add(tab,params) {
573 mw.sdump('D_CAT','trying to copy_add()\n');
574 params['shortcut'] = 'copy_add';
576 //var items = get_selected_rows(tree);
577 var items = get_list_from_tree_selection(params.tree);
581 return obj.getAttribute('object_type') == 'volume';
584 var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
586 parentWindow.new_tab('main_tabbox');
587 w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
589 w = mw.new_window( chrome );
591 mw.sdump('D_CAT','setting use_this_tree\n');
592 w.tree_items = items;
593 w.record_id = find_this_id;
597 function volume_edit(tab,params) {
598 mw.sdump('D_CAT','trying to volume_edit()\n');
599 params['shortcut'] = 'volume_edit';
601 //var items = get_selected_rows(tree);
602 var items = get_list_from_tree_selection(params.tree);
606 return obj.getAttribute('object_type') == 'volume';
609 var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
611 parentWindow.new_tab('main_tabbox');
612 w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
614 w = mw.new_window( chrome );
616 mw.sdump('D_CAT','setting use_this_tree\n');
617 w.tree_items = items;
618 w.record_id = find_this_id;
623 function volume_delete(tab,params) {
624 var volumes = get_selected_rows_by_object_type(params.tree,'volume');
626 for (var i = 0; i < volumes.length; i++) {
628 cn.id( volumes[i].getAttribute('volume_id') );
632 var result = user_request(
634 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
635 [ mw.G['auth_ses'][0], cn_list]
637 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
638 refresh_browse_list();
641 function copy_delete(tab,params) {
642 var copies = get_selected_rows_by_object_type(params.tree,'copy');
644 for (var i = 0; i < copies.length; i++) {
646 cn.id( copies[i].getAttribute('volume_id') );
649 cp.id( copies[i].getAttribute('copy_id') );
655 var result = user_request(
657 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
658 [ mw.G['auth_ses'][0], cn_list]
660 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
661 refresh_browse_list();