Merge branch 'bug2505_patches' of git://git.catalyst.net.nz/koha into to-push
[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 #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;
18 use MARC::Record;
19 use MARC::File::USMARC;
20
21 $|=1;
22 my $dbh = C4::Context->dbh;
23
24 my $sth=$dbh->prepare("select m.biblionumber,b.biblioitemnumber from biblio m left join biblioitems b on b.biblionumber=m.biblionumber");
25 $sth->execute();
26
27 my $i=1;
28 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
29  my $record = GetMarcBiblio($biblionumber);
30     print ".";
31     print "\r$i" unless $i %100;
32     MARCmodbiblionumber($biblionumber,$biblioitemnumber,$record);
33 }
34
35 sub MARCmodbiblionumber{
36     my ($biblionumber,$biblioitemnumber,$record)=@_;
37     
38     my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField("biblio.biblionumber","");
39     my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField("biblio.biblioitemnumber","");
40         
41     my $update=0;
42     if (defined $record) {
43         my $tag = $record->field($tagfield);
44         #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
45     
46         # check that we have biblionumber at the right place, otherwise, update or create the field.
47         if ($tagfield <10) {
48             unless ($tag && $tag->data() == $biblionumber) {
49                 if ($tag) {
50                     $tag->update($biblionumber);
51                 } else {
52                     my $newrec = MARC::Field->new( $tagfield, $biblionumber);
53                     $record->insert_fields_ordered($newrec);
54                 }
55                 $update=1;
56             }
57         } else {
58             unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
59                 if($tag) {
60                     $tag->update($tagfield => $biblionumber);
61                 } else {
62                     my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
63                     $record->insert_fields_ordered($newrec);
64                 }
65                 $update=1;
66             }
67         }
68     } else {
69         warn "problem with :".$biblionumber." , record undefined";
70     }
71
72
73     if ($update){
74         &ModBiblioMarc($record,$biblionumber,'');
75         print "\n modified : $biblionumber \n";
76     }
77     
78 }
79 END;