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

(-)a/C4/Biblio.pm (-136 lines)
Lines 62-68 BEGIN { Link Here
62
        TransformMarcToKoha
62
        TransformMarcToKoha
63
        TransformHtmlToMarc
63
        TransformHtmlToMarc
64
        TransformHtmlToXml
64
        TransformHtmlToXml
65
        prepare_host_field
66
    );
65
    );
67
66
68
    # Internal functions
67
    # Internal functions
Lines 2996-3136 sub ModBiblioMarc { Link Here
2996
    return $biblionumber;
2995
    return $biblionumber;
2997
}
2996
}
2998
2997
2999
=head2 prepare_host_field
3000
3001
$marcfield = prepare_host_field( $hostbiblioitem, $marcflavour );
3002
Generate the host item entry for an analytic child entry
3003
3004
=cut
3005
3006
sub prepare_host_field {
3007
    my ( $hostbiblio, $marcflavour ) = @_;
3008
    $marcflavour ||= C4::Context->preference('marcflavour');
3009
3010
    my $biblio = Koha::Biblios->find($hostbiblio);
3011
    my $host   = $biblio->metadata->record;
3012
3013
    # unfortunately as_string does not 'do the right thing'
3014
    # if field returns undef
3015
    my %sfd;
3016
    my $field;
3017
    my $host_field;
3018
    if ( $marcflavour eq 'MARC21' ) {
3019
        if ( $field = $host->field('100') || $host->field('110') || $host->field('11') ) {
3020
            my $s = $field->as_string('ab');
3021
            if ($s) {
3022
                $sfd{a} = $s;
3023
            }
3024
        }
3025
        if ( $field = $host->field('245') ) {
3026
            my $s = $field->as_string('a');
3027
            if ($s) {
3028
                $sfd{t} = $s;
3029
            }
3030
        }
3031
        if ( $field = $host->field('260') ) {
3032
            my $s = $field->as_string('abc');
3033
            if ($s) {
3034
                $sfd{d} = $s;
3035
            }
3036
        }
3037
        if ( $field = $host->field('240') ) {
3038
            my $s = $field->as_string();
3039
            if ($s) {
3040
                $sfd{b} = $s;
3041
            }
3042
        }
3043
        if ( $field = $host->field('022') ) {
3044
            my $s = $field->as_string('a');
3045
            if ($s) {
3046
                $sfd{x} = $s;
3047
            }
3048
        }
3049
        if ( $field = $host->field('020') ) {
3050
            my $s = $field->as_string('a');
3051
            if ($s) {
3052
                $sfd{z} = $s;
3053
            }
3054
        }
3055
        if ( $field = $host->field('001') ) {
3056
            $sfd{w} = $field->data(),;
3057
        }
3058
        $host_field = MARC::Field->new( 773, '0', ' ', %sfd );
3059
        return $host_field;
3060
    } elsif ( $marcflavour eq 'UNIMARC' ) {
3061
3062
        #author
3063
        if ( $field = $host->field('700') || $host->field('710') || $host->field('720') ) {
3064
            my $s = $field->as_string('ab');
3065
            if ($s) {
3066
                $sfd{a} = $s;
3067
            }
3068
        }
3069
3070
        #title
3071
        if ( $field = $host->field('200') ) {
3072
            my $s = $field->as_string('a');
3073
            if ($s) {
3074
                $sfd{t} = $s;
3075
            }
3076
        }
3077
3078
        #place of publicaton
3079
        if ( $field = $host->field('210') ) {
3080
            my $s = $field->as_string('a');
3081
            if ($s) {
3082
                $sfd{c} = $s;
3083
            }
3084
        }
3085
3086
        #date of publication
3087
        if ( $field = $host->field('210') ) {
3088
            my $s = $field->as_string('d');
3089
            if ($s) {
3090
                $sfd{d} = $s;
3091
            }
3092
        }
3093
3094
        #edition statement
3095
        if ( $field = $host->field('205') ) {
3096
            my $s = $field->as_string();
3097
            if ($s) {
3098
                $sfd{e} = $s;
3099
            }
3100
        }
3101
3102
        #URL
3103
        if ( $field = $host->field('856') ) {
3104
            my $s = $field->as_string('u');
3105
            if ($s) {
3106
                $sfd{u} = $s;
3107
            }
3108
        }
3109
3110
        #ISSN
3111
        if ( $field = $host->field('011') ) {
3112
            my $s = $field->as_string('a');
3113
            if ($s) {
3114
                $sfd{x} = $s;
3115
            }
3116
        }
3117
3118
        #ISBN
3119
        if ( $field = $host->field('010') ) {
3120
            my $s = $field->as_string('a');
3121
            if ($s) {
3122
                $sfd{y} = $s;
3123
            }
3124
        }
3125
        if ( $field = $host->field('001') ) {
3126
            $sfd{0} = $field->data(),;
3127
        }
3128
        $host_field = MARC::Field->new( 461, '0', ' ', %sfd );
3129
        return $host_field;
3130
    }
3131
    return;
3132
}
3133
3134
=head2 UpdateTotalIssues
2998
=head2 UpdateTotalIssues
3135
2999
3136
  UpdateTotalIssues($biblionumber, $increase, [$value])
3000
  UpdateTotalIssues($biblionumber, $increase, [$value])
(-)a/cataloguing/addbiblio.pl (-3 / +2 lines)
Lines 33-39 use C4::Biblio qw( Link Here
33
    GetMarcStructure
33
    GetMarcStructure
34
    GetUsedMarcStructure
34
    GetUsedMarcStructure
35
    ModBiblio
35
    ModBiblio
36
    prepare_host_field
37
    PrepHostMarcField
36
    PrepHostMarcField
38
    TransformHtmlToMarc
37
    TransformHtmlToMarc
39
    ApplyMarcOverlayRules
38
    ApplyMarcOverlayRules
Lines 646-652 if ($parentbiblio) { Link Here
646
    my $marcflavour = C4::Context->preference('marcflavour');
645
    my $marcflavour = C4::Context->preference('marcflavour');
647
    $record = MARC::Record->new();
646
    $record = MARC::Record->new();
648
    SetMarcUnicodeFlag( $record, $marcflavour );
647
    SetMarcUnicodeFlag( $record, $marcflavour );
649
    my $hostfield = prepare_host_field( $parentbiblio, $marcflavour );
648
    my $parent    = Koha::Biblios->find($parentbiblio);
649
    my $hostfield = $parent->generate_marc_host_field;
650
    if ($hostfield) {
650
    if ($hostfield) {
651
        $record->append_fields($hostfield);
651
        $record->append_fields($hostfield);
652
    }
652
    }
653
- 

Return to bug 37305