]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Utils/MFHD.pm
Merging acq-experiment to trunk, since rel_1_4 has been branched.
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Utils / MFHD.pm
1 package MFHD;
2 use strict;
3 use integer;
4 use Carp;
5
6 use MARC::Record;
7 use MFHD::Caption;
8 use MFHD::Holding;
9
10 sub new {
11     my $proto = shift;
12     my $class = ref($proto) || $proto;
13     my $self = {};
14     my $rec = shift;
15
16     $self->{CAPTIONS} = {};
17     foreach my $caption ($rec->field('853')) {
18         my $cap_id;
19         $cap_id = $caption->subfield('8') || '0';
20         if (exists $self->{CAPTIONS}->{$cap_id}) {
21             carp "Multiple unlabelled MFHD captions";
22         }
23         $self->{CAPTIONS}->{$cap_id} = new MFHD::Caption($caption);
24     }
25
26     $self->{HOLDINGS} = {};
27     foreach my $holding ($rec->field('863')) {
28         my $linkage;
29         my ($link_id, $seqno);
30
31         $linkage = $holding->subfield('8');
32         ($link_id, $seqno) = split(/\./, $linkage);
33
34         if (!exists $self->{HOLDINGS}->{$link_id}) {
35             $self->{HOLDINGS}->{$link_id} = {};
36         }
37         $self->{HOLDINGS}->{$link_id}->{$seqno} =
38           new MFHD::Holding($seqno, $holding, $self->{CAPTIONS}->{$link_id});
39     }
40
41     bless ($self, $class);
42     return $self;
43 }
44
45 sub captions {
46     my $self = shift;
47
48     return sort keys %{$self->{CAPTIONS}}
49 }
50
51 sub holdings {
52     my $self = shift;
53     my $capid = shift;
54
55     return sort {$a->{SEQNO} cmp $b->{SEQNO}} values %{$self->{HOLDINGS}->{$capid}};
56 }
57
58 1;