Lines 17-28
use C4::Context;
Link Here
|
17 |
use Getopt::Long; |
17 |
use Getopt::Long; |
18 |
|
18 |
|
19 |
my $commit; |
19 |
my $commit; |
|
|
20 |
my $add_links; |
20 |
my $update_frameworks; |
21 |
my $update_frameworks; |
21 |
my $show_help; |
22 |
my $show_help; |
22 |
my $verbose; |
23 |
my $verbose; |
23 |
my $result = GetOptions( |
24 |
my $result = GetOptions( |
24 |
'c' => \$commit, |
25 |
'c' => \$commit, |
25 |
'm' => \$update_frameworks, |
26 |
'l' => \$add_links, |
|
|
27 |
'f' => \$update_frameworks, |
26 |
'h|help' => \$show_help, |
28 |
'h|help' => \$show_help, |
27 |
'v' => \$verbose, |
29 |
'v' => \$verbose, |
28 |
); |
30 |
); |
Lines 53-135
unless ( $commit ) {
Link Here
|
53 |
else { |
55 |
else { |
54 |
print "There appears to be no series information to change\n"; |
56 |
print "There appears to be no series information to change\n"; |
55 |
} |
57 |
} |
|
|
58 |
print "Please run this again with the '-c' option to change the records\n"; |
56 |
exit 0; |
59 |
exit 0; |
57 |
} |
60 |
} |
58 |
|
61 |
|
59 |
print "Changing $num_records MARC records...\n"; |
62 |
print "Changing $num_records MARC records...\n"; |
60 |
|
63 |
|
|
|
64 |
# MARC21 specific |
65 |
my %fields = ( |
66 |
'440' => { |
67 |
'a' => 'title', |
68 |
'n' => 'number', |
69 |
'p' => 'part', |
70 |
'v' => 'volume', |
71 |
'x' => 'issn', |
72 |
'6' => 'link', |
73 |
'8' => 'ln', |
74 |
'w' => 'control', |
75 |
'0' => 'auth', |
76 |
}, |
77 |
'490' => { |
78 |
'a' => 'title', |
79 |
'v' => 'volume', |
80 |
'x' => 'issn', |
81 |
'6' => 'link', |
82 |
'8' => 'ln', |
83 |
}, |
84 |
); |
85 |
|
61 |
$bibs_sth->execute(); |
86 |
$bibs_sth->execute(); |
62 |
while ( my ( $biblionumber ) = $bibs_sth->fetchrow ) { |
87 |
while ( my ( $biblionumber ) = $bibs_sth->fetchrow ) { |
63 |
my $framework = GetFrameworkCode( $biblionumber ) || ''; |
88 |
my $framework = GetFrameworkCode( $biblionumber ) || ''; |
64 |
my ( @newfields ); |
89 |
my ( @newfields ); |
65 |
|
90 |
|
66 |
# MARC21 specific |
|
|
67 |
my ( $series1_t, $series1_f ) = ( '440', 'a' ); |
68 |
my ( $volume1_t, $volume1_f ) = ( '440', 'v' ); |
69 |
my ( $number1_t, $number1_f ) = ( '440', 'n' ); |
70 |
|
71 |
my ( $series2_t, $series2_f ) = ( '490', 'a' ); |
72 |
my ( $volume2_t, $volume2_f ) = ( '490', 'v' ); |
73 |
|
74 |
# Get biblio marc |
91 |
# Get biblio marc |
75 |
my $biblio = GetMarcBiblio( $biblionumber ); |
92 |
my $biblio = GetMarcBiblio( $biblionumber ); |
76 |
|
93 |
|
77 |
foreach my $field ( $biblio->field( $series1_t ) ) { |
94 |
foreach my $field ( $biblio->field( '440' ) ) { |
78 |
my @newsubfields; |
95 |
my @newsubfields; |
79 |
my @series1 = $field->subfield( $series1_f ); |
96 |
my @linksubfields; |
80 |
my @volume1 = $field->subfield( $volume1_f ); |
97 |
my $has_links = '0'; |
81 |
my @number1 = $field->subfield( $number1_f ); |
98 |
foreach my $subfield ( sort keys %{ $fields{'440'} } ) { |
82 |
my $i = 0; |
99 |
my @values = $field->subfield( $subfield ); |
83 |
foreach my $num ( @number1 ) { |
100 |
|
84 |
$volume1[$i] .= " " if ( $volume1[$i] ); |
101 |
if ( $add_links && @values ) { |
85 |
$volume1[$i++] .= $num if ( $num ); |
102 |
if ( $subfield eq 'w' || $subfield eq '0' ) { |
86 |
} |
103 |
$has_links = '1'; |
|
|
104 |
} |
105 |
foreach my $v ( @values ) { |
106 |
push @linksubfields, ( $subfield, $v ); |
107 |
} |
108 |
} |
87 |
|
109 |
|
88 |
while ( @series1 || @volume1 ) { |
110 |
if ( $subfield eq 'a' ) { |
89 |
if ( @series1 ) { |
111 |
my @numbers = $field->subfield( 'n' ); |
90 |
push @newsubfields, ( $series2_f, shift @series1 ); |
112 |
my @parts = $field->subfield( 'p' ); |
|
|
113 |
my $i = 0; |
114 |
while ( $i < @numbers || $i < @parts ) { |
115 |
my @strings = grep {$_} ( $values[$i], $numbers[$i], $parts[$i] ); |
116 |
$values[$i] = join ' ', @strings; |
117 |
$i++; |
118 |
} |
91 |
} |
119 |
} |
92 |
if ( @volume1 ) { |
120 |
|
93 |
push @newsubfields, ( $volume2_f, shift @volume1 ); |
121 |
if ( $fields{'490'}{$subfield} ) { |
|
|
122 |
foreach my $v ( @values ) { |
123 |
push @newsubfields, ( $subfield, $v ); |
124 |
} |
94 |
} |
125 |
} |
95 |
} |
126 |
} |
96 |
|
127 |
|
97 |
my $new_field = MARC::Field->new( $series2_t, '', '', |
128 |
if ( $has_links && @linksubfields ) { |
98 |
@newsubfields ); |
129 |
my $link_field = MARC::Field->new( |
|
|
130 |
'830', |
131 |
$field->indicator(1), $field->indicator(2), |
132 |
@linksubfields |
133 |
); |
134 |
push @newfields, $link_field; |
135 |
} |
136 |
|
137 |
if ( @newsubfields ) { |
138 |
my $new_field = MARC::Field->new( '490', $has_links, '', |
139 |
@newsubfields ); |
140 |
push @newfields, $new_field; |
141 |
} |
99 |
|
142 |
|
100 |
$biblio->delete_fields( $field ); |
143 |
$biblio->delete_fields( $field ); |
101 |
push @newfields, $new_field; |
|
|
102 |
} |
144 |
} |
103 |
|
145 |
|
104 |
foreach my $field ( $biblio->field( $series2_t ) ) { |
146 |
foreach my $field ( $biblio->field( '490' ) ) { |
105 |
my @newsubfields; |
147 |
my @newsubfields; |
106 |
my @series2 = $field->subfield( $series2_f ); |
148 |
foreach my $subfield ( sort keys %{ $fields{'490'} } ) { |
107 |
my @volume2 = $field->subfield( $volume2_f ); |
149 |
my @values = $field->subfield( $subfield ); |
108 |
|
150 |
|
109 |
while ( @series2 || @volume2 ) { |
151 |
if ( $fields{'440'}{$subfield} ) { |
110 |
if ( @series2 ) { |
152 |
foreach my $v ( @values ) { |
111 |
push @newsubfields, ( $series1_f, shift @series2 ); |
153 |
push @newsubfields, ( $subfield, $v ); |
112 |
} |
154 |
} |
113 |
if ( @volume2 ) { |
|
|
114 |
push @newsubfields, ( $volume1_f, shift @volume2 ); |
115 |
} |
155 |
} |
116 |
} |
156 |
} |
117 |
|
157 |
|
118 |
my $new_field = MARC::Field->new( $series1_t, '', '', |
158 |
if ( @newsubfields ) { |
119 |
@newsubfields ); |
159 |
my $new_field = MARC::Field->new( '440', '', '', |
|
|
160 |
@newsubfields ); |
161 |
push @newfields, $new_field; |
162 |
} |
120 |
|
163 |
|
121 |
$biblio->delete_fields( $field ); |
164 |
$biblio->delete_fields( $field ); |
122 |
push @newfields, $new_field; |
|
|
123 |
} |
165 |
} |
124 |
$biblio->insert_fields_ordered( @newfields ); |
166 |
$biblio->insert_fields_ordered( @newfields ); |
125 |
|
167 |
|
126 |
ModBiblioMarc( $biblio, $biblionumber, $framework ); |
|
|
127 |
if ( $verbose ) { |
168 |
if ( $verbose ) { |
128 |
print "Changing MARC for biblio number $biblionumber.\n"; |
169 |
print "Changing MARC for biblio number $biblionumber.\n"; |
129 |
} |
170 |
} |
130 |
else { |
171 |
else { |
131 |
print "."; |
172 |
print "."; |
132 |
} |
173 |
} |
|
|
174 |
ModBiblioMarc( $biblio, $biblionumber, $framework ); |
133 |
} |
175 |
} |
134 |
print "\n"; |
176 |
print "\n"; |
135 |
|
177 |
|
Lines 162-172
sub print_usage {
Link Here
|
162 |
$0: switch MARC21 440 tag and 490 tag contents |
204 |
$0: switch MARC21 440 tag and 490 tag contents |
163 |
|
205 |
|
164 |
Parameters: |
206 |
Parameters: |
165 |
-c Commit the changes to the marc records |
207 |
-c Commit the changes to the marc records. |
166 |
|
208 |
|
167 |
-m Also update the Koha field to MARC framework mappings for the |
209 |
-l Add 830 tags with authority information from 440. Otherwise |
|
|
210 |
this information will be ignored. |
211 |
|
212 |
-f Also update the Koha field to MARC framework mappings for the |
168 |
seriestitle and volume Koha fields. |
213 |
seriestitle and volume Koha fields. |
169 |
|
214 |
|
|
|
215 |
-v Show more information as the records are being changed. |
216 |
|
170 |
--help or -h show this message. |
217 |
--help or -h show this message. |
171 |
|
218 |
|
172 |
_USAGE_ |
219 |
_USAGE_ |
173 |
- |
|
|