bug 3201: missing090field.pl - skip bad bibs
[koha.git] / 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 BEGIN {
7     # find Koha's Perl modules
8     # test carefully before changing this
9     use FindBin;
10     eval { require "$FindBin::Bin/../../kohalib.pl" };
11 }
12
13 # Koha modules used
14
15 use C4::Context;
16 use C4::Biblio;
17 use MARC::Record;
18 use MARC::File::USMARC;
19
20 $|=1;
21 my $dbh = C4::Context->dbh;
22
23 my $sth=$dbh->prepare("select m.biblionumber,b.biblioitemnumber from biblio m left join biblioitems b on b.biblionumber=m.biblionumber");
24 $sth->execute();
25
26 my $i=1;
27 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
28  my $record = GetMarcBiblio($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     my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField("biblio.biblionumber","");
38     my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField("biblio.biblioitemnumber","");
39         
40     my $update=0;
41     if (defined $record) {
42         my $tag = $record->field($tagfield);
43         #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
44     
45         # check that we have biblionumber at the right place, otherwise, update or create the field.
46         if ($tagfield <10) {
47             unless ($tag && $tag->data() == $biblionumber) {
48                 if ($tag) {
49                     $tag->update($biblionumber);
50                 } else {
51                     my $newrec = MARC::Field->new( $tagfield, $biblionumber);
52                     $record->insert_fields_ordered($newrec);
53                 }
54                 $update=1;
55             }
56         } else {
57             unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
58                 if($tag) {
59                     $tag->update($tagfield => $biblionumber);
60                 } else {
61                     my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
62                     $record->insert_fields_ordered($newrec);
63                 }
64                 $update=1;
65             }
66         }
67     } else {
68         warn "problem with :".$biblionumber." , record undefined";
69     }
70
71
72     if ($update){
73         &ModBiblioMarc($record,$biblionumber,'');
74         print "\n modified : $biblionumber \n";
75     }
76     
77 }
78 END;