]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Utils/MFHD/Holding.pm
Merging acq-experiment to trunk, since rel_1_4 has been branched.
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Utils / MFHD / Holding.pm
1 package MFHD::Holding;
2 use strict;
3 use integer;
4 use Carp;
5
6 use MARC::Record;
7
8 sub new {
9     my $proto = shift;
10     my $class = ref($proto) || $proto;
11     my $seqno = shift;
12     my $holding = shift;
13     my $caption = shift;
14     my $self = {};
15     my $last_enum = undef;
16
17     $self->{SEQNO} = $seqno;
18     $self->{HOLDING} = $holding;
19     $self->{CAPTION} = $caption;
20     $self->{ENUMS} = {};
21     $self->{CHRON} = {};
22     $self->{DESCR} = {};
23     $self->{COPY} = undef;
24     $self->{BREAK} = undef;
25     $self->{NOTES} = {};
26     $self->{COPYRIGHT} = [];
27
28     foreach my $subfield ($holding->subfields) {
29         my ($key, $val) = @$subfield;
30         if ($key =~ /[a-h]/) {
31             # Enumeration details of holdings
32             $self->{ENUMS}->{$key} = {HOLDINGS => $val,
33                                      UNIT     => undef,};
34             $last_enum = $key;
35         } elsif ($key =~ /[i-m]/) {
36             $self->{CHRON}->{$key} = $val;
37             if (!exists $caption->{CHRONS}->{$key}) {
38                 carp "Holding specified enumeration level '$key' not included in caption $caption->{LINK}";
39             }
40         } elsif ($key eq 'o') {
41             carp '$o specified prior to first enumeration'
42               unless defined($last_enum);
43             $self->{ENUMS}->{$last_enum}->{UNIT} = $val;
44             $last_enum = undef;
45         } elsif ($key =~ /[npq]/) {
46             $self->{DESCR}->{$key} = $val;
47         } elsif ($key eq 's') {
48             push @{$self->{COPYRIGHT}}, $val;
49         } elsif ($key eq 't') {
50             $self->{COPY} = $val;
51         } elsif ($key eq 'w') {
52             carp "Unrecognized break indicator '$val'"
53               unless $val =~ /^[gn]$/;
54             $self->{BREAK} = $val;
55         }
56     }
57
58     bless ($self, $class);
59     return $self;
60 }
61
62 sub format {
63     my $self = shift;
64     my $caption = $self->{CAPTION};
65     my $str = "";
66
67     foreach my $key ('a'..'f') {
68         last if !exists $caption->{ENUMS}->{$key};
69 #       printf("fmt %s: '%s'\n", $key, $caption->caption($key));
70
71         $str .= ($key eq 'a' ? "" : ':') . $caption->caption($key) . $self->{ENUMS}->{$key}->{HOLDINGS};
72     }
73
74     if (exists $caption->{ENUMS}->{'g'}) {
75         # There's at least one level of alternative enumeration
76         $str .= ' ';
77         foreach my $key ('g', 'h') {
78             $str .= ($key eq 'g' ? '' : ':') . $caption->enum($key) . $self->{ENUMS}->{$key}->{HOLDINGS};
79         }
80     }
81
82     return $str;
83 }
84
85 sub next {
86     my $self = shift;
87     my $caption = $self->{CAPTION};
88 }
89
90 1;