Add support for all three caption fields (853-855) and all three
authordjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 2 Nov 2008 19:40:01 +0000 (19:40 +0000)
committerdjfiander <djfiander@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 2 Nov 2008 19:40:01 +0000 (19:40 +0000)
enumeration fields (863-865)

git-svn-id: svn://svn.open-ils.org/ILS/trunk@11022 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Utils/MFHD.pm

index 087d940..04df9a5 100755 (executable)
@@ -14,28 +14,41 @@ sub new {
     my $rec = shift;
 
     $self->{CAPTIONS} = {};
-    foreach my $caption ($rec->field('853')) {
-       my $cap_id;
-       $cap_id = $caption->subfield('8') || '0';
-       if (exists $self->{CAPTIONS}->{$cap_id}) {
-           carp "Multiple unlabelled MFHD captions";
+
+    foreach my $field ('853', '854', '855') {
+       my $captions = {};
+       foreach my $caption ($rec->field($field)) {
+           my $cap_id;
+
+           $cap_id = $caption->subfield('8') || '0';
+           if (exists $captions->{$cap_id}) {
+               carp "Multiple unlabelled MFHD captions";
+           }
+           $captions->{$cap_id} = new MFHD::Caption($caption);
        }
-       $self->{CAPTIONS}->{$cap_id} = new MFHD::Caption($caption);
+       $self->{CAPTIONS}->{$field} = $captions;
     }
 
-    $self->{HOLDINGS} = {};
-    foreach my $holding ($rec->field('863')) {
-       my $linkage;
-       my ($link_id, $seqno);
+    foreach my $field ('863', '864', '865') {
+       my $holdings = {};
+       my $cap_field;
+
+       ($cap_field = $field) =~ s/6/5/;
+
+       foreach my $holding ($rec->field($field)) {
+           my $linkage;
+           my ($link_id, $seqno);
 
-       $linkage = $holding->subfield('8');
-       ($link_id, $seqno) = split(/\./, $linkage);
+           $linkage = $holding->subfield('8');
+           ($link_id, $seqno) = split(/\./, $linkage);
 
-       if (!exists $self->{HOLDINGS}->{$link_id}) {
-           $self->{HOLDINGS}->{$link_id} = {};
+           if (!exists $holdings->{$link_id}) {
+               $holdings->{$link_id} = {};
+           }
+           $holdings->{$link_id}->{$seqno} =
+             new MFHD::Holding($seqno, $holding, $self->{CAPTIONS}->{$cap_field}->{$link_id});
        }
-       $self->{HOLDINGS}->{$link_id}->{$seqno} =
-         new MFHD::Holding($seqno, $holding, $self->{CAPTIONS}->{$link_id});
+       $self->{HOLDINGS}->{$field} = $holdings;
     }
 
     bless ($self, $class);
@@ -44,15 +57,17 @@ sub new {
 
 sub captions {
     my $self = shift;
+    my $field = shift;
 
-    return sort keys %{$self->{CAPTIONS}}
+    return sort keys %{$self->{CAPTIONS}->{$field}}
 }
 
 sub holdings {
     my $self = shift;
+    my $field = shift;
     my $capid = shift;
 
-    return sort {$a->{SEQNO} <=> $b->{SEQNO}} values %{$self->{HOLDINGS}->{$capid}};
+    return sort {$a->{SEQNO} <=> $b->{SEQNO}} values %{$self->{HOLDINGS}->{$field}->{$capid}};
 }
 
 1;