View | Details | Raw Unified | Return to bug 39545
Collapse All | Expand All

(-)a/C4/Biblio.pm (-30 / +66 lines)
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
(-)a/cataloguing/addbiblio.pl (-1 / +1 lines)
Lines 644-649 if ($hostbiblionumber) { Link Here
644
if ($parentbiblio) {
644
if ($parentbiblio) {
645
    my $marcflavour = C4::Context->preference('marcflavour');
645
    my $marcflavour = C4::Context->preference('marcflavour');
646
    $record = MARC::Record->new();
646
    $record = MARC::Record->new();
647
    $record->leader('     naa a22      i 4500');
647
    SetMarcUnicodeFlag( $record, $marcflavour );
648
    SetMarcUnicodeFlag( $record, $marcflavour );
648
    my $hostfield = prepare_host_field( $parentbiblio, $marcflavour );
649
    my $hostfield = prepare_host_field( $parentbiblio, $marcflavour );
649
    if ($hostfield) {
650
    if ($hostfield) {
650
- 

Return to bug 39545