From: Jason Etheridge Date: Mon, 11 Apr 2011 11:04:09 +0000 (-0400) Subject: toward a details extras pane for peer bibs X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=cddea2e24b6f33031df8f6633252dd8faf8ed96a;p=evergreen%2Fequinox.git toward a details extras pane for peer bibs --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm index 7c2d8ff293..1130440da7 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm @@ -626,6 +626,73 @@ sub title_id_by_item_barcode { } } +__PACKAGE__->register_method( + method => 'find_peer_bibs', + api_name => 'open-ils.search.peer_bibs.test', + authoritative => 1, + signature => { + desc => 'Tests to see if the specified record is a peer record.', + params => [ + { desc => 'Biblio record entry Id', type => 'number' } + ], + return => { + desc => 'True if specified id can be found in biblio.peer_record_copy_map.peer_record.', + type => 'bool' + } + } +); + +__PACKAGE__->register_method( + method => 'find_peer_bibs', + api_name => 'open-ils.search.peer_bibs', + authoritative => 1, + signature => { + desc => 'Return acps and mvrs for multi-home items linked to specified peer record.', + params => [ + { desc => 'Biblio record entry Id', type => 'number' } + ], + return => { + desc => '{ records => Array of mvrs, items => array of acps }', + } + } +); + + +sub find_peer_bibs { + my( $self, $client, $doc_id ) = @_; + my $e = new_editor(); + + my $multi_home_list = $e->search_biblio_peer_bib_copy_map( + [ + { peer_record => $doc_id }, + { + flesh => 2, + flesh_fields => { + bpbcm => [ 'target_copy' ], + acp => [ 'call_number' ] + } + } + ] + ); + + if ($self->api_name =~ /test/) { + return scalar( @{$multi_home_list} ) > 0 ? 1 : 0; + } + + if (scalar(@{$multi_home_list})==0) { + return { 'records' => [], 'items' => [] }; + } + + my $mods_list = _records_to_mods( map { $_->target_copy->call_number->record; } @{$multi_home_list} ); + my @copies = map { $_->target_copy } @{$multi_home_list}; + + my $obj = { + 'records' => $mods_list, + 'items' => \@copies + }; + + return $obj; +}; __PACKAGE__->register_method( method => "biblio_copy_to_mods", diff --git a/Open-ILS/web/opac/common/js/config.js b/Open-ILS/web/opac/common/js/config.js index 29c54e9776..287a126f6d 100644 --- a/Open-ILS/web/opac/common/js/config.js +++ b/Open-ILS/web/opac/common/js/config.js @@ -383,6 +383,8 @@ var FETCH_USER_NOTES = 'open-ils.actor:open-ils.actor.note.retrieve.all'; var FETCH_ORG_BY_SHORTNAME = 'open-ils.actor:open-ils.actor.org_unit.retrieve_by_shortname'; var FETCH_BIB_IDS_BY_BARCODE = 'open-ils.search:open-ils.search.multi_home.bib_ids.by_barcode'; var FETCH_ORG_SETTING = 'open-ils.actor:open-ils.actor.ou_setting.ancestor_default'; +var TEST_PEER_BIBS = 'open-ils.search:open-ils.search.peer_bibs.test'; +var FETCH_PEER_BIBS = 'open-ils.search:open-ils.search.peer_bibs'; /* ---------------------------------------------------------------------------- */ diff --git a/Open-ILS/web/opac/locale/en-US/opac.dtd b/Open-ILS/web/opac/locale/en-US/opac.dtd index 4cf0cd3200..b52813aee7 100644 --- a/Open-ILS/web/opac/locale/en-US/opac.dtd +++ b/Open-ILS/web/opac/locale/en-US/opac.dtd @@ -550,6 +550,7 @@ We recommend that you remove this title from any bookbags it may have been added + diff --git a/Open-ILS/web/opac/skin/default/js/rdetail.js b/Open-ILS/web/opac/skin/default/js/rdetail.js index b1fc03b255..f3af696026 100644 --- a/Open-ILS/web/opac/skin/default/js/rdetail.js +++ b/Open-ILS/web/opac/skin/default/js/rdetail.js @@ -237,6 +237,43 @@ function rdetailViewMarc(r,id) { $('rdetail_view_marc_box').insertBefore(span, $('rdetail_view_marc_box').firstChild); } +function rdetailForeignItems(r,id) { + hideMe($('rdetail_extras_loading')); + var tbody = $('rdetail_foreign_items_tbody'); + + var robj = r.getResultObject(); /* { 'records' : [ mvr1, mvr2, ...], 'items' : [ acp1, acp2, ... ] } */ + + for (var i = 0; i < robj.records.length; i++) { + var args = {}; + args.page = RDETAIL; + args[PARAM_OFFSET] = 0; + args[PARAM_RID] = robj.records[i].doc_id(); + var row = elem('tr'); tbody.appendChild(row); + var td1 = elem('td'); row.appendChild(td1); + var title = elem( + 'a', + { + 'href' : buildOPACLink(args), + 'class' : 'classic_link' + }, + robj.records[i].title() + ); + td1.appendChild(title); + var td2 = elem('td',{},robj.records[i].author()); row.appendChild(td2); + var td3 = elem('td'); row.appendChild(td3); + var details = elem( + 'a', + { + 'href' : 'javascript:alert("foo")', + 'class' : 'classic_link' + }, + 'Copy Details' + ); + td3.appendChild(details); + } +} + + function rdetailShowLocalCopies() { rdetailShowLocal = true; @@ -566,6 +603,16 @@ function _rdetailDraw(r) { if (novelist && currentISBN) { unHideMe($('rdetail_novelist_link')); } + + // Multi-Home / Foreign Items / Peer Bibs + var req = new Request( TEST_PEER_BIBS, record.doc_id() ); + req.callback(function(r){ + var test = r.getResultObject(); + if (test == "1") { + unHideMe($('rdetail_foreign_items_link')); + } + }); + req.send(); } @@ -635,6 +682,7 @@ function rdetailAddToBookbag() { var rdetailMarcFetched = false; +var rdetailForeignItemsFetched = false; function rdetailShowExtra(type, args) { hideMe($('rdetail_copy_info_div')); @@ -648,6 +696,7 @@ function rdetailShowExtra(type, args) { hideMe($('cn_browse')); hideMe($('rdetail_cn_browse_div')); hideMe($('rdetail_novelist_div')); + hideMe($('rdetail_foreign_items_div')); hideMe($('rdetail_notes_div')); removeCSSClass($('rdetail_copy_info_link'), 'rdetail_extras_selected'); @@ -661,6 +710,7 @@ function rdetailShowExtra(type, args) { removeCSSClass($('rdetail_annotation_link'), 'rdetail_extras_selected'); removeCSSClass($('rdetail_viewmarc_link'), 'rdetail_extras_selected'); removeCSSClass($('rdetail_novelist_link'), 'rdetail_extras_selected'); + removeCSSClass($('rdetail_foreign_items_link'), 'rdetail_extras_selected'); switch(type) { @@ -716,6 +766,17 @@ function rdetailShowExtra(type, args) { unHideMe($('rdetail_novelist_div')); break; + case "foreign_items": + addCSSClass($('rdetail_foreign_items_link'), 'rdetail_extras_selected'); + unHideMe($('rdetail_foreign_items_div')); + if(rdetailForeignItemsFetched) return; + unHideMe($('rdetail_extras_loading')); + rdetailForeignItemsFetched = true; + var req = new Request( FETCH_PEER_BIBS, record.doc_id() ); + req.callback(rdetailForeignItems); + req.send(); + break; + case 'cn': addCSSClass($('rdetail_viewcn_link'), 'rdetail_extras_selected'); unHideMe($('rdetail_cn_browse_div')); diff --git a/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml b/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml index 4a2b94dcf5..424582496f 100644 --- a/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml +++ b/Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml @@ -70,6 +70,12 @@ class='classic_link'>&rdetail.extras.novelist; + + &rdetail.extras.foreign_items; + + @@ -117,6 +123,16 @@ +
+ + + + + + +
&common.title; &common.authors;  
+
+