Bug 17600: Standardize our EXPORT_OK
[srvgit] / misc / migration_tools / 22_to_30 / missing090field.pl
1 #!/usr/bin/perl
2 # This script finds and fixes missing 090 fields in Koha for MARC21
3 #  Written by TG on 01/10/2005
4 #  Revised by Joshua Ferraro on 03/31/2006
5 use strict;
6 #use warnings; FIXME - Bug 2505
7 BEGIN {
8     # find Koha's Perl modules
9     # test carefully before changing this
10     use FindBin ();
11     eval { require "$FindBin::Bin/../../kohalib.pl" };
12 }
13
14 # Koha modules used
15
16 use C4::Context;
17 use C4::Biblio qw( GetMarcBiblio GetMarcFromKohaField ModBiblioMarc );
18 use MARC::File::USMARC;
19
20 $|=1;
21 my $dbh = C4::Context->dbh;
22
23 my $sth=$dbh->prepare("SELECT biblionumber, biblioitemnumber FROM biblioitems");
24 $sth->execute();
25
26 my $i=1;
27 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
28  my $record = GetMarcBiblio({ biblionumber => $biblionumber });
29     print ".";
30     print "\r$i" unless $i %100;
31     MARCmodbiblionumber($biblionumber,$biblioitemnumber,$record);
32 }
33
34 sub MARCmodbiblionumber{
35     my ($biblionumber,$biblioitemnumber,$record)=@_;
36     
37     return unless $record;
38
39     my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField( "biblio.biblionumber" );
40     my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField( "biblio.biblioitemnumber" );
41         
42     my $update=0;
43     if (defined $record) {
44         my $tag = $record->field($tagfield);
45         #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
46     
47         # check that we have biblionumber at the right place, otherwise, update or create the field.
48         if ($tagfield <10) {
49             unless ($tag && $tag->data() == $biblionumber) {
50                 if ($tag) {
51                     $tag->update($biblionumber);
52                 } else {
53                     my $newrec = MARC::Field->new( $tagfield, $biblionumber);
54                     $record->insert_fields_ordered($newrec);
55                 }
56                 $update=1;
57             }
58         } else {
59             unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
60                 if($tag) {
61                     $tag->update($tagfield => $biblionumber);
62                 } else {
63                     my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
64                     $record->insert_fields_ordered($newrec);
65                 }
66                 $update=1;
67             }
68         }
69     } else {
70         warn "problem with :".$biblionumber." , record undefined";
71     }
72
73
74     if ($update){
75         &ModBiblioMarc($record,$biblionumber);
76         print "\n modified : $biblionumber \n";
77     }
78     
79 }
80 END;