Lines 3016-3061
sub prepare_host_field {
Link Here
|
3016 |
my $field; |
3016 |
my $field; |
3017 |
my $host_field; |
3017 |
my $host_field; |
3018 |
if ( $marcflavour eq 'MARC21' ) { |
3018 |
if ( $marcflavour eq 'MARC21' ) { |
3019 |
if ( $field = $host->field('100') || $host->field('110') || $host->field('11') ) { |
3019 |
my $main_entry; |
3020 |
my $s = $field->as_string('ab'); |
3020 |
my @f773subfields; |
3021 |
if ($s) { |
3021 |
if ( $host->field('1..') ) { |
3022 |
$sfd{a} = $s; |
3022 |
$main_entry = $host->field('1..')->clone; |
|
|
3023 |
if ( $main_entry->tag eq '111' ) { |
3024 |
$main_entry->delete_subfield( code => qr/[94j]/ ); |
3025 |
} else { |
3026 |
$main_entry->delete_subfield( code => qr/[94e]/ ); |
3023 |
} |
3027 |
} |
3024 |
} |
3028 |
} |
3025 |
if ( $field = $host->field('245') ) { |
3029 |
my $s7 = "nn" . substr( $host->leader, 6, 2 ); |
3026 |
my $s = $field->as_string('a'); |
3030 |
if ($main_entry) { |
3027 |
if ($s) { |
3031 |
my $c1 = 'n'; |
3028 |
$sfd{t} = $s; |
3032 |
if ( $main_entry->tag =~ /^1[01]/ ) { |
|
|
3033 |
$c1 = $main_entry->indicator('1') |
3034 |
if $main_entry->tag =~ /^1[01]/; |
3035 |
$c1 = $main_entry->tag eq '100' ? 1 : 2 unless $c1 =~ /\d/; |
3029 |
} |
3036 |
} |
|
|
3037 |
my $c0 = |
3038 |
( $main_entry->tag eq '100' ) ? 'p' |
3039 |
: ( |
3040 |
$main_entry->tag eq '110' ? 'c' |
3041 |
: ( $main_entry->tag eq '111' ? 'm' : 'u' ) |
3042 |
); |
3043 |
substr( $s7, 0, 2, $c0 . $c1 ); |
3030 |
} |
3044 |
} |
3031 |
if ( $field = $host->field('260') ) { |
3045 |
push @f773subfields, ( '7', $s7 ); |
3032 |
my $s = $field->as_string('abc'); |
3046 |
|
3033 |
if ($s) { |
3047 |
if ($main_entry) { |
3034 |
$sfd{d} = $s; |
3048 |
my $a = $main_entry->as_string; |
3035 |
} |
3049 |
$a =~ s/\.$// unless $a =~ /\b[a-z]{1,2}\.$/i; |
|
|
3050 |
push @f773subfields, ( 'a', $a ); |
3036 |
} |
3051 |
} |
3037 |
if ( $field = $host->field('240') ) { |
3052 |
|
3038 |
my $s = $field->as_string(); |
3053 |
my $f245c = $host->field('245')->clone; |
3039 |
if ($s) { |
3054 |
$f245c->delete_subfield( code => 'c' ); |
3040 |
$sfd{b} = $s; |
3055 |
my $t = $f245c->as_string; |
3041 |
} |
3056 |
$t =~ s/(\s*\/\s*|\.)$//; |
|
|
3057 |
$t = ucfirst substr( $t, $f245c->indicator('2') ); |
3058 |
push @f773subfields, ( 't', $t ); |
3059 |
if ( $host->field('250') ) { |
3060 |
my $b = $host->field('250')->as_string; |
3061 |
$b =~ s/\.$//; |
3062 |
push @f773subfields, ( 'b', $b ); |
3042 |
} |
3063 |
} |
3043 |
if ( $field = $host->field('022') ) { |
3064 |
if ( $host->field('260') ) { |
3044 |
my $s = $field->as_string('a'); |
3065 |
my $d = $host->field('260')->as_string('abc'); |
3045 |
if ($s) { |
3066 |
$d =~ s/\.$//; |
3046 |
$sfd{x} = $s; |
3067 |
push @f773subfields, ( 'd', $d ); |
3047 |
} |
|
|
3048 |
} |
3068 |
} |
3049 |
if ( $field = $host->field('020') ) { |
3069 |
for my $f ( $host->field('8[013][01]') ) { |
3050 |
my $s = $field->as_string('a'); |
3070 |
my $k = $f->as_string('abcdnjltnp'); |
3051 |
if ($s) { |
3071 |
if ( $f->subfield('x') ) { |
3052 |
$sfd{z} = $s; |
3072 |
$k .= ', ISSN ' . $f->subfield('x'); |
|
|
3073 |
} |
3074 |
if ( $f->subfield('v') ) { |
3075 |
$k .= ' ; ' . $f->subfield('v'); |
3053 |
} |
3076 |
} |
|
|
3077 |
push @f773subfields, ( 'k', $k ); |
3054 |
} |
3078 |
} |
3055 |
if ( $field = $host->field('001') ) { |
3079 |
for my $f ( $host->field('022') ) { |
3056 |
$sfd{w} = $field->data(),; |
3080 |
push @f773subfields, ( 'x', $f->subfield('a') ) |
|
|
3081 |
if $f->subfield('a'); |
3082 |
} |
3083 |
for my $f ( $host->field('020') ) { |
3084 |
push @f773subfields, ( 'z', $f->subfield('a') ) |
3085 |
if $f->subfield('a'); |
3086 |
} |
3087 |
if ( $host->field('001') ) { |
3088 |
my $w = $host->field('001')->data; |
3089 |
if ( $host->field('003') ) { |
3090 |
$w = '(' . $host->field('003')->data . ')' . $w; |
3091 |
} |
3092 |
push @f773subfields, ( 'w', $w ); |
3057 |
} |
3093 |
} |
3058 |
$host_field = MARC::Field->new( 773, '0', ' ', %sfd ); |
3094 |
$host_field = MARC::Field->new( 773, '0', ' ', @f773subfields ); |
3059 |
return $host_field; |
3095 |
return $host_field; |
3060 |
} elsif ( $marcflavour eq 'UNIMARC' ) { |
3096 |
} elsif ( $marcflavour eq 'UNIMARC' ) { |
3061 |
|
3097 |
|