a75fb24ead70be7273bc776420b5ac9bcd6e32d2
[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
8 # Koha modules used
9
10 use C4::Context;
11 use C4::Biblio qw( GetMarcBiblio GetMarcFromKohaField ModBiblioMarc );
12 use MARC::File::USMARC;
13
14 $|=1;
15 my $dbh = C4::Context->dbh;
16
17 my $sth=$dbh->prepare("SELECT biblionumber, biblioitemnumber FROM biblioitems");
18 $sth->execute();
19
20 my $i=1;
21 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
22  my $record = GetMarcBiblio({ biblionumber => $biblionumber });
23     print ".";
24     print "\r$i" unless $i %100;
25     MARCmodbiblionumber($biblionumber,$biblioitemnumber,$record);
26 }
27
28 sub MARCmodbiblionumber{
29     my ($biblionumber,$biblioitemnumber,$record)=@_;
30     
31     return unless $record;
32
33     my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField( "biblio.biblionumber" );
34     my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField( "biblio.biblioitemnumber" );
35         
36     my $update=0;
37     if (defined $record) {
38         my $tag = $record->field($tagfield);
39         #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
40     
41         # check that we have biblionumber at the right place, otherwise, update or create the field.
42         if ($tagfield <10) {
43             unless ($tag && $tag->data() == $biblionumber) {
44                 if ($tag) {
45                     $tag->update($biblionumber);
46                 } else {
47                     my $newrec = MARC::Field->new( $tagfield, $biblionumber);
48                     $record->insert_fields_ordered($newrec);
49                 }
50                 $update=1;
51             }
52         } else {
53             unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
54                 if($tag) {
55                     $tag->update($tagfield => $biblionumber);
56                 } else {
57                     my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
58                     $record->insert_fields_ordered($newrec);
59                 }
60                 $update=1;
61             }
62         }
63     } else {
64         warn "problem with :".$biblionumber." , record undefined";
65     }
66
67
68     if ($update){
69         &ModBiblioMarc($record,$biblionumber);
70         print "\n modified : $biblionumber \n";
71     }
72     
73 }
74 END;