LP#1053397 MR holds edit, initial.
authorBill Erickson <berick@esilibrary.com>
Fri, 31 Jan 2014 18:10:09 +0000 (13:10 -0500)
committerBill Erickson <berick@esilibrary.com>
Fri, 31 Jan 2014 18:10:27 +0000 (13:10 -0500)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
Open-ILS/src/templates/opac/myopac/holds/edit.tt2
Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2
Open-ILS/src/templates/opac/parts/place_hold.tt2

index 1f8076e..82f6013 100644 (file)
@@ -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]
+        }
+    };
 }
 
 
index 271cdad..8e0a81d 100644 (file)
@@ -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.
 
                 <strong>[% l('Format:') %]</strong>
                 <img src="[% attrs.format_icon %]" alt="[% attrs.format_label | html %]" title="[% attrs.format_label | html %]" />
             </p>[% 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 %]
             <p>
                 <strong>[% l('Status') %]</strong>: [% hold.human_status %]
             </p>
index 488bbab..bc36bf2 100644 (file)
@@ -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);
index 110a3c4..8366843 100644 (file)
@@ -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";
 %]
 
 <div id='holds_box' class='canvas' style='margin-top: 6px;'>
@@ -64,8 +64,8 @@
                         <input type='hidden' name='part' value=''/>
                         [% 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 %]
                 </td>