From: Mike Rylander Date: Tue, 12 Apr 2011 01:15:36 +0000 (-0400) Subject: New approach to peer bib passing X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=e38f49a7061897372eab7417d1e05bd426a2ecf6;p=evergreen%2Fequinox.git New approach to peer bib passing * Teach MVR to hold foreign copy maps (it can hold callnumbers already) * Push foreign copy maps in into the unique set of MVRs fetched in find_peer_bibs * Sort MVRs by title, pass back array instead of hash * Use dojo.map to pull copies out of maps in the MVR --- diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 170ccc7967..11faf841fa 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -84,6 +84,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + 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 b6a6f6d5b6..0bef2bd938 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm @@ -668,8 +668,8 @@ sub find_peer_bibs { { flesh => 2, flesh_fields => { - bpbcm => [ 'target_copy' ], - acp => [ 'call_number', 'location', 'status', 'peer_record_maps' ] + bpbcm => [ 'target_copy', 'peer_type' ], + acp => [ 'call_number', 'location', 'status' ] } } ] @@ -680,18 +680,27 @@ sub find_peer_bibs { } if (scalar(@{$multi_home_list})==0) { - return { 'records' => [], 'items' => [] }; + return []; } - my $mods_list = _records_to_mods( map { $_->target_copy->call_number->record; } @{$multi_home_list} ); - my @copies = map { $_->target_copy } @{$multi_home_list}; + # create a unique hash of the primary record MVRs for foreign copies + # XXX PLEASE let's change to unAPI2 (supports foreign copies) in the TT opac?!? + my %rec_hash = map { + ($_->target_copy->call_number->record, _records_to_mods( $_->target_copy->call_number->record )) + } @$multi_home_list; - my $obj = { - 'records' => $mods_list, - 'items' => \@copies - }; + # set the foreign_copy_maps field to an empty array + map { $rec_hash{$_}->foreign_copy_maps([]) } keys( %rec_hash ); + + # push the maps onto the correct MVRs + for (@$multi_home_list) { + push( + @{$rec_hash{ $_->target_copy->call_number->record }->foreign_copy_maps()), + $_ + ); + } - return $obj; + return [sort {$a->title cmp $b->title} values(%rec_hash)]; }; __PACKAGE__->register_method( diff --git a/Open-ILS/web/opac/skin/default/js/rdetail.js b/Open-ILS/web/opac/skin/default/js/rdetail.js index a78e9f44c6..1f960fd360 100644 --- a/Open-ILS/web/opac/skin/default/js/rdetail.js +++ b/Open-ILS/web/opac/skin/default/js/rdetail.js @@ -241,13 +241,13 @@ function rdetailForeignItems(r,id) { hideMe($('rdetail_extras_loading')); var tbody = $('rdetail_foreign_items_tbody'); - var robj = r.getResultObject(); /* { 'records' : [ mvr1, mvr2, ...], 'items' : [ acp1, acp2, ... ] } */ + var robj = r.getResultObject(); /* mvr list with foreign_copy_maps fleshed */ - for (var i = 0; i < robj.records.length; i++) { + for (var i = 0; i < robj.length; i++) { var args = {}; args.page = RDETAIL; args[PARAM_OFFSET] = 0; - args[PARAM_RID] = robj.records[i].doc_id(); + args[PARAM_RID] = robj[i].doc_id(); var row = elem('tr'); tbody.appendChild(row); var td1 = elem('td'); row.appendChild(td1); var title = elem( @@ -256,10 +256,10 @@ function rdetailForeignItems(r,id) { 'href' : buildOPACLink(args), 'class' : 'classic_link' }, - robj.records[i].title() + robj[i].title() ); td1.appendChild(title); - var td2 = elem('td',{},robj.records[i].author()); row.appendChild(td2); + var td2 = elem('td',{},robj[i].author()); row.appendChild(td2); var td3 = elem('td'); row.appendChild(td3); var details = elem( 'a', @@ -271,8 +271,19 @@ function rdetailForeignItems(r,id) { ); details.onclick = function(idx){ return function() { - cpdBuild( tbody, row, robj.records[idx], null, 1, 0, 1, - dojo.filter( robj.items, function(item) { return item.call_number().record() == robj.records[idx].doc_id(); } ) ); + cpdBuild( + tbody, + row, + robj[idx], + null, + 1, + 0, + 1, + dojo.map( + robj[idx].foreign_copy_maps(), + function(x){ return x.target_copy(); } + ) + ); }; }(i); td3.appendChild(details);