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 = [];
155 orgs_with_copies = user_request(
157 'open-ils.cat.actor.org_unit.retrieve_by_title',
163 for (var i = 0; i < orgs_with_copies.length; i++) {
164 orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
166 var bucket = new Array();
167 for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
168 //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
169 if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
171 if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
172 bucket.push( mw.G.my_orgs[i].id() );
174 document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
177 'open-ils.cat.asset.copy_tree.retrieve',
178 [ mw.G['auth_ses'][0], find_this_id, bucket ],
180 gather_copies_callback(request);
181 document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
182 gather_other_copies();
185 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
188 function gather_other_copies() {
189 var w_s = 10; var c_s = 0;
190 var bucket = new Array();
192 var nl = document.getElementsByTagName('treeitem');
193 for (var i = 0; i < nl.length; i++) {
195 if (item.getAttribute('can_have_vols') == '0') continue;
196 //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
197 if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
198 if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
199 bucket.push( item.getAttribute('myid') );
203 'open-ils.cat.asset.copy_tree.retrieve',
204 [ mw.G['auth_ses'][0], find_this_id, bucket ],
205 gather_copies_callback
207 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
208 bucket = new Array();
212 if (bucket.length > 0) {
215 'open-ils.cat.asset.copy_tree.retrieve',
216 [ mw.G['auth_ses'][0], find_this_id, bucket ],
217 gather_copies_callback
219 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
221 browse_meter_per = 100 / counter_peek('world');
222 mw.sdump('D_CAT',timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
225 function find_my_treerow_index() {
226 var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
228 //mw.sdump('D_CAT','find_my_treerow: count = ' + count + ' nl.length = ' + nl.length + '\n');
229 for (var i = 0; i < nl.length; i++) {
231 var item = row.parentNode;
232 if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
235 var open_attr = item.getAttribute('open');
236 var hidden_prop = item.hidden;
237 //mw.sdump('D_CAT','id = ' + item.getAttribute('id') + ' hidden_attr = ' + hidden_attr + ' hidden_prop = ' + hidden_prop + '\n');
238 if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
245 function gather_copies_callback(request) {
246 mw.sdump('D_CAT','gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
247 var result = request.getResultObject();
248 var n_volumes = 0; var n_copies = 0; var flag = false;
249 //mw.sdump('D_CAT','copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
250 for (var y in result) {
251 if (result[y] && (typeof(result[y])=='object')) {
252 var volume = result[y]; n_volumes++;
253 //mw.sdump('D_CAT','\nvolume = ' + js2JSON(volume) + '\n');
254 mw.sdump('D_CAT',' volume id = ' + volume.id() + '\n');
255 var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
256 //mw.sdump('D_CAT','lib = ' + js2JSON(lib) + '\n');
257 if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
258 var callnumber = volume.label();
259 var copies = volume.copies();
260 //mw.sdump('D_CAT','\tcopies = ' + js2JSON(copies) + '\n');
261 var item = document.getElementById('org_unit_'+lib.shortname());
262 if (!item) { mw.sdump('D_CAT','skipping\n'); continue; }
264 var item_row = item.firstChild;
265 var volumes_treecell;
266 if (item_row.childNodes.length == 1) {
267 volumes_treecell = document.createElement('treecell');
268 volumes_treecell.setAttribute('label','0');
269 item_row.appendChild(volumes_treecell);
271 volumes_treecell = item_row.childNodes[1];
273 volumes_treecell.setAttribute(
275 parseInt(volumes_treecell.getAttribute('label')) + 1
279 if (item_row.childNodes.length < 3) {
280 copies_treecell = document.createElement('treecell');
281 copies_treecell.setAttribute('label','0');
282 item_row.appendChild(copies_treecell);
284 copies_treecell = item_row.childNodes[2];
286 copies_treecell.setAttribute(
288 parseInt(copies_treecell.getAttribute('label')) + copies.length
293 var nl = item.getElementsByTagName('treechildren');
294 //unhide_branch(item,false,true);
295 item.setAttribute('copies',true);
296 if (nl.length == 0) {
297 cn_treechildren = document.createElement('treechildren');
298 item.appendChild(cn_treechildren);
300 cn_treechildren = nl[0];
303 var cn_treeitem = document.createElement('treeitem');
304 cn_treeitem.setAttribute('container','true');
305 cn_treeitem.setAttribute('open','true');
306 cn_treeitem.setAttribute('object_type','volume');
307 cn_treeitem.setAttribute('volume_id',volume.id());
308 cn_treeitem.setAttribute('callnumber',volume.label());
309 cn_treeitem.setAttribute('ou_id',lib.id());
311 cn_treechildren.appendChild(cn_treeitem);
313 var cn_treerow = document.createElement('treerow');
314 cn_treeitem.appendChild(cn_treerow);
316 var cn_treecell = document.createElement('treecell');
317 cn_treecell.setAttribute('label',callnumber);
318 cn_treerow.appendChild(cn_treecell);
320 var treechildren = document.createElement('treechildren');
321 cn_treeitem.appendChild(treechildren);
322 //mw.sdump('D_CAT', 'org_unit_'+lib+' item = '+item.tagName+'\n');
323 for (var j = 0; j < copies.length; j++) {
324 var copy = copies[j]; n_copies++;
325 //mw.sdump('D_CAT','barcode: ' + copy.barcode() + '\n');
327 var treeitem = document.createElement('treeitem');
328 treeitem.setAttribute('open','true');
329 treeitem.setAttribute('container','true');
330 treeitem.setAttribute('class','barcode_row');
331 treeitem.setAttribute('object_type','copy');
332 treeitem.setAttribute('ou_shortname',lib.shortname());
333 treeitem.setAttribute('ou_id',lib.id());
334 treeitem.setAttribute('callnumber',callnumber);
335 treeitem.setAttribute('barcode',copy.barcode());
336 treeitem.setAttribute('copy_id',copy.id());
337 treeitem.setAttribute('volume_id',volume.id());
338 //treeitem.setAttribute('copy',js2JSON(copy));
339 treechildren.appendChild(treeitem);
341 var treerow = document.createElement('treerow');
342 treeitem.appendChild(treerow);
345 copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
346 //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() ,
347 mw.G.acpl_hash[ copy.location() ].name() ,
348 //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() ,
349 mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
350 yesno( copy.circulate() ) , yesno( copy.ref() ) ,
351 yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
352 copy.loan_duration() , copy.fine_level() , copy.create_date() ,
353 copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
354 copy.deposit_amount() , copy.price() , copy.status()
357 for (var i = 0; i < list.length; i++ ) {
358 var treecell = document.createElement('treecell');
359 treecell.setAttribute('label',list[i]);
360 treerow.appendChild(treecell);
365 mw.sdump('D_CAT','gather_copies problem: ' + result[y] + '\n');
369 var tree = document.getElementById('browse_list_tree');
370 if (tree.currentIndex != -1) {
371 //mw.sdump('D_CAT','currentIndex != -1 = ' + tree.currentIndex + '\n');
372 //tree.treeBoxObject.scrollToRow( tree.currentIndex );
373 tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
375 //mw.sdump('D_CAT','currentIndex == -1\n');
376 var find = find_my_treerow_index();
377 mw.sdump('D_CAT','find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
378 //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
380 find = find + n_volumes + n_copies;
381 tree.view.selection.select( find );
383 //tree.treeBoxObject.ensureRowIsVisible( find );
385 var meter = document.getElementById('browse_meter');
386 var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
387 meter.setAttribute('real',real);
388 meter.value = Math.ceil( real );
389 if ( counter_peek('gather') == counter_peek('world') ) {
390 document.getElementById('browse_libs').setAttribute('value','Finished');
391 document.getElementById('browse_libs').setAttribute('hidden','true');
393 meter.setAttribute('hidden','true');
395 mw.sdump('D_CAT','gather callback done : ' + timer_elapsed('gather') + '\n');
399 function build_tree_branch(treechildren,org,hide) {
401 var name = org.name();
402 var shortname = org.shortname(); org_shortname2id[shortname] = id;
403 var children = org.children();
404 var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
405 var item = make_treeitem('org_unit_' + shortname, name, flag);
406 item.setAttribute('hidden',hide);
407 item.setAttribute('ou_id',org.id());
408 //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) {
409 if ( mw.G.my_orgs_hash[ id ] ) {
410 item.setAttribute('open','true');
411 item.setAttribute('hidden','false');
412 item.setAttribute('myorg','true');
416 //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols()
417 mw.G.aout_hash[ org.ou_type() ].can_have_vols()
419 item.setAttribute( 'myid', org.id() );
420 if (children && (children.length > 0)) {
421 var n_treechildren = document.createElement('treechildren');
422 for (var i in children) {
423 var child = children[i];
424 build_tree_branch(n_treechildren, child, true);
426 item.appendChild(n_treechildren);
428 treechildren.appendChild(item);
431 function make_treeitem(id,name,flag) {
432 var treeitem = document.createElement('treeitem');
433 treeitem.setAttribute('id',id);
434 treeitem.setAttribute('container','true');
435 var treerow = make_treerow(name,flag);
436 treeitem.appendChild(treerow);
437 treeitem.setAttribute('object_type','org_unit');
441 function make_treerow(name,flag) {
442 var treerow = document.createElement('treerow');
443 var treecell = document.createElement('treecell');
444 treecell.setAttribute('label',name);
445 treerow.appendChild(treecell);
446 treecell = document.createElement('treecell');
447 if (flag) treecell.setAttribute('label',0);
448 treerow.appendChild(treecell);
449 treecell = document.createElement('treecell');
450 if (flag) treecell.setAttribute('label',0);
451 treerow.appendChild(treecell);
456 function get_selected_rows_by_object_type(tree,object_type) {
457 var items = get_list_from_tree_selection(tree);
458 var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
459 return eval(command);
462 function build_CopyBrowser_Context(ev) {
463 mw.sdump('D_CAT','build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
464 mw.sdump('D_CAT','this = ' + this.tagName + '\n');
466 var popup = document.getElementById('browse_menu');
469 var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
471 var hitlist = document.getElementById('browse_list_tree');
472 var start = new Object(); var end = new Object();
473 var numRanges = hitlist.view.selection.getRangeCount();
474 for (var t=0; t<numRanges; t++){
475 hitlist.view.selection.getRangeAt(t,start,end);
476 for (var v=start.value; v<=end.value; v++){
477 var i = hitlist.contentView.getItemAtIndex(v);
478 //mw.sdump('D_CAT',i + ':' + i.firstChild.childNodes.length + '\n');
479 switch( i.getAttribute('object_type') ) {
480 case 'volume' : volume_flag++; break;
481 case 'copy' : copy_flag++; break;
482 case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
486 mw.sdump('D_CAT','volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
487 if (library_flag > 0) {
488 var menuitem = document.createElement('menuitem');
489 popup.appendChild(menuitem);
490 menuitem.setAttribute('label','Add Volumes');
491 menuitem.setAttribute('command','cmd_volume_add');
492 popup.appendChild( document.createElement( 'menuseparator' ) );
494 if (volume_flag > 0) {
495 var menuitem = document.createElement('menuitem');
496 popup.appendChild(menuitem);
497 if (volume_flag > 1) {
498 menuitem.setAttribute('label','Edit Volumes');
500 menuitem.setAttribute('label','Edit Volume');
502 menuitem.setAttribute('command','cmd_volume_edit');
503 popup.appendChild( document.createElement( 'menuseparator' ) );
504 menuitem = document.createElement('menuitem');
505 popup.appendChild(menuitem);
506 menuitem.setAttribute('label','Add Copies');
507 menuitem.setAttribute('command','cmd_copy_add');
508 menuitem = document.createElement('menuitem');
509 popup.appendChild( document.createElement( 'menuseparator' ) );
512 var menuitem = document.createElement('menuitem');
513 popup.appendChild(menuitem);
515 menuitem.setAttribute('label','Edit Copies');
517 menuitem.setAttribute('label','Edit Copy');
519 menuitem.setAttribute('command','cmd_copy_edit');
520 popup.appendChild( document.createElement( 'menuseparator' ) );
522 if (volume_flag > 0) {
523 var menuitem = document.createElement('menuitem');
524 popup.appendChild(menuitem);
525 if (volume_flag > 1) {
526 menuitem.setAttribute('label','Delete Volumes');
528 menuitem.setAttribute('label','Delete Volume');
530 menuitem.setAttribute('command','cmd_volume_delete');
531 popup.appendChild( document.createElement( 'menuseparator' ) );
535 var menuitem = document.createElement('menuitem');
536 popup.appendChild(menuitem);
538 menuitem.setAttribute('label','Delete Copies');
540 menuitem.setAttribute('label','Delete Copy');
542 menuitem.setAttribute('command','cmd_copy_delete');
543 popup.appendChild( document.createElement( 'menuseparator' ) );
546 var menuitem = document.createElement('menuitem');
547 popup.appendChild(menuitem);
548 menuitem.setAttribute('label','Refresh Listing');
549 menuitem.setAttribute('command','cmd_refresh');
552 function volume_add(tab,params) {
553 mw.sdump('D_CAT','trying to volume_add()\n');
554 params['shortcut'] = 'volume_add';
556 //var items = get_selected_rows(tree);
557 var items = get_list_from_tree_selection(params.tree);
561 return obj.getAttribute('object_type') == 'org_unit';
564 var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
566 parentWindow.new_tab('main_tabbox');
567 w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
569 w = mw.new_window( chrome );
571 mw.sdump('D_CAT','setting use_this_tree\n');
572 w.tree_items = items;
573 w.record_id = find_this_id;
577 function copy_add(tab,params) {
578 mw.sdump('D_CAT','trying to copy_add()\n');
579 params['shortcut'] = 'copy_add';
581 //var items = get_selected_rows(tree);
582 var items = get_list_from_tree_selection(params.tree);
586 return obj.getAttribute('object_type') == 'volume';
589 var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
591 parentWindow.new_tab('main_tabbox');
592 w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
594 w = mw.new_window( chrome );
596 mw.sdump('D_CAT','setting use_this_tree\n');
597 w.tree_items = items;
598 w.record_id = find_this_id;
602 function volume_edit(tab,params) {
603 mw.sdump('D_CAT','trying to volume_edit()\n');
604 params['shortcut'] = 'volume_edit';
606 //var items = get_selected_rows(tree);
607 var items = get_list_from_tree_selection(params.tree);
611 return obj.getAttribute('object_type') == 'volume';
614 var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
616 parentWindow.new_tab('main_tabbox');
617 w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
619 w = mw.new_window( chrome );
621 mw.sdump('D_CAT','setting use_this_tree\n');
622 w.tree_items = items;
623 w.record_id = find_this_id;
628 function volume_delete(tab,params) {
629 var volumes = get_selected_rows_by_object_type(params.tree,'volume');
631 for (var i = 0; i < volumes.length; i++) {
633 cn.id( volumes[i].getAttribute('volume_id') );
638 var result = user_request(
640 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
641 [ mw.G['auth_ses'][0], cn_list]
643 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
647 refresh_browse_list();
650 function copy_delete(tab,params) {
651 var copies = get_selected_rows_by_object_type(params.tree,'copy');
653 for (var i = 0; i < copies.length; i++) {
655 cn.id( copies[i].getAttribute('volume_id') );
658 cp.id( copies[i].getAttribute('copy_id') );
665 var result = user_request(
667 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
668 [ mw.G['auth_ses'][0], cn_list]
670 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
674 refresh_browse_list();