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
7 # find Koha's Perl modules
8 # test carefully before changing this
10 eval { require "$FindBin::Bin/../../kohalib.pl" };
18 use MARC::File::USMARC;
21 my $dbh = C4::Context->dbh;
23 my $sth=$dbh->prepare("select m.biblionumber,b.biblioitemnumber from biblio m left join biblioitems b on b.biblionumber=m.biblionumber");
27 while (my ($biblionumber,$biblioitemnumber)=$sth->fetchrow ){
28 my $record = GetMarcBiblio($biblionumber);
30 print "\r$i" unless $i %100;
31 MARCmodbiblionumber($biblionumber,$biblioitemnumber,$record);
34 sub MARCmodbiblionumber{
35 my ($biblionumber,$biblioitemnumber,$record)=@_;
37 my ($tagfield,$biblionumtagsubfield) = &GetMarcFromKohaField("biblio.biblionumber","");
38 my ($tagfield2,$biblioitemtagsubfield) = &GetMarcFromKohaField("biblio.biblioitemnumber","");
41 if (defined $record) {
42 my $tag = $record->field($tagfield);
43 #warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
45 # check that we have biblionumber at the right place, otherwise, update or create the field.
47 unless ($tag && $tag->data() == $biblionumber) {
49 $tag->update($biblionumber);
51 my $newrec = MARC::Field->new( $tagfield, $biblionumber);
52 $record->insert_fields_ordered($newrec);
57 unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
59 $tag->update($tagfield => $biblionumber);
61 my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
62 $record->insert_fields_ordered($newrec);
68 warn "problem with :".$biblionumber." , record undefined";
73 &ModBiblioMarc($record,$biblionumber,'');
74 print "\n modified : $biblionumber \n";