From e1fa19820e60f6da10f43a66f8dd30d757fdd080 Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Fri, 2 Mar 2012 17:19:27 -0500 Subject: [PATCH] use OpenILS::Utils::MFHD to help us label the groupings for our holdings Signed-off-by: Lebbeous Fogle-Weekley --- .../src/perlmods/lib/OpenILS/Application/Serial.pm | 41 +++++++++++++++++----- .../src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm | 5 +++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm index 1f0e7a3883..5160307b8d 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm @@ -861,17 +861,34 @@ __PACKAGE__->register_method( # This is a helper for grouped_holdings_for_summary() later. sub _label_holding_level { - my ($pattern_field, $subfield, $value) = @_; + my ($pattern_field, $subfield, $value, $mfhd_cache) = @_; - # This may be naïve, in that a-e are sometimes chron fields and not enum. + # This is naïve, in that a-f are sometimes chron fields and not enum. # OpenILS::Utils::MFHD understands that, but so far I don't think our # interfaces do. - if ($subfield ge 'i') { # chron - } else { # enum + my $cache_key = $subfield . $value; + + if (not exists $mfhd_cache->{$cache_key}) { + my $link_id = (split(/\./, $pattern_field->subfield('8')))[0]; + my $fake_holding = new MFHD::Holding( + 1, + new MARC::Field('863', '4', '1', '8', "$link_id.1"), + new MFHD::Caption($pattern_field->clone) + ); + + if ($subfield ge 'i') { # chron + $mfhd_cache->{$cache_key} = $fake_holding->format_single_chron( + {$subfield => $value}, $subfield, 1, 1 + ); + } else { # enum + $mfhd_cache->{$cache_key} = $fake_holding->format_single_enum( + {$subfield => $value}, $subfield, 1 + ); + } } - # XXX finish + return $mfhd_cache->{$cache_key}; } # This is a helper for grouped_holdings_for_summary() later. @@ -887,7 +904,7 @@ sub _get_deepest_holding_level { # This is a helper for grouped_holdings_for_summary() later. sub _make_grouped_holding_node { - my ($row, $subfield, $deepest_level, $pattern_field) = @_; + my ($row, $subfield, $deepest_level, $pattern_field, $mfhd_cache) = @_; return { $subfield eq $deepest_level ? ( @@ -896,7 +913,7 @@ sub _make_grouped_holding_node { ) : ( value => $row->{value}, label => _label_holding_level( - $pattern_field, $subfield, $row->{value} + $pattern_field, $subfield, $row->{value}, $mfhd_cache ) ) }; @@ -1065,9 +1082,15 @@ sub grouped_holdings_for_summary { } }) or return $e->die_event; + # This will help us avoid certain repetitive calculations. Examine + # _label_holding_level() to see what I mean. + my $mfhd_cache = {}; + # Make the tree we have so far. my $tree = [ map( - _make_grouped_holding_node($_,$subfield,$deepest_level,$pattern_field), + _make_grouped_holding_node( + $_, $subfield, $deepest_level, $pattern_field, $mfhd_cache + ), @$top ) ]; @@ -1139,7 +1162,7 @@ sub grouped_holdings_for_summary { $parent = $point->{children} = [ map( _make_grouped_holding_node( - $_, $subfield, $deepest_level, $pattern_field + $_, $subfield, $deepest_level, $pattern_field, $mfhd_cache ), @$level ) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm index 9922c88f4c..920bfd2a20 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm @@ -338,8 +338,13 @@ sub format_single_enum { if (substr($capstr, 0, 1) eq '(') { # a caption enclosed in parentheses is not displayed $capstr = ''; + } elsif ($skip_sep) { + # We'll let a $skip_sep parameter of true mean what it means down by + # the return statement AND to pad the caption itself here. + $capstr .= ' '; } + $skip_sep ||= ($key eq 'a'); return ($skip_sep ? '' : $sep) . $capstr . $holding_values->{$key}; } -- 2.11.0