Merge branch 'master' of http://manage-gmc.dev.kohalibrary.com/koha-installer
[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     my $tag = $record->field($tagfield);
42 #     warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
43     
44 # check that we have biblionumber at the right place, otherwise, update or create the field.
45     if ($tagfield <10) {
46         unless ($tag && $tag->data() == $biblionumber) {
47             if ($tag) {
48                 $tag->update($biblionumber);
49             } else {
50                 my $newrec = MARC::Field->new( $tagfield, $biblionumber);
51                 $record->insert_fields_ordered($newrec);
52             }
53             $update=1;
54         }
55     } else {
56         unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
57             if($tag) {
58                 $tag->update($tagfield => $biblionumber);
59             } else {
60                 my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
61                 $record->insert_fields_ordered($newrec);
62             }
63             $update=1;
64         }
65     }
66     
67     
68     if ($update){       
69         &ModBiblioMarc($record,$biblionumber,'');
70         print "\n modified : $biblionumber \n"; 
71     }
72     
73 }
74 END;