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 my $tag = $record->field($tagfield);
42 # warn "ICI : ".$record->as_formatted if $record->subfield('090','a') eq '11546';
44 # check that we have biblionumber at the right place, otherwise, update or create the field.
46 unless ($tag && $tag->data() == $biblionumber) {
48 $tag->update($biblionumber);
50 my $newrec = MARC::Field->new( $tagfield, $biblionumber);
51 $record->insert_fields_ordered($newrec);
56 unless ($tag && $tag->subfield($biblionumtagsubfield) == $biblionumber) {
58 $tag->update($tagfield => $biblionumber);
60 my $newrec = MARC::Field->new( $tagfield,'','', $biblionumtagsubfield => $biblionumber,$biblioitemtagsubfield=>$biblioitemnumber);
61 $record->insert_fields_ordered($newrec);
69 &ModBiblioMarc($record,$biblionumber,'');
70 print "\n modified : $biblionumber \n";