From: Bill Erickson Date: Fri, 31 Jan 2014 18:10:09 +0000 (-0500) Subject: LP#1053397 MR holds edit, initial. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=db441251c10659c530533eef888f784b6df707e3;p=working%2FEvergreen.git LP#1053397 MR holds edit, initial. Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm index 1f8076e16b..82f6013a99 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -575,6 +575,9 @@ sub fetch_user_holds { [$blob->{hold}->{bre_id}], undef, {flesh => '{mra}'} ); $blob->{marc_xml} = $data[0]->{marc_xml}; + my $hold = $blob->{hold}->{hold}; + $blob->{metarecord_ccvms} = $self->get_mr_ccvms($hold->target) + if $hold->hold_type eq 'M'; push(@holds, $blob); } } @@ -786,13 +789,12 @@ sub load_place_hold { {substream => 1} ); - # crad.name which defines the set of metarecord formats - my $format_attr = $ctx->{search_cgf}->( - name => 'opac.metarecord.holds.format_attr')->[0]->value; - for my $id (@targets) { my ($mr) = grep {$_->id eq $id} @$mrecs; + my $avail_attrs = $self->get_mr_ccvms($mr->id); + my $format_attr = $avail_attrs->{formats}{attr}; + # during hold placement submission, the user selects # which of the available formats/langs are acceptiable. # Capture those here as the holdable_formats for the MR hold. @@ -810,16 +812,10 @@ sub load_place_hold { 1 => \@selected_langs }); - # TODO: cleanup - #warn "MR holdable formats: $holdable_formats\n"; - #warn "MR langs" . Dumper($self->get_mr_ccvms($mr->id, 'item_lang')) . "\n"; - #warn "MR formats" . Dumper($self->get_mr_ccvms($mr->id, $format_attr)) . "\n"; - push(@hold_data, $data_filler->({ target => $mr, record => $mr->master_record, - metarecord_formats => $self->get_mr_ccvms($mr->id, $format_attr), - metarecord_langs => $self->get_mr_ccvms($mr->id, 'item_lang'), + metarecord_ccvms => $avail_attrs, holdable_formats => $holdable_formats })); } @@ -1115,9 +1111,13 @@ sub attempt_hold_placement { # fetches the CCVMs IDs representing available languages and formats # for the constituent records of the selected metarecord. sub get_mr_ccvms { - my ($self, $mr_id, $attr) = @_; + my ($self, $mr_id) = @_; my $e = $self->editor; + # crad.name which defines the set of metarecord formats + my $format_attr = $self->ctx->{search_cgf}->( # leverage caching + name => 'opac.metarecord.holds.format_attr')->[0]->value; + my $bre_ids = $e->search_metabib_metarecord_source_map({metarecord => $mr_id}); $bre_ids = [map {$_->source} @$bre_ids]; @@ -1131,11 +1131,25 @@ sub get_mr_ccvms { filter => {code => {'=' => {'+mraf' => 'value'}}} } }}, - where => {'+mraf' => {id => $bre_ids, attr => $attr}} + where => {'+mraf' => {id => $bre_ids, attr => ''}} }; - my $values = $e->json_query($query); - return [map { $_->{id} } @$values]; + $query->{where}{'+mraf'}{attr} = 'item_lang'; + my $langs = $e->json_query($query); + + $query->{where}{'+mraf'}{attr} = $format_attr; + my $formats = $e->json_query($query); + + return { + formats => { + attr => $format_attr, + values => [map { $_->{id} } @$formats], + }, + langs => { + attr => 'item_lang', + values => [map { $_->{id} } @$langs] + } + }; } diff --git a/Open-ILS/src/templates/opac/myopac/holds/edit.tt2 b/Open-ILS/src/templates/opac/myopac/holds/edit.tt2 index 271cdad18a..8e0a81d3e4 100644 --- a/Open-ILS/src/templates/opac/myopac/holds/edit.tt2 +++ b/Open-ILS/src/templates/opac/myopac/holds/edit.tt2 @@ -2,6 +2,7 @@ PROCESS "opac/parts/misc_util.tt2"; PROCESS "opac/parts/hold_status.tt2"; PROCESS "opac/parts/org_selector.tt2"; + PROCESS "opac/parts/metarecord_hold_filters.tt2"; WRAPPER "opac/parts/myopac/base.tt2"; myopac_page = "holds"; # in this case, just for tab coloring. @@ -34,6 +35,11 @@ [% l('Format:') %] [% attrs.format_label | html %]

[% END %] + [% IF hold.metarecord_ccvms.formats.values.size OR # should this be size > 1 + hold.metarecord_ccvms.langs.values.size > 1; + PROCESS metarecord_hold_filters_selector hold_data=hold; + END %] +

[% l('Status') %]: [% hold.human_status %]

diff --git a/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 b/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 index 488bbab09b..bc36bf2924 100644 --- a/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 +++ b/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 @@ -29,12 +29,12 @@ limiting the set of desired records for a given metarecord. lang_ccvms = []; # some CCVMs have search_labels, some use the value as the label # instead. Accommodate both, starting with search_label - FOR ccvm_id IN hold_data.metarecord_formats; + FOR ccvm_id IN hold_data.metarecord_ccvms.formats.values; ccvm = ctx.get_ccvm(ccvm_id); CALL ccvm.search_label(ccvm.value) UNLESS ccvm.search_label; format_ccvms.push(ccvm); END; - FOR ccvm_id IN hold_data.metarecord_langs; + FOR ccvm_id IN hold_data.metarecord_ccvms.langs.values; ccvm = ctx.get_ccvm(ccvm_id); CALL ccvm.search_label(ccvm.value) UNLESS ccvm.search_label; lang_ccvms.push(ccvm); diff --git a/Open-ILS/src/templates/opac/parts/place_hold.tt2 b/Open-ILS/src/templates/opac/parts/place_hold.tt2 index 110a3c4c23..83668436de 100644 --- a/Open-ILS/src/templates/opac/parts/place_hold.tt2 +++ b/Open-ILS/src/templates/opac/parts/place_hold.tt2 @@ -1,6 +1,6 @@ [% PROCESS "opac/parts/misc_util.tt2"; PROCESS "opac/parts/hold_error_messages.tt2"; - PROCESS "opac/parts/metarecord_hold_filters.tt2" + PROCESS "opac/parts/metarecord_hold_filters.tt2"; %]
@@ -64,8 +64,8 @@ [% END %] [% END %] - [% IF hdata.metarecord_formats.size OR # should this be size > 1 - hdata.metarecord_langs.size > 1; + [% IF hdata.metarecord_ccvms.formats.values.size OR # should this be size > 1 + hdata.metarecord_ccvms.langs.values.size > 1; PROCESS metarecord_hold_filters_selector hold_data=hdata; END %]