Bug 22721: Remove frameworkcode parameter in GetMarcFromKohaField calls
[koha-equinox.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 biblionumber, biblioitemnumber FROM biblioitems");
25 $sth->execute();
26
27 my $i=1;
28 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
29  my $record = GetMarcBiblio({ biblionumber => $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     return unless $record;
39
40     my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField( "biblio.biblionumber" );
41     my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField( "biblio.biblioitemnumber" );
42         
43     my $update=0;
44     if (defined $record) {
45         my $tag = $record->field($tagfield);
46         #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
47     
48         # check that we have biblionumber at the right place, otherwise, update or create the field.
49         if ($tagfield <10) {
50             unless ($tag && $tag->data() == $biblionumber) {
51                 if ($tag) {
52                     $tag->update($biblionumber);
53                 } else {
54                     my $newrec = MARC::Field->new( $tagfield, $biblionumber);
55                     $record->insert_fields_ordered($newrec);
56                 }
57                 $update=1;
58             }
59         } else {
60             unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
61                 if($tag) {
62                     $tag->update($tagfield => $biblionumber);
63                 } else {
64                     my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
65                     $record->insert_fields_ordered($newrec);
66                 }
67                 $update=1;
68             }
69         }
70     } else {
71         warn "problem with :".$biblionumber." , record undefined";
72     }
73
74
75     if ($update){
76         &ModBiblioMarc($record,$biblionumber,'');
77         print "\n modified : $biblionumber \n";
78     }
79     
80 }
81 END;