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');
26 var nl = document.getElementsByTagName('treeitem');
27 for (var i = 0; i < nl.length; i++) {
28 var v_treeitem = nl[i];
29 if (v_treeitem.getAttribute('object_type') == 'volume') {
30 var org_treechildren = v_treeitem.parentNode;
31 var org_treeitem = org_treechildren.parentNode;
32 org_treeitem.removeChild(org_treechildren);
33 var org_treerow = org_treeitem.firstChild;
34 org_treerow.childNodes[1].setAttribute('label','0');
35 org_treerow.childNodes[2].setAttribute('label','0');
38 document.getElementById('browse_meter').value = 0;
39 document.getElementById('browse_meter').setAttribute('real', '0.0');
45 function button_toggle_my_libraries(ev) {
46 // label = Hide My Libraries
47 // alt_label = Show My Libraries
48 var target = document.getElementById('browse_list_button1');
49 if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
50 swap_attributes('browse_list_button1','label','alt_label');
51 var toggle = cycle_attribute( target,'toggle', [ '1', '2' ] );
52 for (var i in mw.G.my_orgs) {
53 var lib = mw.G.my_orgs[i];
54 var item = document.getElementById('org_unit_'+lib.shortname());
65 function button_toggle_libraries(ev) {
66 // label = Show Other Libraries With Copies
67 // alt_label = Show Just My Libraries
68 var target = document.getElementById('browse_list_button2');
69 if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
70 swap_attributes('browse_list_button2','label','alt_label');
71 var toggle = cycle_attribute( target,'toggle',['1','2'] );
73 mw.sdump('D_CAT','Showing just my libraries...\n');
74 /*hide_branch( document.getElementById('org_unit_PINES') );
75 for (var i = 0; i < mw.G.my_orgs.length; i++) {
77 document.getElementById( 'org_unit_' + mw.G.my_orgs[i].shortname() )
80 var nl = document.getElementsByTagName('treeitem');
81 for (var i = 0; i < nl.length; i++) {
83 if (item.getAttribute('id').substr(0,9) != 'org_unit_') continue;
84 if (mw.G.my_orgs_hash[ item.getAttribute('myid') ]) {
85 //item.setAttribute('hidden','false');
88 //item.setAttribute('hidden','true');
93 mw.sdump('D_CAT','Showing other libraries with copies...\n');
94 var nl = document.getElementsByTagName('treeitem');
95 for (var i = 0; i < nl.length; i++) {
97 if (item.getAttribute('copies') == 'true') {
98 //item.setAttribute('hidden','false');
99 //mw.sdump('D_CAT','\tunhiding ' + item.getAttribute('id') + '\n');
102 //item.setAttribute('hidden','true');
103 //mw.sdump('D_CAT','\thiding ' + item.getAttribute('id') + '\n');
111 function unhide_branch(item,do_open,do_copies) {
112 if (item.getAttribute('id') == 'org_unit_PINES') { return; }
113 //mw.sdump('D_CAT','Unhiding ' + item.getAttribute('id') + '\n');
114 item.setAttribute('hidden','false');
116 item.setAttribute('open','true');
119 item.setAttribute('copies','true');
121 if (item.parentNode && item.parentNode.setAttribute) {
122 var id = item.parentNode.getAttribute('id');
123 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
124 unhide_branch(item.parentNode,do_open,do_copies);
129 function hide_branch(item,do_open,do_copies) {
130 if (item.getAttribute('id') == 'org_unit_PINES') { return; }
131 //mw.sdump('D_CAT','Hiding ' + item.getAttribute('id') + '\n');
132 item.setAttribute('hidden','true');
134 item.setAttribute('open','false');
137 item.setAttribute('copies','true');
139 if (item.parentNode && item.parentNode.setAttribute) {
140 var id = item.parentNode.getAttribute('id');
141 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
142 hide_branch(item.parentNode,do_open,do_copies);
147 function gather_copies() {
149 mw.sdump('D_CAT','Hello : ' + timer_elapsed('world') + '\n');
150 /* user_async_request(
152 'open-ils.cat.asset.copy_tree.global.retrieve',
153 [ mw.G['auth_ses'][0], find_this_id ],
154 gather_copies_callback
157 var orgs_with_copies = [];
159 orgs_with_copies = user_request(
161 'open-ils.cat.actor.org_unit.retrieve_by_title',
167 for (var i = 0; i < orgs_with_copies.length; i++) {
168 orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
170 var bucket = new Array();
171 for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
172 //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
173 if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
175 if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
176 bucket.push( mw.G.my_orgs[i].id() );
178 document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
181 'open-ils.cat.asset.copy_tree.retrieve',
182 [ mw.G['auth_ses'][0], find_this_id, bucket ],
184 gather_copies_callback(request);
185 document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
186 gather_other_copies();
189 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
192 function gather_other_copies() {
193 var w_s = 10; var c_s = 0;
194 var bucket = new Array();
196 var nl = document.getElementsByTagName('treeitem');
197 for (var i = 0; i < nl.length; i++) {
199 if (item.getAttribute('can_have_vols') == '0') continue;
200 //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
201 if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
202 if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
203 bucket.push( item.getAttribute('myid') );
207 'open-ils.cat.asset.copy_tree.retrieve',
208 [ mw.G['auth_ses'][0], find_this_id, bucket ],
209 gather_copies_callback
211 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
212 bucket = new Array();
216 if (bucket.length > 0) {
219 'open-ils.cat.asset.copy_tree.retrieve',
220 [ mw.G['auth_ses'][0], find_this_id, bucket ],
221 gather_copies_callback
223 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
225 browse_meter_per = 100 / counter_peek('world');
226 mw.sdump('D_CAT',timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
229 function find_my_treerow_index() {
230 var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
232 //mw.sdump('D_CAT','find_my_treerow: count = ' + count + ' nl.length = ' + nl.length + '\n');
233 for (var i = 0; i < nl.length; i++) {
235 var item = row.parentNode;
236 if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
239 var open_attr = item.getAttribute('open');
240 var hidden_prop = item.hidden;
241 //mw.sdump('D_CAT','id = ' + item.getAttribute('id') + ' hidden_attr = ' + hidden_attr + ' hidden_prop = ' + hidden_prop + '\n');
242 if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
249 function gather_copies_callback(request) {
250 mw.sdump('D_CAT','gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
251 var result = request.getResultObject();
252 var n_volumes = 0; var n_copies = 0; var flag = false;
253 //mw.sdump('D_CAT','copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
254 for (var y in result) {
255 if (result[y] && (typeof(result[y])=='object')) {
256 var volume = result[y]; n_volumes++;
257 //mw.sdump('D_CAT','\nvolume = ' + js2JSON(volume) + '\n');
258 mw.sdump('D_CAT',' volume id = ' + volume.id() + '\n');
259 var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
260 //mw.sdump('D_CAT','lib = ' + js2JSON(lib) + '\n');
261 if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
262 var callnumber = volume.label();
263 var copies = volume.copies();
264 //mw.sdump('D_CAT','\tcopies = ' + js2JSON(copies) + '\n');
265 var item = document.getElementById('org_unit_'+lib.shortname());
266 if (!item) { mw.sdump('D_CAT','skipping\n'); continue; }
268 var item_row = item.firstChild;
269 var volumes_treecell;
270 if (item_row.childNodes.length == 1) {
271 volumes_treecell = document.createElement('treecell');
272 volumes_treecell.setAttribute('label','0');
273 item_row.appendChild(volumes_treecell);
275 volumes_treecell = item_row.childNodes[1];
277 volumes_treecell.setAttribute(
279 parseInt(volumes_treecell.getAttribute('label')) + 1
283 if (item_row.childNodes.length < 3) {
284 copies_treecell = document.createElement('treecell');
285 copies_treecell.setAttribute('label','0');
286 item_row.appendChild(copies_treecell);
288 copies_treecell = item_row.childNodes[2];
290 copies_treecell.setAttribute(
292 parseInt(copies_treecell.getAttribute('label')) + copies.length
297 var nl = item.getElementsByTagName('treechildren');
298 //unhide_branch(item,false,true);
299 item.setAttribute('copies',true);
300 if (nl.length == 0) {
301 cn_treechildren = document.createElement('treechildren');
302 item.appendChild(cn_treechildren);
304 cn_treechildren = nl[0];
307 var cn_treeitem = document.createElement('treeitem');
308 cn_treeitem.setAttribute('container','true');
309 cn_treeitem.setAttribute('open','true');
310 cn_treeitem.setAttribute('object_type','volume');
311 cn_treeitem.setAttribute('volume_id',volume.id());
312 cn_treeitem.setAttribute('callnumber',volume.label());
313 cn_treeitem.setAttribute('ou_id',lib.id());
315 cn_treechildren.appendChild(cn_treeitem);
317 var cn_treerow = document.createElement('treerow');
318 cn_treeitem.appendChild(cn_treerow);
320 var cn_treecell = document.createElement('treecell');
321 cn_treecell.setAttribute('label',callnumber);
322 cn_treerow.appendChild(cn_treecell);
324 var treechildren = document.createElement('treechildren');
325 cn_treeitem.appendChild(treechildren);
326 //mw.sdump('D_CAT', 'org_unit_'+lib+' item = '+item.tagName+'\n');
327 for (var j = 0; j < copies.length; j++) {
328 var copy = copies[j]; n_copies++;
329 //mw.sdump('D_CAT','barcode: ' + copy.barcode() + '\n');
331 var treeitem = document.createElement('treeitem');
332 treeitem.setAttribute('open','true');
333 treeitem.setAttribute('container','true');
334 treeitem.setAttribute('class','barcode_row');
335 treeitem.setAttribute('object_type','copy');
336 treeitem.setAttribute('ou_shortname',lib.shortname());
337 treeitem.setAttribute('ou_id',lib.id());
338 treeitem.setAttribute('callnumber',callnumber);
339 treeitem.setAttribute('barcode',copy.barcode());
340 treeitem.setAttribute('copy_id',copy.id());
341 treeitem.setAttribute('volume_id',volume.id());
342 //treeitem.setAttribute('copy',js2JSON(copy));
343 treechildren.appendChild(treeitem);
345 var treerow = document.createElement('treerow');
346 treeitem.appendChild(treerow);
349 copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
350 //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() ,
351 mw.G.acpl_hash[ copy.location() ].name() ,
352 //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() ,
353 mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
354 yesno( copy.circulate() ) , yesno( copy.ref() ) ,
355 yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
356 copy.loan_duration() , copy.fine_level() , copy.create_date() ,
357 copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
358 copy.deposit_amount() , copy.price() , mw.G.ccs_hash[ copy.status() ].name()
361 for (var i = 0; i < list.length; i++ ) {
362 var treecell = document.createElement('treecell');
363 treecell.setAttribute('label',list[i]);
364 treerow.appendChild(treecell);
369 mw.sdump('D_CAT','gather_copies problem: ' + result[y] + '\n');
373 var tree = document.getElementById('browse_list_tree');
374 if (tree.currentIndex != -1) {
375 //mw.sdump('D_CAT','currentIndex != -1 = ' + tree.currentIndex + '\n');
376 //tree.treeBoxObject.scrollToRow( tree.currentIndex );
377 tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
379 //mw.sdump('D_CAT','currentIndex == -1\n');
380 var find = find_my_treerow_index();
381 mw.sdump('D_CAT','find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
382 //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
384 find = find + n_volumes + n_copies;
385 tree.view.selection.select( find );
387 //tree.treeBoxObject.ensureRowIsVisible( find );
389 var meter = document.getElementById('browse_meter');
390 var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
391 meter.setAttribute('real',real);
392 meter.value = Math.ceil( real );
393 if ( counter_peek('gather') == counter_peek('world') ) {
394 document.getElementById('browse_libs').setAttribute('value','Finished');
395 document.getElementById('browse_libs').setAttribute('hidden','true');
397 meter.setAttribute('hidden','true');
399 mw.sdump('D_CAT','gather callback done : ' + timer_elapsed('gather') + '\n');
403 function build_tree_branch(treechildren,org,hide) {
405 var name = org.name();
406 var shortname = org.shortname(); org_shortname2id[shortname] = id;
407 var children = org.children();
408 var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
409 var item = make_treeitem('org_unit_' + shortname, name, flag);
410 item.setAttribute('hidden',hide);
411 item.setAttribute('ou_id',org.id());
412 //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) {
413 if ( mw.G.my_orgs_hash[ id ] ) {
414 item.setAttribute('open','true');
415 item.setAttribute('hidden','false');
416 item.setAttribute('myorg','true');
420 //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols()
421 mw.G.aout_hash[ org.ou_type() ].can_have_vols()
423 item.setAttribute( 'myid', org.id() );
424 if (children && (children.length > 0)) {
425 var n_treechildren = document.createElement('treechildren');
426 for (var i in children) {
427 var child = children[i];
428 build_tree_branch(n_treechildren, child, true);
430 item.appendChild(n_treechildren);
432 treechildren.appendChild(item);
435 function make_treeitem(id,name,flag) {
436 var treeitem = document.createElement('treeitem');
437 treeitem.setAttribute('id',id);
438 treeitem.setAttribute('container','true');
439 var treerow = make_treerow(name,flag);
440 treeitem.appendChild(treerow);
441 treeitem.setAttribute('object_type','org_unit');
445 function make_treerow(name,flag) {
446 var treerow = document.createElement('treerow');
447 var treecell = document.createElement('treecell');
448 treecell.setAttribute('label',name);
449 treerow.appendChild(treecell);
450 treecell = document.createElement('treecell');
451 if (flag) treecell.setAttribute('label',0);
452 treerow.appendChild(treecell);
453 treecell = document.createElement('treecell');
454 if (flag) treecell.setAttribute('label',0);
455 treerow.appendChild(treecell);
460 function get_selected_rows_by_object_type(tree,object_type) {
461 var items = get_list_from_tree_selection(tree);
462 var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
463 return eval(command);
466 function build_CopyBrowser_Context(ev) {
467 mw.sdump('D_CAT','build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
468 mw.sdump('D_CAT','this = ' + this.tagName + '\n');
470 var popup = document.getElementById('browse_menu');
473 var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
475 var hitlist = document.getElementById('browse_list_tree');
476 var start = new Object(); var end = new Object();
477 var numRanges = hitlist.view.selection.getRangeCount();
478 for (var t=0; t<numRanges; t++){
479 hitlist.view.selection.getRangeAt(t,start,end);
480 for (var v=start.value; v<=end.value; v++){
481 var i = hitlist.contentView.getItemAtIndex(v);
482 //mw.sdump('D_CAT',i + ':' + i.firstChild.childNodes.length + '\n');
483 switch( i.getAttribute('object_type') ) {
484 case 'volume' : volume_flag++; break;
485 case 'copy' : copy_flag++; break;
486 case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
490 mw.sdump('D_CAT','volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
491 if (library_flag > 0) {
492 var menuitem = document.createElement('menuitem');
493 popup.appendChild(menuitem);
494 menuitem.setAttribute('label','Add Volumes');
495 menuitem.setAttribute('command','cmd_volume_add');
496 popup.appendChild( document.createElement( 'menuseparator' ) );
498 if (volume_flag > 0) {
499 var menuitem = document.createElement('menuitem');
500 popup.appendChild(menuitem);
501 if (volume_flag > 1) {
502 menuitem.setAttribute('label','Edit Volumes');
504 menuitem.setAttribute('label','Edit Volume');
506 menuitem.setAttribute('command','cmd_volume_edit');
507 popup.appendChild( document.createElement( 'menuseparator' ) );
508 menuitem = document.createElement('menuitem');
509 popup.appendChild(menuitem);
510 menuitem.setAttribute('label','Add Copies');
511 menuitem.setAttribute('command','cmd_copy_add');
512 menuitem = document.createElement('menuitem');
513 popup.appendChild( document.createElement( 'menuseparator' ) );
516 var menuitem = document.createElement('menuitem');
517 popup.appendChild(menuitem);
519 menuitem.setAttribute('label','Edit Copies');
521 menuitem.setAttribute('label','Edit Copy');
523 menuitem.setAttribute('command','cmd_copy_edit');
524 popup.appendChild( document.createElement( 'menuseparator' ) );
526 if (volume_flag > 0) {
527 var menuitem = document.createElement('menuitem');
528 popup.appendChild(menuitem);
529 if (volume_flag > 1) {
530 menuitem.setAttribute('label','Delete Volumes');
532 menuitem.setAttribute('label','Delete Volume');
534 menuitem.setAttribute('command','cmd_volume_delete');
535 popup.appendChild( document.createElement( 'menuseparator' ) );
539 var menuitem = document.createElement('menuitem');
540 popup.appendChild(menuitem);
542 menuitem.setAttribute('label','Delete Copies');
544 menuitem.setAttribute('label','Delete Copy');
546 menuitem.setAttribute('command','cmd_copy_delete');
547 popup.appendChild( document.createElement( 'menuseparator' ) );
550 var menuitem = document.createElement('menuitem');
551 popup.appendChild(menuitem);
552 menuitem.setAttribute('label','Refresh Listing');
553 menuitem.setAttribute('command','cmd_refresh');
556 function volume_add(tab,params) {
557 mw.sdump('D_CAT','trying to volume_add()\n');
558 params['shortcut'] = 'volume_add';
560 //var items = get_selected_rows(tree);
561 var items = get_list_from_tree_selection(params.tree);
565 return obj.getAttribute('object_type') == 'org_unit';
568 var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
570 parentWindow.new_tab('main_tabbox');
571 w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
573 w = mw.new_window( chrome );
575 mw.sdump('D_CAT','setting use_this_tree\n');
576 w.tree_items = items;
577 w.record_id = find_this_id;
581 function copy_add(tab,params) {
582 mw.sdump('D_CAT','trying to copy_add()\n');
583 params['shortcut'] = 'copy_add';
585 //var items = get_selected_rows(tree);
586 var items = get_list_from_tree_selection(params.tree);
590 return obj.getAttribute('object_type') == 'volume';
593 var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
595 parentWindow.new_tab('main_tabbox');
596 w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
598 w = mw.new_window( chrome );
600 mw.sdump('D_CAT','setting use_this_tree\n');
601 w.tree_items = items;
602 w.record_id = find_this_id;
606 function volume_edit(tab,params) {
607 mw.sdump('D_CAT','trying to volume_edit()\n');
608 params['shortcut'] = 'volume_edit';
610 //var items = get_selected_rows(tree);
611 var items = get_list_from_tree_selection(params.tree);
615 return obj.getAttribute('object_type') == 'volume';
618 var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
620 parentWindow.new_tab('main_tabbox');
621 w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
623 w = mw.new_window( chrome );
625 mw.sdump('D_CAT','setting use_this_tree\n');
626 w.tree_items = items;
627 w.record_id = find_this_id;
632 function volume_delete(tab,params) {
633 var volumes = get_selected_rows_by_object_type(params.tree,'volume');
635 for (var i = 0; i < volumes.length; i++) {
637 cn.id( volumes[i].getAttribute('volume_id') );
642 var result = user_request(
644 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
645 [ mw.G['auth_ses'][0], cn_list]
647 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
651 refresh_browse_list();
654 function copy_delete(tab,params) {
655 var copies = get_selected_rows_by_object_type(params.tree,'copy');
657 for (var i = 0; i < copies.length; i++) {
659 cn.id( copies[i].getAttribute('volume_id') );
662 cp.id( copies[i].getAttribute('copy_id') );
669 var result = user_request(
671 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
672 [ mw.G['auth_ses'][0], cn_list]
674 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
678 refresh_browse_list();