From 3bee5b5743f523fe8bb81658ce8e06e9e697abc4 Mon Sep 17 00:00:00 2001 From: tipaul Date: Thu, 20 Jun 2002 21:07:30 +0000 Subject: [PATCH] * Acquisition synchronised with rel-1-2 * Update of biblio.pm and catalogue.pm that continuates MARC stuff. Lot of explanations at the beginning of Biblio.pm --- C4/Acquisitions.pm | 81 +- C4/Biblio.pm | 3309 +++++++++++++++++++++++++------------------- 2 files changed, 1917 insertions(+), 1473 deletions(-) diff --git a/C4/Acquisitions.pm b/C4/Acquisitions.pm index 4e5b2a9bcf..58250211e2 100644 --- a/C4/Acquisitions.pm +++ b/C4/Acquisitions.pm @@ -1,9 +1,10 @@ -package C4::Acquisitions; #asummes C4/Acquisitions.pm +package C4::Acquisitions; #assumes C4/Acquisitions.pm use strict; require Exporter; use C4::Database; - +use warnings; + #use C4::Biblio; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # set the version for version checking @@ -96,10 +97,11 @@ sub itemcount{ sub getorder{ my ($bi,$bib)=@_; my $dbh=C4Connect; - my $query="Select ordernumber from aqorders where biblionumber=$bib and - biblioitemnumber='$bi'"; + my $query="Select ordernumber + from aqorders + where biblionumber=? and biblioitemnumber=?"; my $sth=$dbh->prepare($query); - $sth->execute; + $sth->execute($bib,$bi); my $ordnum=$sth->fetchrow_hashref; $sth->finish; my $order=getsingleorder($ordnum->{'ordernumber'}); @@ -112,12 +114,12 @@ sub getsingleorder { my ($ordnum)=@_; my $dbh=C4Connect; my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown - where aqorders.ordernumber='$ordnum' + where aqorders.ordernumber=? and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=aqorders.biblioitemnumber and aqorders.ordernumber=aqorderbreakdown.ordernumber"; my $sth=$dbh->prepare($query); - $sth->execute; + $sth->execute($ordnum); my $data=$sth->fetchrow_hashref; $sth->finish; $dbh->disconnect; @@ -150,10 +152,9 @@ sub getallorders { my $dbh=C4Connect; my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid' and (cancelledby is NULL or cancelledby = '') - and (quantityreceived < quantity or quantityreceived is NULL) - and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber= - aqorders.biblioitemnumber - group by aqorders.biblioitemnumber + and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber= + aqorders.biblioitemnumber + group by aqorders.biblioitemnumber order by biblio.title"; my $i=0; @@ -196,27 +197,28 @@ sub getrecorders { } sub ordersearch { - my ($search,$biblio,$catview) = @_; - my $dbh = C4Connect; - my $query = "Select *,biblio.title from aqorders,biblioitems,biblio -where aqorders.biblioitemnumber = biblioitems.biblioitemnumber -and biblio.biblionumber=aqorders.biblionumber -and ((datecancellationprinted is NULL) -or (datecancellationprinted = '0000-00-00')) -and (("; - my @data = split(' ',$search); - my $count = @data; - for (my $i = 0; $i < $count; $i++) { - $query .= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and "; + my ($search,$biblio,$catview)=@_; + my $dbh=C4Connect; + my $query="Select *,biblio.title from aqorders,biblioitems,biblio + where aqorders.biblioitemnumber = biblioitems.biblioitemnumber + and biblio.biblionumber=aqorders.biblionumber + and ((datecancellationprinted is NULL) + or (datecancellationprinted = '0000-00-00') + and (("; + my @data=split(' ',$search); + my $count=@data; + for (my $i=0;$i<$count;$i++){ + $query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and "; } $query=~ s/ and $//; - $query.=" ) or biblioitems.isbn='$search' + $query.=" ) or biblioitems.isbn='$search' or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) "; if ($catview ne 'yes'){ $query.=" and (quantityreceived < quantity or quantityreceived is NULL)"; } $query.=" group by aqorders.ordernumber"; my $sth=$dbh->prepare($query); +# print $query; $sth->execute; my $i=0; my @results; @@ -290,7 +292,7 @@ sub basket { '0000-00-00')"; if ($supplier ne ''){ $query.=" and aqorders.booksellerid='$supplier'"; - } + } $query.=" group by aqorders.ordernumber"; my $sth=$dbh->prepare($query); $sth->execute; @@ -322,7 +324,8 @@ sub newbasket { sub bookfunds { my $dbh=C4Connect; my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid - =aqbudget.bookfundid + =aqbudget.bookfundid + and aqbudget.startdate='2001-07-01' group by aqbookfund.bookfundid order by bookfundname"; my $sth=$dbh->prepare($query); $sth->execute; @@ -338,21 +341,21 @@ sub bookfunds { } sub branches { - my $dbh = C4Connect; - my $query = "Select * from branches"; - my $sth = $dbh->prepare($query); - my $i = 0; - my @results; + my $dbh=C4Connect; + my $query="Select * from branches"; + my $sth=$dbh->prepare($query); + my $i=0; + my @results; $sth->execute; - while (my $data = $sth->fetchrow_hashref) { - $results[$i] = $data; - $i++; + while (my $data = $sth->fetchrow_hashref){ + $results[$i]=$data; + $i++; } # while - $sth->finish; - $dbh->disconnect; - return($i, @results); + $sth->finish; + $dbh->disconnect; + return($i, @results); } # sub branches sub bookfundbreakdown { @@ -360,7 +363,9 @@ sub bookfundbreakdown { my $dbh=C4Connect; my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription from aqorders,aqorderbreakdown where bookfundid='$id' and - aqorders.ordernumber=aqorderbreakdown.ordernumber + aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >= + '2001-07-01' and budgetdate <'2002-07-01') or + (datereceived >= '2001-07-01' and datereceived < '2002-07-01')) and (datecancellationprinted is NULL or datecancellationprinted='0000-00-00')"; my $sth=$dbh->prepare($query); diff --git a/C4/Biblio.pm b/C4/Biblio.pm index ecb3639669..51aed82fc8 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -4,10 +4,35 @@ package C4::Biblio; # biblio, biblioitems, items # bibliosubject, bibliosubtitle +# move from 1.2 to 1.4 version : +# 1.2 and previous version uses a specific API to manage biblios. This API uses old-DB style parameters. +# In the 1.4 version, we want to do 2 differents things : +# - keep populating the old-DB, that has a LOT less datas than MARC +# - populate the MARC-DB +# To populate the DBs we have 2 differents sources : +# - the standard acquisition system (through book sellers), that does'nt use MARC data +# - the MARC acquisition system, that uses MARC data. +# +# thus, we have 2 differents cases : +# - with the standard acquisition system, we have non MARC data and want to populate old-DB and MARC-DB, knowing it's an incomplete MARC-record +# - with the MARC acquisition system, we have MARC datas, and want to loose nothing in MARC-DB. So, we can't store datas in old-DB, then copy in MARC-DB. +# we MUST have an API for true MARC data, that populate MARC-DB then old-DB +# +# That's why we need 4 APIs : +# all subs beginning by MARC manage only MARC tables. They manage MARC-DB with MARC::Record parameters +# all subs beginning by OLD manage only OLD-DB tables. They manage old-DB with old-DB parameters +# all subs beginning by ALL manage both OLD-DB and MARC tables. They use MARC::Record as parameters. it's the API that MUST be used in MARC acquisition system +# all subs beginning by seomething else are the old-style API. They use old-DB as parameter, then call internally the OLD and MARC subs. +# +# Thus, we assume a nice translation to future versions : if we want in a 1.6 release completly forget old-DB, we can do it easily. +# in 1.4 version, the translations will be nicer, as we have NOTHING to do in code. Everything has to be done in Biblio.pm ;-) + + use strict; require Exporter; use C4::Database; use MARC::Record; +use warnings; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @@ -16,9 +41,12 @@ $VERSION = 0.01; @ISA = qw(Exporter); @EXPORT = qw( - &MARCmodsubfield &MARCaddsubfield &MARCfindsubfield - &MARCaddbiblio &MARCnextsubfieldid &MARCkoha2marc + &MARCaddbiblio &MARCmodsubfield &MARCaddsubfield + &MARCmodbiblio + &MARCfindsubfield + &MARCkoha2marc &MARCgetbiblio + &MARCaddword &MARCdelword &newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem &updateItem @@ -69,11 +97,36 @@ my $priv_func = sub { # make all your functions, whether exported or not; +# +# +# MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC MARC +# +# +# all the following subs takes a MARC::Record as parameter and manage +# the MARC-DB. They are called by the 1.0/1.2 xxx subs, and by the +# ALLxxx subs (xxx deals with old-DB parameters, the ALLxxx deals with MARC-DB parameter) +=head1 SYNOPSIS + + use Biblio.pm; + $dbh=&C4Connect; + $biblio= MARC::Record->new(); + fill $biblio + $bibid = &MARCaddbiblio($dbh,$biblio); + +=head1 DESCRIPTION + + Creates a biblio (in the MARC tables only). + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + sub MARCaddbiblio { # pass the MARC::Record to this function, and it will create the records in the marc tables - my ($record) = @_; + my ($dbh,$record) = @_; my @fields=$record->fields(); - my $dbh=C4Connect; my $bibid; # adding main table, and retrieving bibid $dbh->do("lock tables marc_biblio WRITE"); @@ -82,7 +135,6 @@ sub MARCaddbiblio { $sth=$dbh->prepare("select max(bibid) from marc_biblio"); $sth->execute; ($bibid)=$sth->fetchrow; -# print "BIBID :::".$marcstructure->{bibid}."\n"; $sth->finish; $dbh->do("unlock tables"); my $fieldcount=0; @@ -92,7 +144,7 @@ sub MARCaddbiblio { $fieldcount++; foreach my $subfieldcount (0..$#subfields) { print $field->tag().":".$field->indicator(1).$field->indicator(2).":".$subfields[$subfieldcount][0].":".$subfields[$subfieldcount][1]."\n"; - &MARCaddsubfield($bibid, + &MARCaddsubfield($dbh,$bibid, $field->tag(), $field->indicator(1).$field->indicator(2), $fieldcount, @@ -102,14 +154,82 @@ sub MARCaddbiblio { ); } } + return $bibid; +} + +=head1 SYNOPSIS + + use Biblio.pm; + &MARCaddsubfield($dbh,$bibid,$tagid,$indicator,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue); + +=head1 DESCRIPTION + + Adds a subfield in a biblio (in the MARC tables only). + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCaddsubfield { +# Add a new subfield to a tag into the DB. + my $dbh=shift; + my $bibid=shift; + my $tagid=shift; + my $indicator=shift; + my $tagorder=shift; + my $subfieldcode=shift; + my $subfieldorder=shift; + my $subfieldvalue=shift; + + unless ($subfieldorder) { + my $sth=$dbh->prepare("select max(subfieldorder) from marc_subfield_table where tag=$tagid"); + $sth->execute; + if ($sth->rows) { + ($subfieldorder) = $sth->fetchrow; + $subfieldorder++; + } else { + $subfieldorder=1; + } + } + if (length($subfieldvalue)>255) { + $dbh->do("lock tables marc_blob_subfield WRITE, marc_subfield_table WRITE"); + my $sth=$dbh->prepare("insert into marc_blob_subfield (subfieldvalue) values (?)"); + $sth->execute($subfieldvalue); + $sth=$dbh->prepare("select max(blobidlink)from marc_blob_subfield"); + $sth->execute; + my ($res)=$sth->fetchrow; + my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?)"); + $sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$res); + $dbh->do("unlock tables"); + } else { + my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,subfieldcode,subfieldorder,subfieldvalue) values (?,?,?,?,?,?)"); + $sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue); + } + &MARCaddword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue); } +=head1 SYNOPSIS + + use Biblio.pm; + $MARCRecord = &MARCgetbiblio($dbh,$bibid); + +=head1 DESCRIPTION + + Returns a MARC::Record for the biblio $bibid. + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + sub MARCgetbiblio { # Returns MARC::Record of the biblio passed in parameter. - my ($bibid)=@_; - my $dbh=&C4Connect; + my ($dbh,$bibid)=@_; my $record = MARC::Record->new(); -#---- TODO : the leader is missing (000 tag ?) +#---- TODO : the leader is missing my $sth=$dbh->prepare("select bibid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue,valuebloblink from marc_subfield_table where bibid=? @@ -124,25 +244,95 @@ sub MARCgetbiblio { $row->{'subfieldvalue'}=$row2->{'subfieldvalue'}; } if ($record->field($row->{'tag'})) { - my $tag =$record->field($row->{'tag'}); - if ($tag) { - $tag->add_subfields($row->{'subfieldcode'},$row->{'subfieldvalue'}); - $record->delete_field($tag); - $record->add_fields($tag); + my $field =$record->field($row->{'tag'}); + if ($field) { + my $x = $field->add_subfields($row->{'subfieldcode'},$row->{'subfieldvalue'}); + $record->delete_field($field); + $record->add_fields($field); } } else { - $record->add_fields($row->{'tag'}," "," ",$row->{'subfieldcode'} => $row->{'subfieldvalue'}); + my $temp = MARC::Field->new($row->{'tag'}," "," ", $row->{'subfieldcode'} => $row->{'subfieldvalue'}); + $record->add_fields($temp); } } +# print "----------------------\n".$record->as_formatted()."\n-----------------"; return $record; } +=head1 SYNOPSIS + + use Biblio.pm; + $MARCRecord = &MARCmodbiblio($dbh,$bibid); + +=head1 DESCRIPTION + + MARCmodbiblio changes a biblio for a biblio,MARC::Record passed as parameter + if $delete == 1, every field/subfield not found is deleted in the biblio + otherwise, only data passed to MARCmodbiblio is managed. + thus, you can change only a small part of a biblio (like an item...) + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCmodbiblio { + my ($dbh,$bibid,$delete,$record)=@_; + my $oldrecord=&MARCgetbiblio($dbh,$bibid); +# if nothing to change, don't waste time... + if ($oldrecord eq $record) { +# print "nothing to do \n"; + return; + } +# otherwise, skip through each subfield... + my @fields = $record->fields(); + my $tagorder=0; + foreach my $field (@fields) { +#print "tag : ".$field->tag()."\n"; + my $oldfield = $oldrecord->field($field->tag()); + my @subfields=$field->subfields(); + my $subfieldorder=0; + $tagorder++; + foreach my $subfield (@subfields) { + $subfieldorder++; + if ($oldfield eq 0) { +# just adding datas... + &MARCaddsubfield($dbh,$bibid,$field->tag(),$field->indicator(1).$field->indicator(2), + 1,@$subfield[0],$subfieldorder,@$subfield[1]); + } else { +# modify he subfield if it's a different string + if ($oldfield->subfield(@$subfield[0]) ne @$subfield[1] ) { + my $subfieldid=&MARCfindsubfieldid($dbh,$bibid,$field->tag(),$tagorder,@$subfield[0],$subfieldorder); + &MARCmodsubfield($dbh,$subfieldid,@$subfield[1]); + } else { +# print "nothing to change\n"; + } + } + } + } +} + +=head1 SYNOPSIS + + use Biblio.pm; + ($subfieldid,$subfieldvalue) = &MARCmodsubfield($dbh,$subfieldid,$subfieldvalue); + +=head1 DESCRIPTION + + MARCmodsubfield changes the value of a given subfield + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + sub MARCmodsubfield { # Subroutine changes a subfield value given a subfieldid. - my ( $subfieldid, $subfieldvalue )=@_; + my ($dbh, $subfieldid, $subfieldvalue )=@_; - my $dbh=&C4Connect; $dbh->do("lock tables marc_blob_subfield WRITE,marc_subfield_table WRITE"); my $sth1=$dbh->prepare("select valuebloblink from marc_subfield_table where subfieldid=?"); $sth1->execute($subfieldid); @@ -171,17 +361,35 @@ sub MARCmodsubfield { } $dbh->do("unlock tables"); $sth->finish; - $dbh->disconnect; + $sth=$dbh->prepare("select bibid,tag,tagorder,subfieldcode,subfieldid,subfieldorder from marc_subfield_table where subfieldid=?"); + $sth->execute($subfieldid); + my ($bibid,$tagid,$tagorder,$subfieldcode,$subfieldid,$subfieldorder) = $sth->fetchrow; + &MARCdelword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder); + &MARCaddword($dbh,$bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue); return($subfieldid, $subfieldvalue); } +=head1 SYNOPSIS + + use Biblio.pm; + $subfieldid = &MARCfindsubfield($dbh,$bibid,$tag,$subfieldcode,$subfieldorder,$subfieldvalue); + +=head1 DESCRIPTION + + MARCfindsubfield returns a subfield number given a bibid/tag/subfield values. + Returns -1 if more than 1 answer + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + sub MARCfindsubfield { -# returns a subfields number given a bibid/tag/subfield values - my ($bibid,$tag,$subfieldcode,$subfieldvalue,$subfieldorder) = @_; + my ($dbh,$bibid,$tag,$subfieldcode,$subfieldorder,$subfieldvalue) = @_; my $resultcounter=0; my $subfieldid; my $lastsubfieldid; - my $dbh=&C4Connect; my $query="select subfieldid from marc_subfield_table where bibid=? and tag=? and subfieldcode=?"; if ($subfieldvalue) { $query .= " and subfieldvalue=".$dbh->quote($subfieldvalue); @@ -206,48 +414,98 @@ sub MARCfindsubfield { } } -sub MARCaddsubfield { -# Add a new subfield to a tag into the DB. - my $bibid=shift; - my $tagid=shift; - my $indicator=shift; - my $tagorder=shift; - my $subfieldcode=shift; - my $subfieldorder=shift; - my $subfieldvalue=shift; +=head1 SYNOPSIS - my $dbh=&C4Connect; - unless ($subfieldorder) { - my $sth=$dbh->prepare("select max(subfieldorder) from marc_subfield_table where tag=$tagid"); - $sth->execute; - if ($sth->rows) { - ($subfieldorder) = $sth->fetchrow; - $subfieldorder++; - } else { - $subfieldorder=1; - } - } - if (length($subfieldvalue)>255) { - $dbh->do("lock tables marc_blob_subfield WRITE, marc_subfield_table WRITE"); - my $sth=$dbh->prepare("insert into marc_blob_subfield (subfieldvalue) values (?)"); - $sth->execute($subfieldvalue); - $sth=$dbh->prepare("select max(blobidlink)from marc_blob_subfield"); - $sth->execute; - my ($res)=$sth->fetchrow; - my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?)"); - $sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$res); - $dbh->do("unlock tables"); - } else { - my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,subfieldcode,subfieldorder,subfieldvalue) values (?,?,?,?,?,?)"); - $sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$subfieldvalue); - } + use Biblio.pm; + $subfieldid = &MARCfindsubfieldid($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder); + +=head1 DESCRIPTION + + MARCfindsubfieldid find a subfieldid for a bibid/tag/tagorder/subfield/subfieldorder + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCfindsubfieldid { + my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_; + my $sth=$dbh->prepare("select subfieldid from marc_subfield_table + where bibid=? and tag=? and tagorder=? + and subfieldcode=? and subfieldorder=?"); + $sth->execute($bibid,$tag,$tagorder,$subfield,$subfieldorder); + my ($res) = $sth->fetchrow; + return $res; +} + +=head1 SYNOPSIS + + use Biblio.pm; + &MARCdelsubfield($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder); + +=head1 DESCRIPTION + + MARCdelsubfield delete a subfield for a bibid/tag/tagorder/subfield/subfieldorder + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCdelsubfield { +# delete a subfield for $bibid / tag / tagorder / subfield / subfieldorder + my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_; +# my $dbh=&C4Connect; + my $dbh->do("delete from marc_subfield_table where bibid='$bibid' and + tag='$tag' and tagorder='$tagorder' + and subfieldcode='$subfield'and subfieldorder='$subfieldorder + "); +} + +=head1 SYNOPSIS + + use Biblio.pm; + &MARCdelbiblio($dbh,$bibid); + +=head1 DESCRIPTION + + MARCdelbiblio delete biblio $bibid + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCdelbiblio { +# delete a biblio for a $bibid + my ($dbh,$bibid) = @_; +# my $dbh=&C4Connect; + $dbh->do("delete from marc_subfield_table where bibid='$bibid'"); + $dbh->do("delete from marc_biblio where bibid='$bibid'"); } +=head1 SYNOPSIS + + use Biblio.pm; + $MARCRecord = &MARCkoha2marc($dbh,$biblionumber,biblioitemnumber,itemnumber); + +=head1 DESCRIPTION + + MARCkoha2marc is a wrapper between old-DB and MARC-DB. It returns a MARC::Record builded with old-DB biblio/biblioitem/item + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut sub MARCkoha2marc { # this function builds MARC::Record from the old koha-DB fields - my ($biblionumber,$biblioitemnumber,$itemnumber) = @_; - my $dbh=&C4Connect; + my ($dbh,$biblionumber,$biblioitemnumber,$itemnumber) = @_; +# my $dbh=&C4Connect; my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"); my $record = MARC::Record->new(); #--- if bibid, then retrieve old-style koha data @@ -298,8 +556,18 @@ sub MARCkoha2marc { } } return $record; +# TODO : retrieve notes, additionalauthors } +=head1 DESCRIPTION + + MARCkoha2marcOnefield is used by MARCkoha2marc and is not exported + +=head1 AUTHOR + +Paul POULAIN paul.poulain@free.fr + +=cut sub MARCkoha2marcOnefield { my ($sth,$record,$kohafieldname,$value)=@_; my $tagfield; @@ -320,797 +588,563 @@ sub MARCkoha2marcOnefield { return $record; } -sub updateBiblio { -# Update the biblio with biblionumber $biblio->{'biblionumber'} -# I guess this routine should search through all marc records for a record that -# has the same biblionumber stored in it, and modify the MARC record as well as -# the biblio table. -# -# Also, this subroutine should search through the $biblio object and compare it -# to the existing record and _LOG ALL CHANGES MADE_ in some way. I'd like for -# this logging feature to be usable to undo changes easily. +=head1 DESCRIPTION - my ($env, $biblio) = @_; - my $Record_ID; - my $biblionumber=$biblio->{'biblionumber'}; - my $dbh=&C4Connect; - my $sth=$dbh->prepare("select * from biblio where biblionumber=$biblionumber"); - $sth->execute; - my $origbiblio=$sth->fetchrow_hashref; - $sth=$dbh->prepare("select subtitle from bibliosubtitle where biblionumber=$biblionumber"); - $sth->execute; - my ($subtitle)=$sth->fetchrow; - $origbiblio->{'subtitle'}=$subtitle; - $sth=$dbh->prepare("select author from additionalauthors where biblionumber=$biblionumber"); - $sth->execute; - my $origadditionalauthors; - while (my ($author) = $sth->fetchrow) { - push (@{$origbiblio->{'additionalauthors'}}, $author); - $origadditionalauthors->{$author}=1; - } - $sth=$dbh->prepare("select subject from bibliosubject where biblionumber=$biblionumber"); - $sth->execute; - my $origsubjects; - while (my ($subject) = $sth->fetchrow) { - push (@{$origbiblio->{'subjects'}}, $subject); - $origsubjects->{$subject}=1; - } + MARCaddword is used to manage MARC_word table and is not exported - -# Obtain a list of MARC Record_ID's that are tied to this biblio - $sth=$dbh->prepare("select bibid from marc_subfield_table where tag='090' and subfieldvalue=$biblionumber and subfieldcode='c'"); - $sth->execute; - my @marcrecords; - while (my ($bibid) = $sth->fetchrow) { - push(@marcrecords, $bibid); - } +=head1 AUTHOR - my $bibid=''; - if ($biblio->{'author'} ne $origbiblio->{'author'}) { - my $q_author=$dbh->quote($biblio->{'author'}); - logchange('kohadb', 'change', 'biblio', 'author', $origbiblio->{'author'}, $biblio->{'author'}); - my $sti=$dbh->prepare("update biblio set author=$q_author where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $bibid (@marcrecords) { - logchange('marc', 'change', $bibid, '100', 'a', $origbiblio->{'author'}, $biblio->{'author'}); - changeSubfield($bibid, '100', 'a', $origbiblio->{'author'}, $biblio->{'author'}); - } - } - if ($biblio->{'title'} ne $origbiblio->{'title'}) { - my $q_title=$dbh->quote($biblio->{'title'}); - logchange('kohadb', 'change', 'biblio', 'title', $origbiblio->{'title'}, $biblio->{'title'}); - my $sti=$dbh->prepare("update biblio set title=$q_title where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $Record_ID (@marcrecords) { - logchange('marc', 'change', $Record_ID, '245', 'a', $origbiblio->{'title'}, $biblio->{'title'}); - changeSubfield($Record_ID, '245', 'a', $origbiblio->{'title'}, $biblio->{'title'}); - } - } - if ($biblio->{'subtitle'} ne $origbiblio->{'subtitle'}) { - my $q_subtitle=$dbh->quote($biblio->{'subtitle'}); - logchange('kohadb', 'change', 'biblio', 'subtitle', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); - my $sti=$dbh->prepare("update bibliosubtitle set subtitle=$q_subtitle where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $Record_ID (@marcrecords) { - logchange('marc', 'change', $Record_ID, '245', 'b', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); - changeSubfield($Record_ID, '245', 'b', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); - } - } - if ($biblio->{'unititle'} ne $origbiblio->{'unititle'}) { - my $q_unititle=$dbh->quote($biblio->{'unititle'}); - logchange('kohadb', 'change', 'biblio', 'unititle', $origbiblio->{'unititle'}, $biblio->{'unititle'}); - my $sti=$dbh->prepare("update biblio set unititle=$q_unititle where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - } - if ($biblio->{'notes'} ne $origbiblio->{'notes'}) { - my $q_notes=$dbh->quote($biblio->{'notes'}); - logchange('kohadb', 'change', 'biblio', 'notes', $origbiblio->{'notes'}, $biblio->{'notes'}); - my $sti=$dbh->prepare("update biblio set notes=$q_notes where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $Record_ID (@marcrecords) { - logchange('marc', 'change', $Record_ID, '500', 'a', $origbiblio->{'notes'}, $biblio->{'notes'}); - changeSubfield($Record_ID, '500', 'a', $origbiblio->{'notes'}, $biblio->{'notes'}); - } - } - if ($biblio->{'serial'} ne $origbiblio->{'serial'}) { - my $q_serial=$dbh->quote($biblio->{'serial'}); - logchange('kohadb', 'change', 'biblio', 'serial', $origbiblio->{'serial'}, $biblio->{'serial'}); - my $sti=$dbh->prepare("update biblio set serial=$q_serial where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - } - if ($biblio->{'seriestitle'} ne $origbiblio->{'seriestitle'}) { - my $q_seriestitle=$dbh->quote($biblio->{'seriestitle'}); - logchange('kohadb', 'change', 'biblio', 'seriestitle', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); - my $sti=$dbh->prepare("update biblio set seriestitle=$q_seriestitle where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $Record_ID (@marcrecords) { - logchange('marc', 'change', $Record_ID, '440', 'a', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); - changeSubfield($Record_ID, '440', 'a', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); - } - } - if ($biblio->{'copyrightdate'} ne $origbiblio->{'copyrightdate'}) { - my $q_copyrightdate=$dbh->quote($biblio->{'copyrightdate'}); - logchange('kohadb', 'change', 'biblio', 'copyrightdate', $origbiblio->{'copyrightdate'}, $biblio->{'copyrightdate'}); - my $sti=$dbh->prepare("update biblio set copyrightdate=$q_copyrightdate where biblionumber=$biblio->{'biblionumber'}"); - $sti->execute; - foreach $Record_ID (@marcrecords) { - logchange('marc', 'change', $Record_ID, '260', 'c', "c$origbiblio->{'notes'}", "c$biblio->{'notes'}"); - changeSubfield($Record_ID, '260', 'c', "c$origbiblio->{'notes'}", "c$biblio->{'notes'}"); +Paul POULAIN paul.poulain@free.fr + +=cut + +sub MARCaddword { +# split a subfield string and adds it into the word table. +# removes stopwords + my ($dbh,$bibid,$tag,$tagorder,$subfieldid,$subfieldorder,$sentence) =@_; + $sentence =~ s/(\.|\?|\:|\!|\'|,|\-)/ /g; +# TODO : remove stopwords + my @words = split / /,$sentence; + my $sth=$dbh->prepare("insert into marc_word (bibid, tag, tagorder, subfieldid, subfieldorder, word, sndx_word) + values (?,?,?,?,?,?,soundex(?))"); + foreach my $word (@words) { +# we record only words longer than 2 car + if (length($word)>1) { + $sth->execute($bibid,$tag,$tagorder,$subfieldid,$subfieldorder,$word,$word); +# print "($bibid,$tag,$tagorder,$subfieldid,$subfieldorder,$word,$word)\n"; } } +} -# Check for subject heading changes - - my $newsubject=''; - my $subjects; - foreach $newsubject (@{$biblio->{'subject'}}) { - $subjects->{$newsubject}=1; - if ($origsubjects->{$newsubject}) { - $subjects->{$newsubject}=2; - } else { - my $q_newsubject=$dbh->quote($newsubject); - my $sth=$dbh->prepare("insert into bibliosubject (subject,biblionumber) values ($q_newsubject, $biblionumber)"); - $sth->execute; - logchange('kohadb', 'add', 'biblio', 'subject', $newsubject); - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$newsubject; - my $tag='650'; - my $Record_ID; - foreach $Record_ID (@marcrecords) { - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - logchange('marc', 'add', $Record_ID, '650', 'a', $newsubject); - } - } - } - my $origsubject; - foreach $origsubject (keys %$origsubjects) { - if ($subjects->{$origsubject} == 1) { - my $q_origsubject=$dbh->quote($origsubject); - logchange('kohadb', 'delete', 'biblio', '$biblionumber', 'subject', $origsubject); - my $sth=$dbh->prepare("delete from bibliosubject where biblionumber=$biblionumber and subject=$q_origsubject"); - $sth->execute; - } - } +=head1 DESCRIPTION + MARCdelword is used to manage MARC_word table and is not exported -sub newBiblioItem { - my ($env, $biblioitem) = @_; - my $dbh=&C4Connect; - my $biblionumber=$biblioitem->{'biblionumber'}; - my $biblioitemnumber=$biblioitem->{'biblioitemnumber'}; - my $volume=$biblioitem->{'volume'}; - my $q_volume=$dbh->quote($volume); - my $number=$biblioitem->{'number'}; - my $q_number=$dbh->quote($number); - my $classification=$biblioitem->{'classification'}; - my $q_classification=$dbh->quote($classification); - my $itemtype=$biblioitem->{'itemtype'}; - my $q_itemtype=$dbh->quote($itemtype); - my $isbn=$biblioitem->{'isbn'}; - my $q_isbn=$dbh->quote($isbn); - my $issn=$biblioitem->{'issn'}; - my $q_issn=$dbh->quote($issn); - my $dewey=$biblioitem->{'dewey'}; - $dewey=~s/\.*0*$//; - ($dewey == 0) && ($dewey=''); - my $subclass=$biblioitem->{'subclass'}; - my $q_subclass=$dbh->quote($subclass); - my $publicationyear=$biblioitem->{'publicationyear'}; - my $publishercode=$biblioitem->{'publishercode'}; - my $q_publishercode=$dbh->quote($publishercode); - my $volumedate=$biblioitem->{'volumedate'}; - my $q_volumedate=$dbh->quote($volumedate); - my $illus=$biblioitem->{'illus'}; - my $q_illus=$dbh->quote($illus); - my $pages=$biblioitem->{'pages'}; - my $q_pages=$dbh->quote($pages); - my $notes=$biblioitem->{'notes'}; - my $q_notes=$dbh->quote($notes); - my $size=$biblioitem->{'size'}; - my $q_size=$dbh->quote($size); - my $place=$biblioitem->{'place'}; - my $q_place=$dbh->quote($place); - my $lccn=$biblioitem->{'lccn'}; - my $q_lccn=$dbh->quote($lccn); +=head1 AUTHOR +Paul POULAIN paul.poulain@free.fr -# Unless the $env->{'marconly'} flag is set, update the biblioitems table with -# the new data +=cut - unless ($env->{'marconly'}) { - #my $sth=$dbh->prepare("lock tables biblioitems write"); - #$sth->execute; - my $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); - $sth->execute; - my ($biblioitemnumber) =$sth->fetchrow; - $biblioitemnumber++; - $sth=$dbh->prepare("insert into biblioitems (biblionumber,biblioitemnumber,volume,number,classification,itemtype,isbn,issn,dewey,subclass,publicationyear,publishercode,volumedate,illus,pages,notes,size,place,lccn) values ($biblionumber, $biblioitemnumber, $q_volume, $q_number, $q_classification, $q_itemtype, $q_isbn, $q_issn, $dewey, $q_subclass, $publicationyear, $q_publishercode, $q_volumedate, $q_illus, $q_pages,$q_notes, $q_size, $q_place, $q_lccn)"); - $sth->execute; - #my $sth=$dbh->prepare("unlock tables"); - #$sth->execute; - } +sub MARCdelword { +# delete words. this sub deletes all the words from a sentence. a subfield modif is done by a delete then a add + my ($dbh,$bibid,$tag,$tagorder,$subfield,$subfieldorder) = @_; + my $sth=$dbh->prepare("delete from marc_word where bibid=? and tag=? and tagorder=? and subfieldid=? and subfieldorder=?"); + $sth->execute($bibid,$tag,$tagorder,$subfield,$subfieldorder); +} +# +# +# OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD OLD +# +# +# all the following subs are the exact copy of 1.0/1.2 version of the sub +# without the OLD. The OLDxxx is called by the original xxx sub. +# the 1.4 xxx sub also builds MARC::Record an calls the MARCxxx +# WARNING : there is 1 difference between initialxxx and OLDxxx : +# the db header $dbh is always passed as parameter +# to avoid over-DB connexion + +sub OLDnewbiblio { + my ($dbh,$biblio) = @_; +# my $dbh = &C4Connect; + my $query = "Select max(biblionumber) from biblio"; + my $sth = $dbh->prepare($query); + $sth->execute; + my $data = $sth->fetchrow_arrayref; + my $bibnum = $$data[0] + 1; + my $series = 0; -# Should we check if there is already a biblioitem/marc with the -# same isbn/lccn/issn? + $biblio->{'title'} = $dbh->quote($biblio->{'title'}); + $biblio->{'author'} = $dbh->quote($biblio->{'author'}); + $biblio->{'copyright'} = $dbh->quote($biblio->{'copyright'}); + $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'}); + $biblio->{'notes'} = $dbh->quote($biblio->{'notes'}); + $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'}); + if ($biblio->{'seriestitle'}) { $series = 1 }; - my $sth=$dbh->prepare("select title,unititle,seriestitle,copyrightdate,notes,author from biblio where biblionumber=$biblionumber"); - $sth->execute; - my ($title, $unititle,$seriestitle,$copyrightdate,$biblionotes,$author) = $sth->fetchrow; - $sth=$dbh->prepare("select subtitle from bibliosubtitle where biblionumber=$biblionumber"); - $sth->execute; - my ($subtitle) = $sth->fetchrow; - $sth=$dbh->prepare("select author from additionalauthors where biblionumber=$biblionumber"); - $sth->execute; - my @additionalauthors; - while (my ($additionalauthor) = $sth->fetchrow) { - push (@additionalauthors, $additionalauthor); - } - $sth=$dbh->prepare("select subject from bibliosubject where biblionumber=$biblionumber"); - $sth->execute; - my @subjects; - while (my ($subject) = $sth->fetchrow) { - push (@subjects, $subject); - } + $sth->finish; + $query = "insert into biblio set +biblionumber = $bibnum, +title = $biblio->{'title'}, +author = $biblio->{'author'}, +copyrightdate = $biblio->{'copyright'}, +serial = $series, +seriestitle = $biblio->{'seriestitle'}, +notes = $biblio->{'notes'}, +abstract = $biblio->{'abstract'}"; -# MARC SECTION + $sth = $dbh->prepare($query); + $sth->execute; - $sth=$dbh->prepare("insert into Resource_Table (Record_ID) values (0)"); + $sth->finish; +# $dbh->disconnect; + return($bibnum); +} + +sub OLDmodbiblio { + my ($dbh,$biblio) = @_; +# my $dbh = C4Connect; + my $query; + my $sth; + + $biblio->{'title'} = $dbh->quote($biblio->{'title'}); + $biblio->{'author'} = $dbh->quote($biblio->{'author'}); + $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'}); + $biblio->{'copyrightdate'} = $dbh->quote($biblio->{'copyrightdate'}); + $biblio->{'seriestitle'} = $dbh->quote($biblio->{'serirestitle'}); + $biblio->{'serial'} = $dbh->quote($biblio->{'serial'}); + $biblio->{'unititle'} = $dbh->quote($biblio->{'unititle'}); + $biblio->{'notes'} = $dbh->quote($biblio->{'notes'}); + + $query = "Update biblio set +title = $biblio->{'title'}, +author = $biblio->{'author'}, +abstract = $biblio->{'abstract'}, +copyrightdate = $biblio->{'copyrightdate'}, +seriestitle = $biblio->{'seriestitle'}, +serial = $biblio->{'serial'}, +unititle = $biblio->{'unititle'}, +notes = $biblio->{'notes'} +where biblionumber = $biblio->{'biblionumber'}"; + $sth = $dbh->prepare($query); + $sth->execute; - my $Resource_ID=$dbh->{'mysql_insertid'}; - my $Record_ID=$Resource_ID; - $sth=$dbh->prepare("update Resource_Table set Record_ID=$Record_ID where Resource_ID=$Resource_ID"); + + $sth->finish; + $dbh->disconnect; + return($biblio->{'biblionumber'}); +} # sub modbiblio + +sub OLDmodsubtitle { + my ($dbh,$bibnum, $subtitle) = @_; +# my $dbh = C4Connect; + my $query = "update bibliosubtitle set +subtitle = '$subtitle' +where biblionumber = $bibnum"; + my $sth = $dbh->prepare($query); + + $sth->execute; + $sth->finish; +# $dbh->disconnect; +} # sub modsubtitle + + +sub OLDmodaddauthor { + my ($dbh,$bibnum, $author) = @_; +# my $dbh = C4Connect; + my $query = "Delete from additionalauthors where biblionumber = $bibnum"; + my $sth = $dbh->prepare($query); + $sth->execute; + $sth->finish; -# Title - { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$title; - if ($subtitle) { - $subfields->{2}->{'Subfield_Mark'}='b'; - $subfields->{2}->{'Subfield_Value'}=$subtitle; - } - my $tag='245'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } + if ($author ne '') { + $query = "Insert into additionalauthors set + author = '$author', + biblionumber = '$bibnum'"; + $sth = $dbh->prepare($query); -# author - { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$author; - my $tag='100'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Series Title - if ($seriestitle) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$seriestitle; - my $tag='440'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Biblio Note - if ($biblionotes) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$biblionotes; - $subfields->{2}->{'Subfield_Mark'}='3'; - $subfields->{2}->{'Subfield_Value'}='biblio'; - my $tag='500'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Additional Authors - foreach (@additionalauthors) { - my $author=$_; - (next) unless ($author); - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$author; - $subfields->{2}->{'Subfield_Mark'}='e'; - $subfields->{2}->{'Subfield_Value'}='author'; - my $tag='700'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Illustrator - if ($illus) { - (next) unless ($illus); - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$illus; - $subfields->{2}->{'Subfield_Mark'}='e'; - $subfields->{2}->{'Subfield_Value'}='illustrator'; - my $tag='700'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Subjects - foreach (@subjects) { - my $subject=$_; - (next) unless ($subject); - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$subject; - my $tag='650'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } + $sth->execute; + $sth->finish; + } # if -# ISBN - if ($isbn) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$isbn; - my $tag='020'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# LCCN - if ($lccn) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$lccn; - my $tag='010'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# ISSN - if ($issn) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$issn; - my $tag='022'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# DEWEY - if ($dewey) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$dewey; - my $tag='082'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# DEWEY subclass and itemtype - { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$itemtype; - $subfields->{2}->{'Subfield_Mark'}='b'; - $subfields->{2}->{'Subfield_Value'}=$subclass; - $subfields->{3}->{'Subfield_Mark'}='c'; - $subfields->{3}->{'Subfield_Value'}=$biblionumber; - $subfields->{4}->{'Subfield_Mark'}='d'; - $subfields->{4}->{'Subfield_Value'}=$biblioitemnumber; - my $tag='090'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# PUBLISHER - { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$place; - $subfields->{2}->{'Subfield_Mark'}='b'; - $subfields->{2}->{'Subfield_Value'}=$publishercode; - $subfields->{3}->{'Subfield_Mark'}='c'; - $subfields->{3}->{'Subfield_Value'}=$publicationyear; - if ($copyrightdate) { - $subfields->{4}->{'Subfield_Mark'}='c'; - $subfields->{4}->{'Subfield_Value'}="c$copyrightdate"; - } - my $tag='260'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# PHYSICAL - if ($pages || $size) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$pages; - $subfields->{2}->{'Subfield_Mark'}='c'; - $subfields->{2}->{'Subfield_Value'}=$size; - my $tag='300'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Volume/Number - if ($volume || $number) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='v'; - $subfields->{1}->{'Subfield_Value'}=$volume; - $subfields->{2}->{'Subfield_Mark'}='n'; - $subfields->{2}->{'Subfield_Value'}=$number; - my $tag='440'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } -# Biblioitem Note - if ($notes) { - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$notes; - $subfields->{2}->{'Subfield_Mark'}='3'; - $subfields->{2}->{'Subfield_Value'}='biblioitem'; - my $tag='500'; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - } + $dbh->disconnect; +} # sub modaddauthor + + +sub OLDmodsubject { + my ($dbh,$bibnum, $force, @subject) = @_; +# my $dbh = C4Connect; + my $count = @subject; + my $error; + for (my $i = 0; $i < $count; $i++) { + $subject[$i] =~ s/^ //g; + $subject[$i] =~ s/ $//g; + my $query = "select * from catalogueentry + where entrytype = 's' + and catalogueentry = '$subject[$i]'"; + my $sth = $dbh->prepare($query); + $sth->execute; + + if (my $data = $sth->fetchrow_hashref) { + } else { + if ($force eq $subject[$i]) { + # subject not in aut, chosen to force anway + # so insert into cataloguentry so its in auth file + $query = "Insert into catalogueentry + (entrytype,catalogueentry) + values ('s','$subject[$i]')"; + my $sth2 = $dbh->prepare($query); + + $sth2->execute; + $sth2->finish; + } else { + $error = "$subject[$i]\n does not exist in the subject authority file"; + $query = "Select * from catalogueentry + where entrytype = 's' + and (catalogueentry like '$subject[$i] %' + or catalogueentry like '% $subject[$i] %' + or catalogueentry like '% $subject[$i]')"; + my $sth2 = $dbh->prepare($query); + + $sth2->execute; + while (my $data = $sth2->fetchrow_hashref) { + $error = $error."
$data->{'catalogueentry'}"; + } # while + $sth2->finish; + } # else + } # else $sth->finish; - $dbh->disconnect; - return ($env, $Record_ID); + } # else + if ($error eq '') { + my $query = "Delete from bibliosubject where biblionumber = $bibnum"; + my $sth = $dbh->prepare($query); + $sth->execute; + $sth->finish; + for (my $i = 0; $i < $count; $i++) { + $sth = $dbh->prepare("Insert into bibliosubject + values ('$subject[$i]', $bibnum)"); + + $sth->execute; + $sth->finish; + } # for + } # if + +# $dbh->disconnect; + return($error); +} # sub modsubject + +sub OLDmodbibitem { + my ($dbh,$biblioitem) = @_; +# my $dbh = C4Connect; + my $query; + + $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'}); + $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'}); + $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'}); + $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'}); + $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'}); + $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'}); + $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'}); + $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'}); + $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); + $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'}); + $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); + $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'}); + $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'}); + $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'}); + + $query = "Update biblioitems set +itemtype = $biblioitem->{'itemtype'}, +url = $biblioitem->{'url'}, +isbn = $biblioitem->{'isbn'}, +publishercode = $biblioitem->{'publishercode'}, +publicationyear = $biblioitem->{'publicationyear'}, +classification = $biblioitem->{'classification'}, +dewey = $biblioitem->{'dewey'}, +subclass = $biblioitem->{'subclass'}, +illus = $biblioitem->{'illus'}, +pages = $biblioitem->{'pages'}, +volumeddesc = $biblioitem->{'volumeddesc'}, +notes = $biblioitem->{'notes'}, +size = $biblioitem->{'size'}, +place = $biblioitem->{'place'} +where biblioitemnumber = $biblioitem->{'biblioitemnumber'}"; + + $dbh->do($query); + +# $dbh->disconnect; +} # sub modbibitem + +sub OLDmodnote { + my ($dbh,$bibitemnum,$note)=@_; +# my $dbh=C4Connect; + my $query="update biblioitems set notes='$note' where + biblioitemnumber='$bibitemnum'"; + my $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; +# $dbh->disconnect; } -sub updateBiblioItem { -# Update the biblioitem with biblioitemnumber $biblioitem->{'biblioitemnumber'} -# -# This routine should also check to see which fields are actually being -# modified, and log all changes. +sub OLDnewbiblioitem { + my ($dbh,$biblioitem) = @_; +# my $dbh = C4Connect; + my $query = "Select max(biblioitemnumber) from biblioitems"; + my $sth = $dbh->prepare($query); + my $data; + my $bibitemnum; + + $biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'}); + $biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'}); + $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'}); + $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'}); + $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'}); + $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'}); + $biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'}); + $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'}); + $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'}); + $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'}); + $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'}); + $biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'}); + $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); + $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); + $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'}); + $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'}); + $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'}); + $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'}); + $biblioitem->{'lccn'} = $dbh->quote($biblioitem->{'lccn'}); + $biblioitem->{'marc'} = $dbh->quote($biblioitem->{'marc'}); + + $sth->execute; + $data = $sth->fetchrow_arrayref; + $bibitemnum = $$data[0] + 1; - my ($env, $biblioitem) = @_; - my $dbh=&C4Connect; + $sth->finish; - my $biblioitemnumber=$biblioitem->{'biblioitemnumber'}; - my $sth=$dbh->prepare("select * from biblioitems where biblioitemnumber=$biblioitemnumber"); -# obi = original biblioitem - my $obi=$sth->fetchrow_hashref; - $sth=$dbh->prepare("select B.Record_ID from Bib_Table B, 0XX_Tag_Table T, 0XX_Subfield_Table S where B.Tag_0XX_ID=T.Tag_ID and T.Subfield_ID=S.Subfield_ID and T.Tag='090' and S.Subfield_Mark='c' and S.Subfield_Value=$biblioitemnumber"); + $query = "insert into biblioitems set + biblioitemnumber = $bibitemnum, + biblionumber = $biblioitem->{'biblionumber'}, + volume = $biblioitem->{'volume'}, + number = $biblioitem->{'number'}, + classification = $biblioitem->{'classification'}, + itemtype = $biblioitem->{'itemtype'}, + url = $biblioitem->{'url'}, + isbn = $biblioitem->{'isbn'}, + issn = $biblioitem->{'issn'}, + dewey = $biblioitem->{'dewey'}, + subclass = $biblioitem->{'subclass'}, + publicationyear = $biblioitem->{'publicationyear'}, + publishercode = $biblioitem->{'publishercode'}, + volumedate = $biblioitem->{'volumedate'}, + volumeddesc = $biblioitem->{'volumeddesc'}, + illus = $biblioitem->{'illus'}, + pages = $biblioitem->{'pages'}, + notes = $biblioitem->{'notes'}, + size = $biblioitem->{'size'}, + lccn = $biblioitem->{'lccn'}, + marc = $biblioitem->{'marc'}, + place = $biblioitem->{'place'}"; + + $sth = $dbh->prepare($query); $sth->execute; - my ($Record_ID) = $sth->fetchrow; - if ($biblioitem->{'biblionumber'} ne $obi->{'biblionumber'}) { - logchange('kohadb', 'change', 'biblioitems', 'biblionumber', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); - my $sth=$dbh->prepare("update biblioitems set biblionumber=$biblioitem->{'biblionumber'} where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '090', 'c', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); - changeSubfield($Record_ID, '090', 'c', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); - } - if ($biblioitem->{'volume'} ne $obi->{'volume'}) { - logchange('kohadb', 'change', 'biblioitems', 'volume', $obi->{'volume'}, $biblioitem->{'volume'}); - my $q_volume=$dbh->quote($biblioitem->{'volume'}); - my $sth=$dbh->prepare("update biblioitems set volume=$q_volume where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '440', 'v', $obi->{'volume'}, $biblioitem->{'volume'}); - changeSubfield($Record_ID, '440', 'v', $obi->{'volume'}, $biblioitem->{'volume'}); - } - if ($biblioitem->{'number'} ne $obi->{'number'}) { - logchange('kohadb', 'change', 'biblioitems', 'number', $obi->{'number'}, $biblioitem->{'number'}); - my $q_number=$dbh->quote($biblioitem->{'number'}); - my $sth=$dbh->prepare("update biblioitems set number=$q_number where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '440', 'v', $obi->{'number'}, $biblioitem->{'number'}); - changeSubfield($Record_ID, '440', 'v', $obi->{'number'}, $biblioitem->{'number'}); - } - if ($biblioitem->{'itemtype'} ne $obi->{'itemtype'}) { - logchange('kohadb', 'change', 'biblioitems', 'itemtype', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); - my $q_itemtype=$dbh->quote($biblioitem->{'itemtype'}); - my $sth=$dbh->prepare("update biblioitems set itemtype=$q_itemtype where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '090', 'a', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); - changeSubfield($Record_ID, '090', 'a', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); - } - if ($biblioitem->{'isbn'} ne $obi->{'isbn'}) { - logchange('kohadb', 'change', 'biblioitems', 'isbn', $obi->{'isbn'}, $biblioitem->{'isbn'}); - my $q_isbn=$dbh->quote($biblioitem->{'isbn'}); - my $sth=$dbh->prepare("update biblioitems set isbn=$q_isbn where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '020', 'a', $obi->{'isbn'}, $biblioitem->{'isbn'}); - changeSubfield($Record_ID, '020', 'a', $obi->{'isbn'}, $biblioitem->{'isbn'}); - } - if ($biblioitem->{'issn'} ne $obi->{'issn'}) { - logchange('kohadb', 'change', 'biblioitems', 'issn', $obi->{'issn'}, $biblioitem->{'issn'}); - my $q_issn=$dbh->quote($biblioitem->{'issn'}); - my $sth=$dbh->prepare("update biblioitems set issn=$q_issn where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '022', 'a', $obi->{'issn'}, $biblioitem->{'issn'}); - changeSubfield($Record_ID, '022', 'a', $obi->{'issn'}, $biblioitem->{'issn'}); - } - if ($biblioitem->{'dewey'} ne $obi->{'dewey'}) { - logchange('kohadb', 'change', 'biblioitems', 'dewey', $obi->{'dewey'}, $biblioitem->{'dewey'}); - my $sth=$dbh->prepare("update biblioitems set dewey=$biblioitem->{'dewey'} where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '082', 'a', $obi->{'dewey'}, $biblioitem->{'dewey'}); - changeSubfield($Record_ID, '082', 'a', $obi->{'dewey'}, $biblioitem->{'dewey'}); - } - if ($biblioitem->{'subclass'} ne $obi->{'subclass'}) { - logchange('kohadb', 'change', 'biblioitems', 'subclass', $obi->{'subclass'}, $biblioitem->{'subclass'}); - my $q_subclass=$dbh->quote($biblioitem->{'subclass'}); - my $sth=$dbh->prepare("update biblioitems set subclass=$q_subclass where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '090', 'b', $obi->{'subclass'}, $biblioitem->{'subclass'}); - changeSubfield($Record_ID, '090', 'b', $obi->{'subclass'}, $biblioitem->{'subclass'}); - } - if ($biblioitem->{'place'} ne $obi->{'place'}) { - logchange('kohadb', 'change', 'biblioitems', 'place', $obi->{'place'}, $biblioitem->{'place'}); - my $q_place=$dbh->quote($biblioitem->{'place'}); - my $sth=$dbh->prepare("update biblioitems set place=$q_place where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '260', 'a', $obi->{'place'}, $biblioitem->{'place'}); - changeSubfield($Record_ID, '260', 'a', $obi->{'place'}, $biblioitem->{'place'}); - } - if ($biblioitem->{'publishercode'} ne $obi->{'publishercode'}) { - logchange('kohadb', 'change', 'biblioitems', 'publishercode', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); - my $q_publishercode=$dbh->quote($biblioitem->{'publishercode'}); - my $sth=$dbh->prepare("update biblioitems set publishercode=$q_publishercode where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '260', 'b', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); - changeSubfield($Record_ID, '260', 'b', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); - } - if ($biblioitem->{'publicationyear'} ne $obi->{'publicationyear'}) { - logchange('kohadb', 'change', 'biblioitems', 'publicationyear', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); - my $q_publicationyear=$dbh->quote($biblioitem->{'publicationyear'}); - my $sth=$dbh->prepare("update biblioitems set publicationyear=$q_publicationyear where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '260', 'c', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); - changeSubfield($Record_ID, '260', 'c', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); - } - if ($biblioitem->{'illus'} ne $obi->{'illus'}) { - logchange('kohadb', 'change', 'biblioitems', 'illus', $obi->{'illus'}, $biblioitem->{'illus'}); - my $q_illus=$dbh->quote($biblioitem->{'illus'}); - my $sth=$dbh->prepare("update biblioitems set illus=$q_illus where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '700', 'a', $obi->{'illus'}, $biblioitem->{'illus'}); - changeSubfield($Record_ID, '700', 'a', $obi->{'illus'}, $biblioitem->{'illus'}); - } - if ($biblioitem->{'pages'} ne $obi->{'pages'}) { - logchange('kohadb', 'change', 'biblioitems', 'pages', $obi->{'pages'}, $biblioitem->{'pages'}); - my $q_pages=$dbh->quote($biblioitem->{'pages'}); - my $sth=$dbh->prepare("update biblioitems set pages=$q_pages where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '300', 'a', $obi->{'pages'}, $biblioitem->{'pages'}); - changeSubfield($Record_ID, '300', 'a', $obi->{'pages'}, $biblioitem->{'pages'}); - } - if ($biblioitem->{'size'} ne $obi->{'size'}) { - logchange('kohadb', 'change', 'biblioitems', 'size', $obi->{'size'}, $biblioitem->{'size'}); - my $q_size=$dbh->quote($biblioitem->{'size'}); - my $sth=$dbh->prepare("update biblioitems set size=$q_size where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '300', 'c', $obi->{'size'}, $biblioitem->{'size'}); - changeSubfield($Record_ID, '300', 'c', $obi->{'size'}, $biblioitem->{'size'}); - } - if ($biblioitem->{'notes'} ne $obi->{'notes'}) { - logchange('kohadb', 'change', 'biblioitems', 'notes', $obi->{'notes'}, $biblioitem->{'notes'}); - my $q_notes=$dbh->quote($biblioitem->{'notes'}); - my $sth=$dbh->prepare("update biblioitems set notes=$q_notes where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '500', 'a', $obi->{'notes'}, $biblioitem->{'notes'}); - changeSubfield($Record_ID, '500', 'a', $obi->{'notes'}, $biblioitem->{'notes'}); - } - if ($biblioitem->{'lccn'} ne $obi->{'lccn'}) { - logchange('kohadb', 'change', 'biblioitems', 'lccn', $obi->{'lccn'}, $biblioitem->{'lccn'}); - my $q_lccn=$dbh->quote($biblioitem->{'lccn'}); - my $sth=$dbh->prepare("update biblioitems set lccn=$q_lccn where biblioitemnumber=$biblioitemnumber"); - logchange('marc', 'change', $Record_ID, '010', 'a', $obi->{'lccn'}, $biblioitem->{'lccn'}); - changeSubfield($Record_ID, '010', 'a', $obi->{'lccn'}, $biblioitem->{'lccn'}); - } + $sth->finish; - $dbh->disconnect; +# $dbh->disconnect; + return($bibitemnum); +} +sub OLDnewsubject { + my ($dbh,$bibnum)=@_; +# my $dbh=C4Connect; + my $query="insert into bibliosubject (biblionumber) values + ($bibnum)"; + my $sth=$dbh->prepare($query); +# print $query; + $sth->execute; + $sth->finish; +# $dbh->disconnect; } +sub OLDnewsubtitle { + my ($dbh,$bibnum, $subtitle) = @_; +# my $dbh = C4Connect; + $subtitle = $dbh->quote($subtitle); + my $query = "insert into bibliosubtitle set + biblionumber = $bibnum, + subtitle = $subtitle"; + my $sth = $dbh->prepare($query); -sub newItem { - my ($env, $Record_ID, $item) = @_; - my $dbh=&C4Connect; - my $barcode=$item->{'barcode'}; - my $q_barcode=$dbh->quote($barcode); - my $biblionumber=$item->{'biblionumber'}; - my $biblioitemnumber=$item->{'biblioitemnumber'}; - my $dateaccessioned=$item->{'dateaccessioned'}; - my $booksellerid=$item->{'booksellerid'}; - my $q_booksellerid=$dbh->quote($booksellerid); - my $homebranch=$item->{'homebranch'}; - my $q_homebranch=$dbh->quote($homebranch); - my $holdingbranch=$item->{'holdingbranch'}; - my $price=$item->{'price'}; - my $replacementprice=$item->{'replacementprice'}; - my $replacementpricedate=$item->{'replacementpricedate'}; - my $q_replacementpricedate=$dbh->quote($replacementpricedate); - my $notforloan=$item->{'notforloan'}; - my $itemlost=$item->{'itemlost'}; - my $wthdrawn=$item->{'wthdrawn'}; - my $restricted=$item->{'restricted'}; - my $itemnotes=$item->{'itemnotes'}; - my $q_itemnotes=$dbh->quote($itemnotes); - my $itemtype=$item->{'itemtype'}; - my $subclass=$item->{'subclass'}; + $sth->execute; -# KOHADB Section + $sth->finish; +# $dbh->disconnect; +} - unless ($env->{'marconly'}) { - my $sth=$dbh->prepare("select max(itemnumber) from items"); - $sth->execute; - my ($itemnumber) =$sth->fetchrow; - $itemnumber++; - $sth=$dbh->prepare("insert into items (itemnumber,biblionumber,biblioitemnumber,barcode,dateaccessioned,booksellerid,homebranch,price,replacementprice,replacementpricedate,notforloan,itemlost,wthdrawn,restricted,itemnotes) values ($itemnumber,$biblionumber,$biblioitemnumber,$q_barcode,$dateaccessioned,$q_booksellerid,$q_homebranch,$price,$q_replacementpricedate,$notforloan,$itemlost,$wthdrawn,$restricted,$q_itemnotes)"); - $sth->execute; - } +sub OLDnewitems { + my ($dbh,$item, @barcodes) = @_; +# my $dbh = C4Connect; + my $query = "Select max(itemnumber) from items"; + my $sth = $dbh->prepare($query); + my $data; + my $itemnumber; + my $error; -# MARC SECTION - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='p'; - $subfields->{1}->{'Subfield_Value'}=$barcode; - $subfields->{2}->{'Subfield_Mark'}='d'; - $subfields->{2}->{'Subfield_Value'}=$dateaccessioned; - $subfields->{3}->{'Subfield_Mark'}='e'; - $subfields->{3}->{'Subfield_Value'}=$booksellerid; - $subfields->{4}->{'Subfield_Mark'}='b'; - $subfields->{4}->{'Subfield_Value'}=$homebranch; - $subfields->{5}->{'Subfield_Mark'}='l'; - $subfields->{5}->{'Subfield_Value'}=$holdingbranch; - $subfields->{6}->{'Subfield_Mark'}='c'; - $subfields->{6}->{'Subfield_Value'}=$price; - $subfields->{7}->{'Subfield_Mark'}='c'; - $subfields->{7}->{'Subfield_Value'}=$replacementprice; - $subfields->{8}->{'Subfield_Mark'}='d'; - $subfields->{8}->{'Subfield_Value'}=$replacementpricedate; - if ($notforloan) { - $subfields->{9}->{'Subfield_Mark'}='h'; - $subfields->{9}->{'Subfield_Value'}='Not for loan'; - } - if ($notforloan) { - $subfields->{10}->{'Subfield_Mark'}='j'; - $subfields->{10}->{'Subfield_Value'}='Item lost'; - } - if ($notforloan) { - $subfields->{11}->{'Subfield_Mark'}='j'; - $subfields->{11}->{'Subfield_Value'}='Item withdrawn'; - } - if ($notforloan) { - $subfields->{12}->{'Subfield_Mark'}='z'; - $subfields->{12}->{'Subfield_Value'}=$itemnotes; - } - my $tag='876'; - my $Tag_ID; - $env->{'linkage'}=1; - ($env, $Tag_ID) = addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - $env->{'linkage'}=0; - $env->{'linkid'}=$Tag_ID; - $tag='852'; - my $subfields2; - $subfields2->{1}->{'Subfield_Mark'}='a'; - $subfields2->{1}->{'Subfield_Value'}='Coast Mountains School District'; - $subfields2->{1}->{'Subfield_Mark'}='b'; - $subfields2->{1}->{'Subfield_Value'}=$homebranch; - $subfields2->{1}->{'Subfield_Mark'}='c'; - $subfields2->{1}->{'Subfield_Value'}=$itemtype; - $subfields2->{2}->{'Subfield_Mark'}='m'; - $subfields2->{2}->{'Subfield_Value'}=$subclass; - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields2); - $env->{'linkid'}=''; -} + $sth->execute; + $data = $sth->fetchrow_hashref; + $itemnumber = $data->{'max(itemnumber)'} + 1; + $sth->finish; + + $item->{'booksellerid'} = $dbh->quote($item->{'booksellerid'}); + $item->{'homebranch'} = $dbh->quote($item->{'homebranch'}); + $item->{'price'} = $dbh->quote($item->{'price'}); + $item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'}); + $item->{'itemnotes'} = $dbh->quote($item->{'itemnotes'}); -sub updateItem { -# Update the item with itemnumber $item->{'itemnumber'} -# This routine should also modify the corresponding MARC record data. (852 and -# 876 tags with 876p tag the same as $item->{'barcode'} -# -# This routine should also check to see which fields are actually being -# modified, and log all changes. + foreach my $barcode (@barcodes) { + $barcode = uc($barcode); + $barcode = $dbh->quote($barcode); + $query = "Insert into items set + itemnumber = $itemnumber, + biblionumber = $item->{'biblionumber'}, + biblioitemnumber = $item->{'biblioitemnumber'}, + barcode = $barcode, + booksellerid = $item->{'booksellerid'}, + dateaccessioned = NOW(), + homebranch = $item->{'homebranch'}, + holdingbranch = $item->{'homebranch'}, + price = $item->{'price'}, + replacementprice = $item->{'replacementprice'}, + replacementpricedate = NOW(), + itemnotes = $item->{'itemnotes'}"; + if ($item->{'loan'}) { + $query .= ",notforloan = $item->{'loan'}"; + } # if - my ($env, $item) = @_; - my $dbh=&C4Connect; - my $itemnumber=$item->{'itemnumber'}; - my $biblionumber=$item->{'biblionumber'}; - my $biblioitemnumber=$item->{'biblioitemnumber'}; - my $barcode=$item->{'barcode'}; - my $dateaccessioned=$item->{'dateaccessioned'}; - my $booksellerid=$item->{'booksellerid'}; - my $homebranch=$item->{'homebranch'}; - my $price=$item->{'price'}; - my $replacementprice=$item->{'replacementprice'}; - my $replacementpricedate=$item->{'replacementpricedate'}; - my $multivolume=$item->{'multivolume'}; - my $stack=$item->{'stack'}; - my $notforloan=$item->{'notforloan'}; - my $itemlost=$item->{'itemlost'}; - my $wthdrawn=$item->{'wthdrawn'}; - my $bulk=$item->{'bulk'}; - my $restricted=$item->{'restricted'}; - my $binding=$item->{'binding'}; - my $itemnotes=$item->{'itemnotes'}; - my $holdingbranch=$item->{'holdingbranch'}; - my $interim=$item->{'interim'}; - my $sth=$dbh->prepare("select * from items where itemnumber=$itemnumber"); - $sth->execute; - my $olditem=$sth->fetchrow_hashref; - my $q_barcode=$dbh->quote($olditem->{'barcode'}); - $sth=$dbh->prepare("select S.Subfield_ID, B.Record_ID from 8XX_Subfield_Table S, 8XX_Tag_Table T, Bib_Table B where B.Tag_8XX_ID=T.Tag_ID and T.Subfield_ID=S.Subfield_ID and Subfield_Mark='p' and Subfield_Value=$q_barcode"); - $sth->execute; - my ($Subfield876_ID, $Record_ID) = $sth->fetchrow; - $sth=$dbh->prepare("select Subfield_Value from 8XX_Subfield_Table where Subfield_Mark=8 and Subfield_ID=$Subfield876_ID"); - $sth->execute; - my ($link) = $sth->fetchrow; - $sth=$dbh->prepare("select Subfield_ID from 8XX_Subfield_Table where Subfield_Mark=8 and Subfield_Value=$link and !(Subfield_ID=$Subfield876_ID)"); + $sth = $dbh->prepare($query); $sth->execute; - my ($Subfield852_ID) = $sth->fetchrow; - - if ($item->{'barcode'} ne $olditem->{'barcode'}) { - logchange('kohadb', 'change', 'items', 'barcode', $olditem->{'barcode'}, $item->{'barcode'}); - my $q_barcode=$dbh->quote($item->{'barcode'}); - my $sth=$dbh->prepare("update items set barcode=$q_barcode where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'p', $olditem->{'barcode'}, $item->{'barcode'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'p', $Subfield_Key, $olditem->{'barcode'}, $item->{'barcode'}); - } - if ($item->{'booksellerid'} ne $olditem->{'booksellerid'}) { - logchange('kohadb', 'change', 'items', 'booksellerid', $olditem->{'booksellerid'}, $item->{'booksellerid'}); - my $q_booksellerid=$dbh->quote($item->{'booksellerid'}); - my $sth=$dbh->prepare("update items set booksellerid=$q_booksellerid where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'e', $olditem->{'booksellerid'}, $item->{'booksellerid'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'e', $Subfield_Key, $olditem->{'booksellerid'}, $item->{'booksellerid'}); - } - if ($item->{'dateaccessioned'} ne $olditem->{'dateaccessioned'}) { - logchange('kohadb', 'change', 'items', 'dateaccessioned', $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}); - my $q_dateaccessioned=$dbh->quote($item->{'dateaccessioned'}); - my $sth=$dbh->prepare("update items set dateaccessioned=$q_dateaccessioned where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'd', $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'd', $Subfield_Key, $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}); - } - if ($item->{'homebranch'} ne $olditem->{'homebranch'}) { - logchange('kohadb', 'change', 'items', 'homebranch', $olditem->{'homebranch'}, $item->{'homebranch'}); - my $q_homebranch=$dbh->quote($item->{'homebranch'}); - my $sth=$dbh->prepare("update items set homebranch=$q_homebranch where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'b', $olditem->{'homebranch'}, $item->{'homebranch'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'b', $Subfield_Key, $olditem->{'homebranch'}, $item->{'homebranch'}); - } - if ($item->{'holdingbranch'} ne $olditem->{'holdingbranch'}) { - logchange('kohadb', 'change', 'items', 'holdingbranch', $olditem->{'holdingbranch'}, $item->{'holdingbranch'}); - my $q_holdingbranch=$dbh->quote($item->{'holdingbranch'}); - my $sth=$dbh->prepare("update items set holdingbranch=$q_holdingbranch where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'l', $olditem->{'holdingbranch'}, $item->{'holdingbranch'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'l', $Subfield_Key, $olditem->{'holdingbranch'}, $item->{'holdingbranch'}); - } - if ($item->{'price'} ne $olditem->{'price'}) { - logchange('kohadb', 'change', 'items', 'price', $olditem->{'price'}, $item->{'price'}); - my $q_price=$dbh->quote($item->{'price'}); - my $sth=$dbh->prepare("update items set price=$q_price where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'c', $olditem->{'price'}, $item->{'price'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'c', $Subfield_Key, $olditem->{'price'}, $item->{'price'}); - } - if ($item->{'itemnotes'} ne $olditem->{'itemnotes'}) { - logchange('kohadb', 'change', 'items', 'itemnotes', $olditem->{'itemnotes'}, $item->{'itemnotes'}); - my $q_itemnotes=$dbh->quote($item->{'itemnotes'}); - my $sth=$dbh->prepare("update items set itemnotes=$q_itemnotes where itemnumber=$itemnumber"); - $sth->execute; - my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'c', $olditem->{'itemnotes'}, $item->{'itemnotes'}, $Subfield876_ID); - logchange('marc', 'change', $Record_ID, '876', 'c', $Subfield_Key, $olditem->{'itemnotes'}, $item->{'itemnotes'}); - } - if ($item->{'notforloan'} ne $olditem->{'notforloan'}) { - logchange('kohadb', 'change', 'items', 'notforloan', $olditem->{'notforloan'}, $item->{'notforloan'}); - my $sth=$dbh->prepare("update items set notforloan=$notforloan where itemnumber=$itemnumber"); - $sth->execute; - if ($item->{'notforloan'}) { - my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Not for loan', $Subfield876_ID); - logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Not for loan'); - } else { - my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Not for loan', $Subfield876_ID); - logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Not for loan'); - } - } - if ($item->{'itemlost'} ne $olditem->{'itemlost'}) { - logchange('kohadb', 'change', 'items', 'itemlost', $olditem->{'itemlost'}, $item->{'itemlost'}); - my $sth=$dbh->prepare("update items set itemlost=$itemlost where itemnumber=$itemnumber"); - $sth->execute; - if ($item->{'itemlost'}) { - my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Item lost', $Subfield876_ID); - logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Item lost'); - } else { - my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Item lost', $Subfield876_ID); - logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Item lost'); - } - } - if ($item->{'wthdrawn'} ne $olditem->{'wthdrawn'}) { - logchange('kohadb', 'change', 'items', 'wthdrawn', $olditem->{'wthdrawn'}, $item->{'wthdrawn'}); - my $sth=$dbh->prepare("update items set wthdrawn=$wthdrawn where itemnumber=$itemnumber"); - $sth->execute; - if ($item->{'wthdrawn'}) { - my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Withdrawn', $Subfield876_ID); - logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Withdrawn'); - } else { - my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Withdrawn', $Subfield876_ID); - logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Withdrawn'); - } - } - if ($item->{'restricted'} ne $olditem->{'restricted'}) { - logchange('kohadb', 'change', 'items', 'restricted', $olditem->{'restricted'}, $item->{'restricted'}); - my $sth=$dbh->prepare("update items set restricted=$restricted where itemnumber=$itemnumber"); - $sth->execute; - if ($item->{'restricted'}) { - my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Restricted', $Subfield876_ID); - logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Restricted'); - } else { - my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Restricted', $Subfield876_ID); - logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Restricted'); - } + + $error .= $sth->errstr; + + $sth->finish; + $itemnumber++; + } # for + +# $dbh->disconnect; + return($error); +} + +sub OLDmoditem { + my ($dbh,$loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_; +# my $dbh=C4Connect; + my $query="update items set biblioitemnumber=$bibitemnum, + barcode='$barcode',itemnotes='$notes' + where itemnumber=$itemnum"; + if ($barcode eq ''){ + $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum"; + } + if ($lost ne ''){ + $query="update items set biblioitemnumber=$bibitemnum, + barcode='$barcode', + itemnotes='$notes', + homebranch='$homebranch', + itemlost='$lost', + wthdrawn='$wthdrawn' + where itemnumber=$itemnum"; + } + if ($replacement ne ''){ + $query=~ s/ where/,replacementprice='$replacement' where/; + } + + my $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; +# $dbh->disconnect; +} + +sub OLDdelitem{ + my ($dbh,$itemnum)=@_; +# my $dbh=C4Connect; + my $query="select * from items where itemnumber=$itemnum"; + my $sth=$dbh->prepare($query); + $sth->execute; + my @data=$sth->fetchrow_array; + $sth->finish; + $query="Insert into deleteditems values ("; + foreach my $temp (@data){ + $query=$query."'$temp',"; + } + $query=~ s/\,$/\)/; +# print $query; + $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; + $query = "Delete from items where itemnumber=$itemnum"; + $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; +# $dbh->disconnect; +} + +sub OLDdeletebiblioitem { + my ($dbh,$biblioitemnumber) = @_; +# my $dbh = C4Connect; + my $query = "Select * from biblioitems +where biblioitemnumber = $biblioitemnumber"; + my $sth = $dbh->prepare($query); + my @results; + + $sth->execute; + + if (@results = $sth->fetchrow_array) { + $query = "Insert into deletedbiblioitems values ("; + foreach my $value (@results) { + $value = $dbh->quote($value); + $query .= "$value,"; + } # foreach + + $query =~ s/\,$/\)/; + $dbh->do($query); + + $query = "Delete from biblioitems + where biblioitemnumber = $biblioitemnumber"; + $dbh->do($query); + } # if + $sth->finish; +# Now delete all the items attached to the biblioitem + $query = "Select * from items where biblioitemnumber = $biblioitemnumber"; + $sth = $dbh->prepare($query); + $sth->execute; + while (@results = $sth->fetchrow_array) { + $query = "Insert into deleteditems values ("; + foreach my $value (@results) { + $value = $dbh->quote($value); + $query .= "$value,"; + } # foreach + $query =~ s/\,$/\)/; + $dbh->do($query); + } # while + $sth->finish; + $query = "Delete from items where biblioitemnumber = $biblioitemnumber"; + $dbh->do($query); +# $dbh->disconnect; +} # sub deletebiblioitem + +sub OLDdelbiblio{ + my ($dbh,$biblio)=@_; +# my $dbh=C4Connect; + my $query="select * from biblio where biblionumber=$biblio"; + my $sth=$dbh->prepare($query); + $sth->execute; + if (my @data=$sth->fetchrow_array){ + $sth->finish; + $query="Insert into deletedbiblio values ("; + foreach my $temp (@data){ + $temp=~ s/\'/\\\'/g; + $query=$query."'$temp',"; } + $query=~ s/\,$/\)/; +# print $query; + $sth=$dbh->prepare($query); + $sth->execute; $sth->finish; - $dbh->disconnect; + $query = "Delete from biblio where biblionumber=$biblio"; + $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; + } + $sth->finish; +# $dbh->disconnect; } +# +# +# old functions +# +# sub itemcount{ my ($biblio)=@_; @@ -1128,10 +1162,11 @@ sub itemcount{ sub getorder{ my ($bi,$bib)=@_; my $dbh=C4Connect; - my $query="Select ordernumber from aqorders where biblionumber=$bib and - biblioitemnumber='$bi'"; + my $query="Select ordernumber + from aqorders + where biblionumber=? and biblioitemnumber=?"; my $sth=$dbh->prepare($query); - $sth->execute; + $sth->execute($bib,$bi); my $ordnum=$sth->fetchrow_hashref; $sth->finish; my $order=getsingleorder($ordnum->{'ordernumber'}); @@ -1144,12 +1179,12 @@ sub getsingleorder { my ($ordnum)=@_; my $dbh=C4Connect; my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown - where aqorders.ordernumber='$ordnum' + where aqorders.ordernumber=? and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=aqorders.biblioitemnumber and aqorders.ordernumber=aqorderbreakdown.ordernumber"; my $sth=$dbh->prepare($query); - $sth->execute; + $sth->execute($ordnum); my $data=$sth->fetchrow_hashref; $sth->finish; $dbh->disconnect; @@ -1159,84 +1194,24 @@ sub getsingleorder { sub newbiblio { my ($biblio) = @_; my $dbh = &C4Connect; - my $query = "Select max(biblionumber) from biblio"; - my $sth = $dbh->prepare($query); - $sth->execute; - my $data = $sth->fetchrow_arrayref; - my $bibnum = $$data[0] + 1; - my $series = 0; - - $biblio->{'title'} = $dbh->quote($biblio->{'title'}); - $biblio->{'author'} = $dbh->quote($biblio->{'author'}); - $biblio->{'copyright'} = $dbh->quote($biblio->{'copyright'}); - $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'}); - $biblio->{'notes'} = $dbh->quote($biblio->{'notes'}); - $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'}); - if ($biblio->{'seriestitle'}) { $series = 1 }; - - $sth->finish; - $query = "insert into biblio set -biblionumber = $bibnum, -title = $biblio->{'title'}, -author = $biblio->{'author'}, -copyrightdate = $biblio->{'copyright'}, -serial = $series, -seriestitle = $biblio->{'seriestitle'}, -notes = $biblio->{'notes'}, -abstract = $biblio->{'abstract'}"; - - $sth = $dbh->prepare($query); - $sth->execute; - - $sth->finish; + my $bibnum=OLDnewbiblio($dbh,$biblio); +# TODO : MARC add $dbh->disconnect; return($bibnum); } sub modbiblio { my ($biblio) = @_; - my $dbh = C4Connect; - my $query; - my $sth; - - $biblio->{'title'} = $dbh->quote($biblio->{'title'}); - $biblio->{'author'} = $dbh->quote($biblio->{'author'}); - $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'}); - $biblio->{'copyrightdate'} = $dbh->quote($biblio->{'copyrightdate'}); - $biblio->{'seriestitle'} = $dbh->quote($biblio->{'serirestitle'}); - $biblio->{'serial'} = $dbh->quote($biblio->{'serial'}); - $biblio->{'unititle'} = $dbh->quote($biblio->{'unititle'}); - $biblio->{'notes'} = $dbh->quote($biblio->{'notes'}); - - $query = "Update biblio set -title = $biblio->{'title'}, -author = $biblio->{'author'}, -abstract = $biblio->{'abstract'}, -copyrightdate = $biblio->{'copyrightdate'}, -seriestitle = $biblio->{'seriestitle'}, -serial = $biblio->{'serial'}, -unititle = $biblio->{'unititle'}, -notes = $biblio->{'notes'} -where biblionumber = $biblio->{'biblionumber'}"; - $sth = $dbh->prepare($query); - - $sth->execute; - - $sth->finish; + my $dbh = C4Connect; + my $biblionumber=OLDmodbiblio($dbh,$biblio); $dbh->disconnect; - return($biblio->{'biblionumber'}); + return($biblionumber); } # sub modbiblio sub modsubtitle { my ($bibnum, $subtitle) = @_; my $dbh = C4Connect; - my $query = "update bibliosubtitle set -subtitle = '$subtitle' -where biblionumber = $bibnum"; - my $sth = $dbh->prepare($query); - - $sth->execute; - $sth->finish; + &OLDmodsubtitle($dbh,$bibnum,$subtitle); $dbh->disconnect; } # sub modsubtitle @@ -1244,653 +1219,1117 @@ where biblionumber = $bibnum"; sub modaddauthor { my ($bibnum, $author) = @_; my $dbh = C4Connect; - my $query = "Delete from additionalauthors where biblionumber = $bibnum"; - my $sth = $dbh->prepare($query); - - $sth->execute; - $sth->finish; - - if ($author ne '') { - $query = "Insert into additionalauthors set -author = '$author', -biblionumber = '$bibnum'"; - $sth = $dbh->prepare($query); - - $sth->execute; - - $sth->finish; - } # if - - $dbh->disconnect; + &OLDmodaddauthor($dbh,$bibnum,$author); + $dbh->disconnect; } # sub modaddauthor sub modsubject { my ($bibnum, $force, @subject) = @_; my $dbh = C4Connect; - my $count = @subject; - my $error; - for (my $i = 0; $i < $count; $i++) { - $subject[$i] =~ s/^ //g; - $subject[$i] =~ s/ $//g; - my $query = "select * from catalogueentry -where entrytype = 's' -and catalogueentry = '$subject[$i]'"; - my $sth = $dbh->prepare($query); - $sth->execute; - - if (my $data = $sth->fetchrow_hashref) { - } else { - if ($force eq $subject[$i]) { - - # subject not in aut, chosen to force anway - # so insert into cataloguentry so its in auth file - $query = "Insert into catalogueentry -(entrytype,catalogueentry) -values ('s','$subject[$i]')"; - my $sth2 = $dbh->prepare($query); - - $sth2->execute; - $sth2->finish; - - } else { - - $error = "$subject[$i]\n does not exist in the subject authority file"; - $query = "Select * from catalogueentry -where entrytype = 's' -and (catalogueentry like '$subject[$i] %' -or catalogueentry like '% $subject[$i] %' -or catalogueentry like '% $subject[$i]')"; - my $sth2 = $dbh->prepare($query); - - $sth2->execute; - while (my $data = $sth2->fetchrow_hashref) { - $error = $error."
$data->{'catalogueentry'}"; - } # while - $sth2->finish; - } # else - } # else - $sth->finish; - } # else - - if ($error eq '') { - my $query = "Delete from bibliosubject where biblionumber = $bibnum"; - my $sth = $dbh->prepare($query); + my $error= &OLDmodsubject($dbh,$bibnum,$force, @subject); + return($error); +} # sub modsubject - $sth->execute; - $sth->finish; +sub modbibitem { + my ($biblioitem) = @_; + my $dbh = C4Connect; + &OLDmodbibitem($dbh,$biblioitem); + $dbh->disconnect; +} # sub modbibitem - for (my $i = 0; $i < $count; $i++) { - $sth = $dbh->prepare("Insert into bibliosubject -values ('$subject[$i]', $bibnum)"); +sub modnote { + my ($bibitemnum,$note)=@_; + my $dbh=C4Connect; + &OLDmodnote($dbh,$bibitemnum,$note); + $dbh->disconnect; +} - $sth->execute; - $sth->finish; - } # for - } # if +sub newbiblioitem { + my ($biblioitem) = @_; + my $dbh = C4Connect; + my $bibitemnum = &OLDnewbiblioitem($dbh,$biblioitem); + return($bibitemnum); +} +sub newsubject { + my ($bibnum)=@_; + my $dbh=C4Connect; + &OLDnewsubject($dbh,$bibnum); $dbh->disconnect; - return($error); -} # sub modsubject +} -sub modbibitem { - my ($biblioitem) = @_; +sub newsubtitle { + my ($bibnum, $subtitle) = @_; my $dbh = C4Connect; - my $query; + &OLDnewsubtitle($dbh,$bibnum,$subtitle); + $dbh->disconnect; +} - $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'}); - $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'}); - $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'}); - $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'}); - $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'}); - $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'}); - $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'}); - $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'}); - $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); - $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'}); - $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); - $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'}); - $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'}); - $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'}); - $query = "Update biblioitems set -itemtype = $biblioitem->{'itemtype'}, -url = $biblioitem->{'url'}, -isbn = $biblioitem->{'isbn'}, -publishercode = $biblioitem->{'publishercode'}, -publicationyear = $biblioitem->{'publicationyear'}, -classification = $biblioitem->{'classification'}, -dewey = $biblioitem->{'dewey'}, -subclass = $biblioitem->{'subclass'}, -illus = $biblioitem->{'illus'}, -pages = $biblioitem->{'pages'}, -volumeddesc = $biblioitem->{'volumeddesc'}, -notes = $biblioitem->{'notes'}, -size = $biblioitem->{'size'}, -place = $biblioitem->{'place'} -where biblioitemnumber = $biblioitem->{'biblioitemnumber'}"; +sub newitems { + my ($item, @barcodes) = @_; + my $dbh = C4Connect; + my $error=&OLDnewitems($dbh,$item,@barcodes); + $dbh->disconnect; + return($error); +} - $dbh->do($query); +sub moditem { + my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_; + my $dbh=C4Connect; + &OLDmoditem($dbh,$loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement); + $dbh->disconnect; +} - $dbh->disconnect; -} # sub modbibitem +sub checkitems{ + my ($count,@barcodes)=@_; + my $dbh=C4Connect; + my $error; + for (my $i=0;$i<$count;$i++){ + $barcodes[$i]=uc $barcodes[$i]; + my $query="Select * from items where barcode='$barcodes[$i]'"; + my $sth=$dbh->prepare($query); + $sth->execute; + if (my $data=$sth->fetchrow_hashref){ + $error.=" Duplicate Barcode: $barcodes[$i]"; + } + $sth->finish; + } + $dbh->disconnect; + return($error); +} -sub modnote { - my ($bibitemnum,$note)=@_; +sub countitems{ + my ($bibitemnum)=@_; my $dbh=C4Connect; - my $query="update biblioitems set notes='$note' where - biblioitemnumber='$bibitemnum'"; + my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'"; my $sth=$dbh->prepare($query); $sth->execute; + my $data=$sth->fetchrow_hashref; $sth->finish; $dbh->disconnect; + return($data->{'count(*)'}); } -sub newbiblioitem { - my ($biblioitem) = @_; - my $dbh = C4Connect; - my $query = "Select max(biblioitemnumber) from biblioitems"; - my $sth = $dbh->prepare($query); - my $data; - my $bibitemnum; - - $biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'}); - $biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'}); - $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'}); - $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'}); - $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'}); - $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'}); - $biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'}); - $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'}); - $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'}); - $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'}); - $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'}); - $biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'}); - $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); - $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); - $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'}); - $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'}); - $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'}); - $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'}); - $biblioitem->{'lccn'} = $dbh->quote($biblioitem->{'lccn'}); - $biblioitem->{'marc'} = $dbh->quote($biblioitem->{'marc'}); - - $sth->execute; - $data = $sth->fetchrow_arrayref; - $bibitemnum = $$data[0] + 1; - - $sth->finish; - - $query = "insert into biblioitems set -biblioitemnumber = $bibitemnum, -biblionumber = $biblioitem->{'biblionumber'}, -volume = $biblioitem->{'volume'}, -number = $biblioitem->{'number'}, -classification = $biblioitem->{'classification'}, -itemtype = $biblioitem->{'itemtype'}, -url = $biblioitem->{'url'}, -isbn = $biblioitem->{'isbn'}, -issn = $biblioitem->{'issn'}, -dewey = $biblioitem->{'dewey'}, -subclass = $biblioitem->{'subclass'}, -publicationyear = $biblioitem->{'publicationyear'}, -publishercode = $biblioitem->{'publishercode'}, -volumedate = $biblioitem->{'volumedate'}, -volumeddesc = $biblioitem->{'volumeddesc'}, -illus = $biblioitem->{'illus'}, -pages = $biblioitem->{'pages'}, -notes = $biblioitem->{'notes'}, -size = $biblioitem->{'size'}, -lccn = $biblioitem->{'lccn'}, -marc = $biblioitem->{'marc'}, -place = $biblioitem->{'place'}"; - - $sth = $dbh->prepare($query); - $sth->execute; - - $sth->finish; +sub delitem{ + my ($itemnum)=@_; + my $dbh=C4Connect; + &OLDdelitem($dbh,$itemnum); $dbh->disconnect; - return($bibitemnum); } -sub newsubject { - my ($bibnum)=@_; +sub deletebiblioitem { + my ($biblioitemnumber) = @_; + my $dbh = C4Connect; + &OLDdeletebiblioitem($dbh,$biblioitemnumber); + $dbh->disconnect; +} # sub deletebiblioitem + + +sub delbiblio { + my ($biblio)=@_; my $dbh=C4Connect; - my $query="insert into bibliosubject (biblionumber) values - ($bibnum)"; - my $sth=$dbh->prepare($query); -# print $query; - $sth->execute; - $sth->finish; + &OLDdelbiblio($dbh,$biblio); $dbh->disconnect; } -sub newsubtitle { - my ($bibnum, $subtitle) = @_; +sub getitemtypes { my $dbh = C4Connect; - $subtitle = $dbh->quote($subtitle); - my $query = "insert into bibliosubtitle set -biblionumber = $bibnum, -subtitle = $subtitle"; + my $query = "select * from itemtypes"; my $sth = $dbh->prepare($query); - + # || die "Cannot prepare $query" . $dbh->errstr; + my $count = 0; + my @results; + $sth->execute; - + # || die "Cannot execute $query\n" . $sth->errstr; + while (my $data = $sth->fetchrow_hashref) { + @results[$count] = $data; + $count++; + } # while + $sth->finish; $dbh->disconnect; + return($count, @results); +} # sub getitemtypes + +sub getbiblio { + my ($biblionumber) = @_; + my $dbh = C4Connect; + my $query = "Select * from biblio where biblionumber = $biblionumber"; + my $sth = $dbh->prepare($query); + # || die "Cannot prepare $query\n" . $dbh->errstr; + my $count = 0; + my @results; + + $sth->execute; + # || die "Cannot execute $query\n" . $sth->errstr; + while (my $data = $sth->fetchrow_hashref) { + $results[$count] = $data; + $count++; + } # while + + $sth->finish; + $dbh->disconnect; + return($count, @results); +} # sub getbiblio + +sub getbiblioitem { + my ($biblioitemnum) = @_; + my $dbh = C4Connect; + my $query = "Select * from biblioitems where +biblioitemnumber = $biblioitemnum"; + my $sth = $dbh->prepare($query); + my $count = 0; + my @results; + + $sth->execute; + + while (my $data = $sth->fetchrow_hashref) { + $results[$count] = $data; + $count++; + } # while + + $sth->finish; + $dbh->disconnect; + return($count, @results); +} # sub getbiblioitem + +sub getbiblioitembybiblionumber { + my ($biblionumber) = @_; + my $dbh = C4Connect; + my $query = "Select * from biblioitems where biblionumber = +$biblionumber"; + my $sth = $dbh->prepare($query); + my $count = 0; + my @results; + + $sth->execute; + + while (my $data = $sth->fetchrow_hashref) { + $results[$count] = $data; + $count++; + } # while + + $sth->finish; + $dbh->disconnect; + return($count, @results); +} # sub + +sub getitemsbybiblioitem { + my ($biblioitemnum) = @_; + my $dbh = C4Connect; + my $query = "Select * from items, biblio where +biblio.biblionumber = items.biblionumber and biblioitemnumber += $biblioitemnum"; + my $sth = $dbh->prepare($query); + # || die "Cannot prepare $query\n" . $dbh->errstr; + my $count = 0; + my @results; + + $sth->execute; + # || die "Cannot execute $query\n" . $sth->errstr; + while (my $data = $sth->fetchrow_hashref) { + $results[$count] = $data; + $count++; + } # while + + $sth->finish; + $dbh->disconnect; + return($count, @results); +} # sub getitemsbybiblioitem + +sub isbnsearch { + my ($isbn) = @_; + my $dbh = C4Connect; + my $count = 0; + my $query; + my $sth; + my @results; + + $isbn = $dbh->quote($isbn); + $query = "Select biblio.* from biblio, biblioitems where +biblio.biblionumber = biblioitems.biblionumber +and isbn = $isbn"; + $sth = $dbh->prepare($query); + + $sth->execute; + while (my $data = $sth->fetchrow_hashref) { + $results[$count] = $data; + $count++; + } # while + + $sth->finish; + $dbh->disconnect; + return($count, @results); +} # sub isbnsearch + +#sub skip { +# At the moment this is just a straight copy of the subject code. Needs heavy +# modification to work for additional authors, obviously. +# Check for additional author changes + +# my $newadditionalauthor=''; +# my $additionalauthors; +# foreach $newadditionalauthor (@{$biblio->{'additionalauthor'}}) { +# $additionalauthors->{$newadditionalauthor}=1; +# if ($origadditionalauthors->{$newadditionalauthor}) { +# $additionalauthors->{$newadditionalauthor}=2; +# } else { +# my $q_newadditionalauthor=$dbh->quote($newadditionalauthor); +# my $sth=$dbh->prepare("insert into biblioadditionalauthors (additionalauthor,biblionumber) values ($q_newadditionalauthor, $biblionumber)"); +# $sth->execute; +# logchange('kohadb', 'add', 'biblio', 'additionalauthor', $newadditionalauthor); +# my $subfields; +# $subfields->{1}->{'Subfield_Mark'}='a'; +# $subfields->{1}->{'Subfield_Value'}=$newadditionalauthor; +# my $tag='650'; +# my $Record_ID; +# foreach $Record_ID (@marcrecords) { +# addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); +# logchange('marc', 'add', $Record_ID, '650', 'a', $newadditionalauthor); +# } +# } +# } +# my $origadditionalauthor; +# foreach $origadditionalauthor (keys %$origadditionalauthors) { +# if ($additionalauthors->{$origadditionalauthor} == 1) { +# my $q_origadditionalauthor=$dbh->quote($origadditionalauthor); +# logchange('kohadb', 'delete', 'biblio', '$biblionumber', 'additionalauthor', $origadditionalauthor); +# my $sth=$dbh->prepare("delete from biblioadditionalauthors where biblionumber=$biblionumber and additionalauthor=$q_origadditionalauthor"); +# $sth->execute; +# } +# } +# +#} +# $dbh->disconnect; +#} + +sub logchange { +# Subroutine to log changes to databases +# Eventually, this subroutine will be used to create a log of all changes made, +# with the possibility of "undo"ing some changes + my $database=shift; + if ($database eq 'kohadb') { + my $type=shift; + my $section=shift; + my $item=shift; + my $original=shift; + my $new=shift; + print STDERR "KOHA: $type $section $item $original $new\n"; + } elsif ($database eq 'marc') { + my $type=shift; + my $Record_ID=shift; + my $tag=shift; + my $mark=shift; + my $subfield_ID=shift; + my $original=shift; + my $new=shift; + print STDERR "MARC: $type $Record_ID $tag $mark $subfield_ID $original $new\n"; + } } +# +# +# UNUSEFUL SUBs. Could be deleted, kept only until beta test +# maybe useful for some MARC tricks steve used. +# -sub newitems { - my ($item, @barcodes) = @_; - my $dbh = C4Connect; - my $query = "Select max(itemnumber) from items"; - my $sth = $dbh->prepare($query); - my $data; - my $itemnumber; - my $error; +sub OLD_MAYBE_DELETED_newBiblioItem { + my ($env, $biblioitem) = @_; + my $dbh=&C4Connect; + my $biblionumber=$biblioitem->{'biblionumber'}; + my $biblioitemnumber=$biblioitem->{'biblioitemnumber'}; + my $volume=$biblioitem->{'volume'}; + my $q_volume=$dbh->quote($volume); + my $number=$biblioitem->{'number'}; + my $q_number=$dbh->quote($number); + my $classification=$biblioitem->{'classification'}; + my $q_classification=$dbh->quote($classification); + my $itemtype=$biblioitem->{'itemtype'}; + my $q_itemtype=$dbh->quote($itemtype); + my $isbn=$biblioitem->{'isbn'}; + my $q_isbn=$dbh->quote($isbn); + my $issn=$biblioitem->{'issn'}; + my $q_issn=$dbh->quote($issn); + my $dewey=$biblioitem->{'dewey'}; + $dewey=~s/\.*0*$//; + ($dewey == 0) && ($dewey=''); + my $subclass=$biblioitem->{'subclass'}; + my $q_subclass=$dbh->quote($subclass); + my $publicationyear=$biblioitem->{'publicationyear'}; + my $publishercode=$biblioitem->{'publishercode'}; + my $q_publishercode=$dbh->quote($publishercode); + my $volumedate=$biblioitem->{'volumedate'}; + my $q_volumedate=$dbh->quote($volumedate); + my $illus=$biblioitem->{'illus'}; + my $q_illus=$dbh->quote($illus); + my $pages=$biblioitem->{'pages'}; + my $q_pages=$dbh->quote($pages); + my $notes=$biblioitem->{'notes'}; + my $q_notes=$dbh->quote($notes); + my $size=$biblioitem->{'size'}; + my $q_size=$dbh->quote($size); + my $place=$biblioitem->{'place'}; + my $q_place=$dbh->quote($place); + my $lccn=$biblioitem->{'lccn'}; + my $q_lccn=$dbh->quote($lccn); - $sth->execute; - $data = $sth->fetchrow_hashref; - $itemnumber = $data->{'max(itemnumber)'} + 1; - $sth->finish; - - $item->{'booksellerid'} = $dbh->quote($item->{'booksellerid'}); - $item->{'homebranch'} = $dbh->quote($item->{'homebranch'}); - $item->{'price'} = $dbh->quote($item->{'price'}); - $item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'}); - $item->{'itemnotes'} = $dbh->quote($item->{'itemnotes'}); - foreach my $barcode (@barcodes) { - $barcode = uc($barcode); - $barcode = $dbh->quote($barcode); - $query = "Insert into items set -itemnumber = $itemnumber, -biblionumber = $item->{'biblionumber'}, -biblioitemnumber = $item->{'biblioitemnumber'}, -barcode = $barcode, -booksellerid = $item->{'booksellerid'}, -dateaccessioned = NOW(), -homebranch = $item->{'homebranch'}, -holdingbranch = $item->{'homebranch'}, -price = $item->{'price'}, -replacementprice = $item->{'replacementprice'}, -replacementpricedate = NOW(), -itemnotes = $item->{'itemnotes'}"; +# Unless the $env->{'marconly'} flag is set, update the biblioitems table with +# the new data - if ($item->{'loan'}) { - $query .= ", -notforloan = $item->{'loan'}"; - } # if + unless ($env->{'marconly'}) { + #my $sth=$dbh->prepare("lock tables biblioitems write"); + #$sth->execute; + my $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); + $sth->execute; + my ($biblioitemnumber) =$sth->fetchrow; + $biblioitemnumber++; + $sth=$dbh->prepare("insert into biblioitems (biblionumber,biblioitemnumber,volume,number,classification,itemtype,isbn,issn,dewey,subclass,publicationyear,publishercode,volumedate,illus,pages,notes,size,place,lccn) values ($biblionumber, $biblioitemnumber, $q_volume, $q_number, $q_classification, $q_itemtype, $q_isbn, $q_issn, $dewey, $q_subclass, $publicationyear, $q_publishercode, $q_volumedate, $q_illus, $q_pages,$q_notes, $q_size, $q_place, $q_lccn)"); + $sth->execute; + #my $sth=$dbh->prepare("unlock tables"); + #$sth->execute; + } - $sth = $dbh->prepare($query); - $sth->execute; - $error .= $sth->errstr; +# Should we check if there is already a biblioitem/amrc with the +# same isbn/lccn/issn? - $sth->finish; - $itemnumber++; - } # for + my $sth=$dbh->prepare("select title,unititle,seriestitle,copyrightdate,notes,author from biblio where biblionumber=$biblionumber"); + $sth->execute; + my ($title, $unititle,$seriestitle,$copyrightdate,$biblionotes,$author) = $sth->fetchrow; + $sth=$dbh->prepare("select subtitle from bibliosubtitle where biblionumber=$biblionumber"); + $sth->execute; + my ($subtitle) = $sth->fetchrow; + $sth=$dbh->prepare("select author from additionalauthors where biblionumber=$biblionumber"); + $sth->execute; + my @additionalauthors; + while (my ($additionalauthor) = $sth->fetchrow) { + push (@additionalauthors, $additionalauthor); + } + $sth=$dbh->prepare("select subject from bibliosubject where biblionumber=$biblionumber"); + $sth->execute; + my @subjects; + while (my ($subject) = $sth->fetchrow) { + push (@subjects, $subject); + } - $dbh->disconnect; - return($error); -} +# MARC SECTION -sub checkitems{ - my ($count,@barcodes)=@_; - my $dbh=C4Connect; - my $error; - for (my $i=0;$i<$count;$i++){ - $barcodes[$i]=uc $barcodes[$i]; - my $query="Select * from items where barcode='$barcodes[$i]'"; - my $sth=$dbh->prepare($query); + $sth=$dbh->prepare("insert into Resource_Table (Record_ID) values (0)"); + $sth->execute; + my $Resource_ID=$dbh->{'mysql_insertid'}; + my $Record_ID=$Resource_ID; + $sth=$dbh->prepare("update Resource_Table set Record_ID=$Record_ID where Resource_ID=$Resource_ID"); $sth->execute; - if (my $data=$sth->fetchrow_hashref){ - $error.=" Duplicate Barcode: $barcodes[$i]"; - } - $sth->finish; - } - $dbh->disconnect; - return($error); -} -sub moditem { - my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_; - my $dbh=C4Connect; - my $query="update items set biblioitemnumber=$bibitemnum, - barcode='$barcode',itemnotes='$notes' - where itemnumber=$itemnum"; - if ($barcode eq ''){ - $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum"; - } - if ($lost ne ''){ - $query="update items set biblioitemnumber=$bibitemnum, - barcode='$barcode',itemnotes='$notes',homebranch='$homebranch', - itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum"; - } - if ($replacement ne ''){ - $query=~ s/ where/,replacementprice='$replacement' where/; - } +# Title + { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$title; + if ($subtitle) { + $subfields->{2}->{'Subfield_Mark'}='b'; + $subfields->{2}->{'Subfield_Value'}=$subtitle; + } + my $tag='245'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } - my $sth=$dbh->prepare($query); - $sth->execute; - $sth->finish; - $dbh->disconnect; -} +# author + { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$author; + my $tag='100'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Series Title + if ($seriestitle) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$seriestitle; + my $tag='440'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Biblio Note + if ($biblionotes) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$biblionotes; + $subfields->{2}->{'Subfield_Mark'}='3'; + $subfields->{2}->{'Subfield_Value'}='biblio'; + my $tag='500'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Additional Authors + foreach (@additionalauthors) { + my $author=$_; + (next) unless ($author); + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$author; + $subfields->{2}->{'Subfield_Mark'}='e'; + $subfields->{2}->{'Subfield_Value'}='author'; + my $tag='700'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Illustrator + if ($illus) { + (next) unless ($illus); + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$illus; + $subfields->{2}->{'Subfield_Mark'}='e'; + $subfields->{2}->{'Subfield_Value'}='illustrator'; + my $tag='700'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Subjects + foreach (@subjects) { + my $subject=$_; + (next) unless ($subject); + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$subject; + my $tag='650'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } -sub countitems{ - my ($bibitemnum)=@_; - my $dbh=C4Connect; - my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'"; - my $sth=$dbh->prepare($query); - $sth->execute; - my $data=$sth->fetchrow_hashref; - $sth->finish; - $dbh->disconnect; - return($data->{'count(*)'}); -} -sub delitem{ - my ($itemnum)=@_; - my $dbh=C4Connect; - my $query="select * from items where itemnumber=$itemnum"; - my $sth=$dbh->prepare($query); - $sth->execute; - my @data=$sth->fetchrow_array; - $sth->finish; - $query="Insert into deleteditems values ("; - foreach my $temp (@data){ - $query=$query."'$temp',"; - } - $query=~ s/\,$/\)/; -# print $query; - $sth=$dbh->prepare($query); - $sth->execute; - $sth->finish; - $query = "Delete from items where itemnumber=$itemnum"; - $sth=$dbh->prepare($query); - $sth->execute; - $sth->finish; - $dbh->disconnect; +# ISBN + if ($isbn) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$isbn; + my $tag='020'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# LCCN + if ($lccn) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$lccn; + my $tag='010'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# ISSN + if ($issn) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$issn; + my $tag='022'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# DEWEY + if ($dewey) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$dewey; + my $tag='082'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# DEWEY subclass and itemtype + { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$itemtype; + $subfields->{2}->{'Subfield_Mark'}='b'; + $subfields->{2}->{'Subfield_Value'}=$subclass; + $subfields->{3}->{'Subfield_Mark'}='c'; + $subfields->{3}->{'Subfield_Value'}=$biblionumber; + $subfields->{4}->{'Subfield_Mark'}='d'; + $subfields->{4}->{'Subfield_Value'}=$biblioitemnumber; + my $tag='090'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# PUBLISHER + { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$place; + $subfields->{2}->{'Subfield_Mark'}='b'; + $subfields->{2}->{'Subfield_Value'}=$publishercode; + $subfields->{3}->{'Subfield_Mark'}='c'; + $subfields->{3}->{'Subfield_Value'}=$publicationyear; + if ($copyrightdate) { + $subfields->{4}->{'Subfield_Mark'}='c'; + $subfields->{4}->{'Subfield_Value'}="c$copyrightdate"; + } + my $tag='260'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# PHYSICAL + if ($pages || $size) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$pages; + $subfields->{2}->{'Subfield_Mark'}='c'; + $subfields->{2}->{'Subfield_Value'}=$size; + my $tag='300'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Volume/Number + if ($volume || $number) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='v'; + $subfields->{1}->{'Subfield_Value'}=$volume; + $subfields->{2}->{'Subfield_Mark'}='n'; + $subfields->{2}->{'Subfield_Value'}=$number; + my $tag='440'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } +# Biblioitem Note + if ($notes) { + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$notes; + $subfields->{2}->{'Subfield_Mark'}='3'; + $subfields->{2}->{'Subfield_Value'}='biblioitem'; + my $tag='500'; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + } + $sth->finish; + $dbh->disconnect; + return ($env, $Record_ID); } -sub deletebiblioitem { - my ($biblioitemnumber) = @_; - my $dbh = C4Connect; - my $query = "Select * from biblioitems -where biblioitemnumber = $biblioitemnumber"; - my $sth = $dbh->prepare($query); - my @results; - - $sth->execute; - - if (@results = $sth->fetchrow_array) { - - $query = "Insert into deletedbiblioitems values ("; - foreach my $value (@results) { - $value = $dbh->quote($value); - $query .= "$value,"; - } # foreach +sub OLD_MAYBE_DELETED_newItem { + my ($env, $Record_ID, $item) = @_; + my $dbh=&C4Connect; + my $barcode=$item->{'barcode'}; + my $q_barcode=$dbh->quote($barcode); + my $biblionumber=$item->{'biblionumber'}; + my $biblioitemnumber=$item->{'biblioitemnumber'}; + my $dateaccessioned=$item->{'dateaccessioned'}; + my $booksellerid=$item->{'booksellerid'}; + my $q_booksellerid=$dbh->quote($booksellerid); + my $homebranch=$item->{'homebranch'}; + my $q_homebranch=$dbh->quote($homebranch); + my $holdingbranch=$item->{'holdingbranch'}; + my $price=$item->{'price'}; + my $replacementprice=$item->{'replacementprice'}; + my $replacementpricedate=$item->{'replacementpricedate'}; + my $q_replacementpricedate=$dbh->quote($replacementpricedate); + my $notforloan=$item->{'notforloan'}; + my $itemlost=$item->{'itemlost'}; + my $wthdrawn=$item->{'wthdrawn'}; + my $restricted=$item->{'restricted'}; + my $itemnotes=$item->{'itemnotes'}; + my $q_itemnotes=$dbh->quote($itemnotes); + my $itemtype=$item->{'itemtype'}; + my $subclass=$item->{'subclass'}; - $query =~ s/\,$/\)/; - $dbh->do($query); +# KOHADB Section - $query = "Delete from biblioitems -where biblioitemnumber = $biblioitemnumber"; - $dbh->do($query); - } # if + unless ($env->{'marconly'}) { + my $sth=$dbh->prepare("select max(itemnumber) from items"); + $sth->execute; + my ($itemnumber) =$sth->fetchrow; + $itemnumber++; + $sth=$dbh->prepare("insert into items (itemnumber,biblionumber,biblioitemnumber,barcode,dateaccessioned,booksellerid,homebranch,price,replacementprice,replacementpricedate,notforloan,itemlost,wthdrawn,restricted,itemnotes) values ($itemnumber,$biblionumber,$biblioitemnumber,$q_barcode,$dateaccessioned,$q_booksellerid,$q_homebranch,$price,$q_replacementpricedate,$notforloan,$itemlost,$wthdrawn,$restricted,$q_itemnotes)"); + $sth->execute; + } - $sth->finish; -# Now delete all the items attached to the biblioitem +# MARC SECTION + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='p'; + $subfields->{1}->{'Subfield_Value'}=$barcode; + $subfields->{2}->{'Subfield_Mark'}='d'; + $subfields->{2}->{'Subfield_Value'}=$dateaccessioned; + $subfields->{3}->{'Subfield_Mark'}='e'; + $subfields->{3}->{'Subfield_Value'}=$booksellerid; + $subfields->{4}->{'Subfield_Mark'}='b'; + $subfields->{4}->{'Subfield_Value'}=$homebranch; + $subfields->{5}->{'Subfield_Mark'}='l'; + $subfields->{5}->{'Subfield_Value'}=$holdingbranch; + $subfields->{6}->{'Subfield_Mark'}='c'; + $subfields->{6}->{'Subfield_Value'}=$price; + $subfields->{7}->{'Subfield_Mark'}='c'; + $subfields->{7}->{'Subfield_Value'}=$replacementprice; + $subfields->{8}->{'Subfield_Mark'}='d'; + $subfields->{8}->{'Subfield_Value'}=$replacementpricedate; + if ($notforloan) { + $subfields->{9}->{'Subfield_Mark'}='h'; + $subfields->{9}->{'Subfield_Value'}='Not for loan'; + } + if ($notforloan) { + $subfields->{10}->{'Subfield_Mark'}='j'; + $subfields->{10}->{'Subfield_Value'}='Item lost'; + } + if ($notforloan) { + $subfields->{11}->{'Subfield_Mark'}='j'; + $subfields->{11}->{'Subfield_Value'}='Item withdrawn'; + } + if ($notforloan) { + $subfields->{12}->{'Subfield_Mark'}='z'; + $subfields->{12}->{'Subfield_Value'}=$itemnotes; + } + my $tag='876'; + my $Tag_ID; + $env->{'linkage'}=1; + ($env, $Tag_ID) = addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + $env->{'linkage'}=0; + $env->{'linkid'}=$Tag_ID; + $tag='852'; + my $subfields2; + $subfields2->{1}->{'Subfield_Mark'}='a'; + $subfields2->{1}->{'Subfield_Value'}='Coast Mountains School District'; + $subfields2->{1}->{'Subfield_Mark'}='b'; + $subfields2->{1}->{'Subfield_Value'}=$homebranch; + $subfields2->{1}->{'Subfield_Mark'}='c'; + $subfields2->{1}->{'Subfield_Value'}=$itemtype; + $subfields2->{2}->{'Subfield_Mark'}='m'; + $subfields2->{2}->{'Subfield_Value'}=$subclass; + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields2); + $env->{'linkid'}=''; +} - $query = "Select * from items where biblioitemnumber = $biblioitemnumber"; - $sth = $dbh->prepare($query); +sub OLD_MAYBE_DELETED_updateBiblio { +# Update the biblio with biblionumber $biblio->{'biblionumber'} +# I guess this routine should search through all marc records for a record that +# has the same biblionumber stored in it, and modify the MARC record as well as +# the biblio table. +# +# Also, this subroutine should search through the $biblio object and compare it +# to the existing record and _LOG ALL CHANGES MADE_ in some way. I'd like for +# this logging feature to be usable to undo changes easily. + my ($env, $biblio) = @_; + my $Record_ID; + my $biblionumber=$biblio->{'biblionumber'}; + my $dbh=&C4Connect; + my $sth=$dbh->prepare("select * from biblio where biblionumber=$biblionumber"); $sth->execute; + my $origbiblio=$sth->fetchrow_hashref; + $sth=$dbh->prepare("select subtitle from bibliosubtitle where biblionumber=$biblionumber"); + $sth->execute; + my ($subtitle)=$sth->fetchrow; + $origbiblio->{'subtitle'}=$subtitle; + $sth=$dbh->prepare("select author from additionalauthors where biblionumber=$biblionumber"); + $sth->execute; + my $origadditionalauthors; + while (my ($author) = $sth->fetchrow) { + push (@{$origbiblio->{'additionalauthors'}}, $author); + $origadditionalauthors->{$author}=1; + } + $sth=$dbh->prepare("select subject from bibliosubject where biblionumber=$biblionumber"); + $sth->execute; + my $origsubjects; + while (my ($subject) = $sth->fetchrow) { + push (@{$origbiblio->{'subjects'}}, $subject); + $origsubjects->{$subject}=1; + } - while (@results = $sth->fetchrow_array) { - - $query = "Insert into deleteditems values ("; - foreach my $value (@results) { - $value = $dbh->quote($value); - $query .= "$value,"; - } # foreach - - $query =~ s/\,$/\)/; - $dbh->do($query); - } # while + +# Obtain a list of MARC Record_ID's that are tied to this biblio + $sth=$dbh->prepare("select bibid from marc_subfield_table where tag='090' and subfieldvalue=$biblionumber and subfieldcode='c'"); + $sth->execute; + my @marcrecords; + while (my ($bibid) = $sth->fetchrow) { + push(@marcrecords, $bibid); + } - $sth->finish; + my $bibid=''; + if ($biblio->{'author'} ne $origbiblio->{'author'}) { + my $q_author=$dbh->quote($biblio->{'author'}); + logchange('kohadb', 'change', 'biblio', 'author', $origbiblio->{'author'}, $biblio->{'author'}); + my $sti=$dbh->prepare("update biblio set author=$q_author where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $bibid (@marcrecords) { + logchange('marc', 'change', $bibid, '100', 'a', $origbiblio->{'author'}, $biblio->{'author'}); + changeSubfield($bibid, '100', 'a', $origbiblio->{'author'}, $biblio->{'author'}); + } + } + if ($biblio->{'title'} ne $origbiblio->{'title'}) { + my $q_title=$dbh->quote($biblio->{'title'}); + logchange('kohadb', 'change', 'biblio', 'title', $origbiblio->{'title'}, $biblio->{'title'}); + my $sti=$dbh->prepare("update biblio set title=$q_title where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $Record_ID (@marcrecords) { + logchange('marc', 'change', $Record_ID, '245', 'a', $origbiblio->{'title'}, $biblio->{'title'}); + changeSubfield($Record_ID, '245', 'a', $origbiblio->{'title'}, $biblio->{'title'}); + } + } + if ($biblio->{'subtitle'} ne $origbiblio->{'subtitle'}) { + my $q_subtitle=$dbh->quote($biblio->{'subtitle'}); + logchange('kohadb', 'change', 'biblio', 'subtitle', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); + my $sti=$dbh->prepare("update bibliosubtitle set subtitle=$q_subtitle where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $Record_ID (@marcrecords) { + logchange('marc', 'change', $Record_ID, '245', 'b', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); + changeSubfield($Record_ID, '245', 'b', $origbiblio->{'subtitle'}, $biblio->{'subtitle'}); + } + } + if ($biblio->{'unititle'} ne $origbiblio->{'unititle'}) { + my $q_unititle=$dbh->quote($biblio->{'unititle'}); + logchange('kohadb', 'change', 'biblio', 'unititle', $origbiblio->{'unititle'}, $biblio->{'unititle'}); + my $sti=$dbh->prepare("update biblio set unititle=$q_unititle where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + } + if ($biblio->{'notes'} ne $origbiblio->{'notes'}) { + my $q_notes=$dbh->quote($biblio->{'notes'}); + logchange('kohadb', 'change', 'biblio', 'notes', $origbiblio->{'notes'}, $biblio->{'notes'}); + my $sti=$dbh->prepare("update biblio set notes=$q_notes where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $Record_ID (@marcrecords) { + logchange('marc', 'change', $Record_ID, '500', 'a', $origbiblio->{'notes'}, $biblio->{'notes'}); + changeSubfield($Record_ID, '500', 'a', $origbiblio->{'notes'}, $biblio->{'notes'}); + } + } + if ($biblio->{'serial'} ne $origbiblio->{'serial'}) { + my $q_serial=$dbh->quote($biblio->{'serial'}); + logchange('kohadb', 'change', 'biblio', 'serial', $origbiblio->{'serial'}, $biblio->{'serial'}); + my $sti=$dbh->prepare("update biblio set serial=$q_serial where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + } + if ($biblio->{'seriestitle'} ne $origbiblio->{'seriestitle'}) { + my $q_seriestitle=$dbh->quote($biblio->{'seriestitle'}); + logchange('kohadb', 'change', 'biblio', 'seriestitle', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); + my $sti=$dbh->prepare("update biblio set seriestitle=$q_seriestitle where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $Record_ID (@marcrecords) { + logchange('marc', 'change', $Record_ID, '440', 'a', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); + changeSubfield($Record_ID, '440', 'a', $origbiblio->{'seriestitle'}, $biblio->{'seriestitle'}); + } + } + if ($biblio->{'copyrightdate'} ne $origbiblio->{'copyrightdate'}) { + my $q_copyrightdate=$dbh->quote($biblio->{'copyrightdate'}); + logchange('kohadb', 'change', 'biblio', 'copyrightdate', $origbiblio->{'copyrightdate'}, $biblio->{'copyrightdate'}); + my $sti=$dbh->prepare("update biblio set copyrightdate=$q_copyrightdate where biblionumber=$biblio->{'biblionumber'}"); + $sti->execute; + foreach $Record_ID (@marcrecords) { + logchange('marc', 'change', $Record_ID, '260', 'c', "c$origbiblio->{'notes'}", "c$biblio->{'notes'}"); + changeSubfield($Record_ID, '260', 'c', "c$origbiblio->{'notes'}", "c$biblio->{'notes'}"); + } + } - $query = "Delete from items where biblioitemnumber = $biblioitemnumber"; - $dbh->do($query); +# Check for subject heading changes - $dbh->disconnect; -} # sub deletebiblioitem - - -sub delbiblio{ - my ($biblio)=@_; - my $dbh=C4Connect; - my $query="select * from biblio where biblionumber=$biblio"; - my $sth=$dbh->prepare($query); - $sth->execute; - if (my @data=$sth->fetchrow_array){ - $sth->finish; - $query="Insert into deletedbiblio values ("; - foreach my $temp (@data){ - $temp=~ s/\'/\\\'/g; - $query=$query."'$temp',"; + my $newsubject=''; + my $subjects; + foreach $newsubject (@{$biblio->{'subject'}}) { + $subjects->{$newsubject}=1; + if ($origsubjects->{$newsubject}) { + $subjects->{$newsubject}=2; + } else { + my $q_newsubject=$dbh->quote($newsubject); + my $sth=$dbh->prepare("insert into bibliosubject (subject,biblionumber) values ($q_newsubject, $biblionumber)"); + $sth->execute; + logchange('kohadb', 'add', 'biblio', 'subject', $newsubject); + my $subfields; + $subfields->{1}->{'Subfield_Mark'}='a'; + $subfields->{1}->{'Subfield_Value'}=$newsubject; + my $tag='650'; + my $Record_ID; + foreach $Record_ID (@marcrecords) { + addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); + logchange('marc', 'add', $Record_ID, '650', 'a', $newsubject); + } + } + } + my $origsubject; + foreach $origsubject (keys %$origsubjects) { + if ($subjects->{$origsubject} == 1) { + my $q_origsubject=$dbh->quote($origsubject); + logchange('kohadb', 'delete', 'biblio', '$biblionumber', 'subject', $origsubject); + my $sth=$dbh->prepare("delete from bibliosubject where biblionumber=$biblionumber and subject=$q_origsubject"); + $sth->execute; + } } - $query=~ s/\,$/\)/; -# print $query; - $sth=$dbh->prepare($query); - $sth->execute; - $sth->finish; - $query = "Delete from biblio where biblionumber=$biblio"; - $sth=$dbh->prepare($query); - $sth->execute; - $sth->finish; - } - - $sth->finish; - $dbh->disconnect; } -sub getitemtypes { - my $dbh = C4Connect; - my $query = "select * from itemtypes"; - my $sth = $dbh->prepare($query); - # || die "Cannot prepare $query" . $dbh->errstr; - my $count = 0; - my @results; - - $sth->execute; - # || die "Cannot execute $query\n" . $sth->errstr; - while (my $data = $sth->fetchrow_hashref) { - @results[$count] = $data; - $count++; - } # while - - $sth->finish; - $dbh->disconnect; - return($count, @results); -} # sub getitemtypes - -sub getbiblio { - my ($biblionumber) = @_; - my $dbh = C4Connect; - my $query = "Select * from biblio where biblionumber = $biblionumber"; - my $sth = $dbh->prepare($query); - # || die "Cannot prepare $query\n" . $dbh->errstr; - my $count = 0; - my @results; - - $sth->execute; - # || die "Cannot execute $query\n" . $sth->errstr; - while (my $data = $sth->fetchrow_hashref) { - $results[$count] = $data; - $count++; - } # while - - $sth->finish; - $dbh->disconnect; - return($count, @results); -} # sub getbiblio +sub OLD_MAYBE_DELETED_updateBiblioItem { +# Update the biblioitem with biblioitemnumber $biblioitem->{'biblioitemnumber'} +# +# This routine should also check to see which fields are actually being +# modified, and log all changes. -sub getbiblioitem { - my ($biblioitemnum) = @_; - my $dbh = C4Connect; - my $query = "Select * from biblioitems where -biblioitemnumber = $biblioitemnum"; - my $sth = $dbh->prepare($query); - my $count = 0; - my @results; + my ($env, $biblioitem) = @_; + my $dbh=&C4Connect; + my $biblioitemnumber=$biblioitem->{'biblioitemnumber'}; + my $sth=$dbh->prepare("select * from biblioitems where biblioitemnumber=$biblioitemnumber"); +# obi = original biblioitem + my $obi=$sth->fetchrow_hashref; + $sth=$dbh->prepare("select B.Record_ID from Bib_Table B, 0XX_Tag_Table T, 0XX_Subfield_Table S where B.Tag_0XX_ID=T.Tag_ID and T.Subfield_ID=S.Subfield_ID and T.Tag='090' and S.Subfield_Mark='c' and S.Subfield_Value=$biblioitemnumber"); $sth->execute; - - while (my $data = $sth->fetchrow_hashref) { - $results[$count] = $data; - $count++; - } # while - + my ($Record_ID) = $sth->fetchrow; + if ($biblioitem->{'biblionumber'} ne $obi->{'biblionumber'}) { + logchange('kohadb', 'change', 'biblioitems', 'biblionumber', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); + my $sth=$dbh->prepare("update biblioitems set biblionumber=$biblioitem->{'biblionumber'} where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '090', 'c', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); + changeSubfield($Record_ID, '090', 'c', $obi->{'biblionumber'}, $biblioitem->{'biblionumber'}); + } + if ($biblioitem->{'volume'} ne $obi->{'volume'}) { + logchange('kohadb', 'change', 'biblioitems', 'volume', $obi->{'volume'}, $biblioitem->{'volume'}); + my $q_volume=$dbh->quote($biblioitem->{'volume'}); + my $sth=$dbh->prepare("update biblioitems set volume=$q_volume where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '440', 'v', $obi->{'volume'}, $biblioitem->{'volume'}); + changeSubfield($Record_ID, '440', 'v', $obi->{'volume'}, $biblioitem->{'volume'}); + } + if ($biblioitem->{'number'} ne $obi->{'number'}) { + logchange('kohadb', 'change', 'biblioitems', 'number', $obi->{'number'}, $biblioitem->{'number'}); + my $q_number=$dbh->quote($biblioitem->{'number'}); + my $sth=$dbh->prepare("update biblioitems set number=$q_number where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '440', 'v', $obi->{'number'}, $biblioitem->{'number'}); + changeSubfield($Record_ID, '440', 'v', $obi->{'number'}, $biblioitem->{'number'}); + } + if ($biblioitem->{'itemtype'} ne $obi->{'itemtype'}) { + logchange('kohadb', 'change', 'biblioitems', 'itemtype', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); + my $q_itemtype=$dbh->quote($biblioitem->{'itemtype'}); + my $sth=$dbh->prepare("update biblioitems set itemtype=$q_itemtype where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '090', 'a', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); + changeSubfield($Record_ID, '090', 'a', $obi->{'itemtype'}, $biblioitem->{'itemtype'}); + } + if ($biblioitem->{'isbn'} ne $obi->{'isbn'}) { + logchange('kohadb', 'change', 'biblioitems', 'isbn', $obi->{'isbn'}, $biblioitem->{'isbn'}); + my $q_isbn=$dbh->quote($biblioitem->{'isbn'}); + my $sth=$dbh->prepare("update biblioitems set isbn=$q_isbn where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '020', 'a', $obi->{'isbn'}, $biblioitem->{'isbn'}); + changeSubfield($Record_ID, '020', 'a', $obi->{'isbn'}, $biblioitem->{'isbn'}); + } + if ($biblioitem->{'issn'} ne $obi->{'issn'}) { + logchange('kohadb', 'change', 'biblioitems', 'issn', $obi->{'issn'}, $biblioitem->{'issn'}); + my $q_issn=$dbh->quote($biblioitem->{'issn'}); + my $sth=$dbh->prepare("update biblioitems set issn=$q_issn where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '022', 'a', $obi->{'issn'}, $biblioitem->{'issn'}); + changeSubfield($Record_ID, '022', 'a', $obi->{'issn'}, $biblioitem->{'issn'}); + } + if ($biblioitem->{'dewey'} ne $obi->{'dewey'}) { + logchange('kohadb', 'change', 'biblioitems', 'dewey', $obi->{'dewey'}, $biblioitem->{'dewey'}); + my $sth=$dbh->prepare("update biblioitems set dewey=$biblioitem->{'dewey'} where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '082', 'a', $obi->{'dewey'}, $biblioitem->{'dewey'}); + changeSubfield($Record_ID, '082', 'a', $obi->{'dewey'}, $biblioitem->{'dewey'}); + } + if ($biblioitem->{'subclass'} ne $obi->{'subclass'}) { + logchange('kohadb', 'change', 'biblioitems', 'subclass', $obi->{'subclass'}, $biblioitem->{'subclass'}); + my $q_subclass=$dbh->quote($biblioitem->{'subclass'}); + my $sth=$dbh->prepare("update biblioitems set subclass=$q_subclass where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '090', 'b', $obi->{'subclass'}, $biblioitem->{'subclass'}); + changeSubfield($Record_ID, '090', 'b', $obi->{'subclass'}, $biblioitem->{'subclass'}); + } + if ($biblioitem->{'place'} ne $obi->{'place'}) { + logchange('kohadb', 'change', 'biblioitems', 'place', $obi->{'place'}, $biblioitem->{'place'}); + my $q_place=$dbh->quote($biblioitem->{'place'}); + my $sth=$dbh->prepare("update biblioitems set place=$q_place where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '260', 'a', $obi->{'place'}, $biblioitem->{'place'}); + changeSubfield($Record_ID, '260', 'a', $obi->{'place'}, $biblioitem->{'place'}); + } + if ($biblioitem->{'publishercode'} ne $obi->{'publishercode'}) { + logchange('kohadb', 'change', 'biblioitems', 'publishercode', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); + my $q_publishercode=$dbh->quote($biblioitem->{'publishercode'}); + my $sth=$dbh->prepare("update biblioitems set publishercode=$q_publishercode where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '260', 'b', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); + changeSubfield($Record_ID, '260', 'b', $obi->{'publishercode'}, $biblioitem->{'publishercode'}); + } + if ($biblioitem->{'publicationyear'} ne $obi->{'publicationyear'}) { + logchange('kohadb', 'change', 'biblioitems', 'publicationyear', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); + my $q_publicationyear=$dbh->quote($biblioitem->{'publicationyear'}); + my $sth=$dbh->prepare("update biblioitems set publicationyear=$q_publicationyear where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '260', 'c', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); + changeSubfield($Record_ID, '260', 'c', $obi->{'publicationyear'}, $biblioitem->{'publicationyear'}); + } + if ($biblioitem->{'illus'} ne $obi->{'illus'}) { + logchange('kohadb', 'change', 'biblioitems', 'illus', $obi->{'illus'}, $biblioitem->{'illus'}); + my $q_illus=$dbh->quote($biblioitem->{'illus'}); + my $sth=$dbh->prepare("update biblioitems set illus=$q_illus where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '700', 'a', $obi->{'illus'}, $biblioitem->{'illus'}); + changeSubfield($Record_ID, '700', 'a', $obi->{'illus'}, $biblioitem->{'illus'}); + } + if ($biblioitem->{'pages'} ne $obi->{'pages'}) { + logchange('kohadb', 'change', 'biblioitems', 'pages', $obi->{'pages'}, $biblioitem->{'pages'}); + my $q_pages=$dbh->quote($biblioitem->{'pages'}); + my $sth=$dbh->prepare("update biblioitems set pages=$q_pages where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '300', 'a', $obi->{'pages'}, $biblioitem->{'pages'}); + changeSubfield($Record_ID, '300', 'a', $obi->{'pages'}, $biblioitem->{'pages'}); + } + if ($biblioitem->{'size'} ne $obi->{'size'}) { + logchange('kohadb', 'change', 'biblioitems', 'size', $obi->{'size'}, $biblioitem->{'size'}); + my $q_size=$dbh->quote($biblioitem->{'size'}); + my $sth=$dbh->prepare("update biblioitems set size=$q_size where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '300', 'c', $obi->{'size'}, $biblioitem->{'size'}); + changeSubfield($Record_ID, '300', 'c', $obi->{'size'}, $biblioitem->{'size'}); + } + if ($biblioitem->{'notes'} ne $obi->{'notes'}) { + logchange('kohadb', 'change', 'biblioitems', 'notes', $obi->{'notes'}, $biblioitem->{'notes'}); + my $q_notes=$dbh->quote($biblioitem->{'notes'}); + my $sth=$dbh->prepare("update biblioitems set notes=$q_notes where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '500', 'a', $obi->{'notes'}, $biblioitem->{'notes'}); + changeSubfield($Record_ID, '500', 'a', $obi->{'notes'}, $biblioitem->{'notes'}); + } + if ($biblioitem->{'lccn'} ne $obi->{'lccn'}) { + logchange('kohadb', 'change', 'biblioitems', 'lccn', $obi->{'lccn'}, $biblioitem->{'lccn'}); + my $q_lccn=$dbh->quote($biblioitem->{'lccn'}); + my $sth=$dbh->prepare("update biblioitems set lccn=$q_lccn where biblioitemnumber=$biblioitemnumber"); + logchange('marc', 'change', $Record_ID, '010', 'a', $obi->{'lccn'}, $biblioitem->{'lccn'}); + changeSubfield($Record_ID, '010', 'a', $obi->{'lccn'}, $biblioitem->{'lccn'}); + } $sth->finish; $dbh->disconnect; - return($count, @results); -} # sub getbiblioitem - -sub getbiblioitembybiblionumber { - my ($biblionumber) = @_; - my $dbh = C4Connect; - my $query = "Select * from biblioitems where biblionumber = -$biblionumber"; - my $sth = $dbh->prepare($query); - my $count = 0; - my @results; - - $sth->execute; - while (my $data = $sth->fetchrow_hashref) { - $results[$count] = $data; - $count++; - } # while +} - $sth->finish; - $dbh->disconnect; - return($count, @results); -} # sub +sub OLD_MAYBE_DELETED_updateItem { +# Update the item with itemnumber $item->{'itemnumber'} +# This routine should also modify the corresponding MARC record data. (852 and +# 876 tags with 876p tag the same as $item->{'barcode'} +# +# This routine should also check to see which fields are actually being +# modified, and log all changes. -sub getitemsbybiblioitem { - my ($biblioitemnum) = @_; - my $dbh = C4Connect; - my $query = "Select * from items, biblio where -biblio.biblionumber = items.biblionumber and biblioitemnumber -= $biblioitemnum"; - my $sth = $dbh->prepare($query); - # || die "Cannot prepare $query\n" . $dbh->errstr; - my $count = 0; - my @results; - + my ($env, $item) = @_; + my $dbh=&C4Connect; + my $itemnumber=$item->{'itemnumber'}; + my $biblionumber=$item->{'biblionumber'}; + my $biblioitemnumber=$item->{'biblioitemnumber'}; + my $barcode=$item->{'barcode'}; + my $dateaccessioned=$item->{'dateaccessioned'}; + my $booksellerid=$item->{'booksellerid'}; + my $homebranch=$item->{'homebranch'}; + my $price=$item->{'price'}; + my $replacementprice=$item->{'replacementprice'}; + my $replacementpricedate=$item->{'replacementpricedate'}; + my $multivolume=$item->{'multivolume'}; + my $stack=$item->{'stack'}; + my $notforloan=$item->{'notforloan'}; + my $itemlost=$item->{'itemlost'}; + my $wthdrawn=$item->{'wthdrawn'}; + my $bulk=$item->{'bulk'}; + my $restricted=$item->{'restricted'}; + my $binding=$item->{'binding'}; + my $itemnotes=$item->{'itemnotes'}; + my $holdingbranch=$item->{'holdingbranch'}; + my $interim=$item->{'interim'}; + my $sth=$dbh->prepare("select * from items where itemnumber=$itemnumber"); $sth->execute; - # || die "Cannot execute $query\n" . $sth->errstr; - while (my $data = $sth->fetchrow_hashref) { - $results[$count] = $data; - $count++; - } # while - - $sth->finish; - $dbh->disconnect; - return($count, @results); -} # sub getitemsbybiblioitem - -sub isbnsearch { - my ($isbn) = @_; - my $dbh = C4Connect; - my $count = 0; - my $query; - my $sth; - my @results; - - $isbn = $dbh->quote($isbn); - $query = "Select biblio.* from biblio, biblioitems where -biblio.biblionumber = biblioitems.biblionumber -and isbn = $isbn"; - $sth = $dbh->prepare($query); - + my $olditem=$sth->fetchrow_hashref; + my $q_barcode=$dbh->quote($olditem->{'barcode'}); + $sth=$dbh->prepare("select S.Subfield_ID, B.Record_ID from 8XX_Subfield_Table S, 8XX_Tag_Table T, Bib_Table B where B.Tag_8XX_ID=T.Tag_ID and T.Subfield_ID=S.Subfield_ID and Subfield_Mark='p' and Subfield_Value=$q_barcode"); $sth->execute; - while (my $data = $sth->fetchrow_hashref) { - $results[$count] = $data; - $count++; - } # while - - $sth->finish; - $dbh->disconnect; - return($count, @results); -} # sub isbnsearch -sub skip { -# At the moment this is just a straight copy of the subject code. Needs heavy -# modification to work for additional authors, obviously. -# Check for additional author changes + my ($Subfield876_ID, $Record_ID) = $sth->fetchrow; + $sth=$dbh->prepare("select Subfield_Value from 8XX_Subfield_Table where Subfield_Mark=8 and Subfield_ID=$Subfield876_ID"); + $sth->execute; + my ($link) = $sth->fetchrow; + $sth=$dbh->prepare("select Subfield_ID from 8XX_Subfield_Table where Subfield_Mark=8 and Subfield_Value=$link and !(Subfield_ID=$Subfield876_ID)"); + $sth->execute; + my ($Subfield852_ID) = $sth->fetchrow; - my $newadditionalauthor=''; - my $additionalauthors; - foreach $newadditionalauthor (@{$biblio->{'additionalauthor'}}) { - $additionalauthors->{$newadditionalauthor}=1; - if ($origadditionalauthors->{$newadditionalauthor}) { - $additionalauthors->{$newadditionalauthor}=2; + if ($item->{'barcode'} ne $olditem->{'barcode'}) { + logchange('kohadb', 'change', 'items', 'barcode', $olditem->{'barcode'}, $item->{'barcode'}); + my $q_barcode=$dbh->quote($item->{'barcode'}); + my $sth=$dbh->prepare("update items set barcode=$q_barcode where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'p', $olditem->{'barcode'}, $item->{'barcode'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'p', $Subfield_Key, $olditem->{'barcode'}, $item->{'barcode'}); + } + if ($item->{'booksellerid'} ne $olditem->{'booksellerid'}) { + logchange('kohadb', 'change', 'items', 'booksellerid', $olditem->{'booksellerid'}, $item->{'booksellerid'}); + my $q_booksellerid=$dbh->quote($item->{'booksellerid'}); + my $sth=$dbh->prepare("update items set booksellerid=$q_booksellerid where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'e', $olditem->{'booksellerid'}, $item->{'booksellerid'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'e', $Subfield_Key, $olditem->{'booksellerid'}, $item->{'booksellerid'}); + } + if ($item->{'dateaccessioned'} ne $olditem->{'dateaccessioned'}) { + logchange('kohadb', 'change', 'items', 'dateaccessioned', $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}); + my $q_dateaccessioned=$dbh->quote($item->{'dateaccessioned'}); + my $sth=$dbh->prepare("update items set dateaccessioned=$q_dateaccessioned where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'd', $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'd', $Subfield_Key, $olditem->{'dateaccessioned'}, $item->{'dateaccessioned'}); + } + if ($item->{'homebranch'} ne $olditem->{'homebranch'}) { + logchange('kohadb', 'change', 'items', 'homebranch', $olditem->{'homebranch'}, $item->{'homebranch'}); + my $q_homebranch=$dbh->quote($item->{'homebranch'}); + my $sth=$dbh->prepare("update items set homebranch=$q_homebranch where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'b', $olditem->{'homebranch'}, $item->{'homebranch'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'b', $Subfield_Key, $olditem->{'homebranch'}, $item->{'homebranch'}); + } + if ($item->{'holdingbranch'} ne $olditem->{'holdingbranch'}) { + logchange('kohadb', 'change', 'items', 'holdingbranch', $olditem->{'holdingbranch'}, $item->{'holdingbranch'}); + my $q_holdingbranch=$dbh->quote($item->{'holdingbranch'}); + my $sth=$dbh->prepare("update items set holdingbranch=$q_holdingbranch where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'l', $olditem->{'holdingbranch'}, $item->{'holdingbranch'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'l', $Subfield_Key, $olditem->{'holdingbranch'}, $item->{'holdingbranch'}); + } + if ($item->{'price'} ne $olditem->{'price'}) { + logchange('kohadb', 'change', 'items', 'price', $olditem->{'price'}, $item->{'price'}); + my $q_price=$dbh->quote($item->{'price'}); + my $sth=$dbh->prepare("update items set price=$q_price where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'c', $olditem->{'price'}, $item->{'price'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'c', $Subfield_Key, $olditem->{'price'}, $item->{'price'}); + } + if ($item->{'itemnotes'} ne $olditem->{'itemnotes'}) { + logchange('kohadb', 'change', 'items', 'itemnotes', $olditem->{'itemnotes'}, $item->{'itemnotes'}); + my $q_itemnotes=$dbh->quote($item->{'itemnotes'}); + my $sth=$dbh->prepare("update items set itemnotes=$q_itemnotes where itemnumber=$itemnumber"); + $sth->execute; + my ($Subfield_ID, $Subfield_Key) = changeSubfield($Record_ID, '876', 'c', $olditem->{'itemnotes'}, $item->{'itemnotes'}, $Subfield876_ID); + logchange('marc', 'change', $Record_ID, '876', 'c', $Subfield_Key, $olditem->{'itemnotes'}, $item->{'itemnotes'}); + } + if ($item->{'notforloan'} ne $olditem->{'notforloan'}) { + logchange('kohadb', 'change', 'items', 'notforloan', $olditem->{'notforloan'}, $item->{'notforloan'}); + my $sth=$dbh->prepare("update items set notforloan=$notforloan where itemnumber=$itemnumber"); + $sth->execute; + if ($item->{'notforloan'}) { + my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Not for loan', $Subfield876_ID); + logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Not for loan'); } else { - my $q_newadditionalauthor=$dbh->quote($newadditionalauthor); - my $sth=$dbh->prepare("insert into biblioadditionalauthors (additionalauthor,biblionumber) values ($q_newadditionalauthor, $biblionumber)"); - $sth->execute; - logchange('kohadb', 'add', 'biblio', 'additionalauthor', $newadditionalauthor); - my $subfields; - $subfields->{1}->{'Subfield_Mark'}='a'; - $subfields->{1}->{'Subfield_Value'}=$newadditionalauthor; - my $tag='650'; - my $Record_ID; - foreach $Record_ID (@marcrecords) { - addTag($env, $Record_ID, $tag, ' ', ' ', $subfields); - logchange('marc', 'add', $Record_ID, '650', 'a', $newadditionalauthor); - } + my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Not for loan', $Subfield876_ID); + logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Not for loan'); } } - my $origadditionalauthor; - foreach $origadditionalauthor (keys %$origadditionalauthors) { - if ($additionalauthors->{$origadditionalauthor} == 1) { - my $q_origadditionalauthor=$dbh->quote($origadditionalauthor); - logchange('kohadb', 'delete', 'biblio', '$biblionumber', 'additionalauthor', $origadditionalauthor); - my $sth=$dbh->prepare("delete from biblioadditionalauthors where biblionumber=$biblionumber and additionalauthor=$q_origadditionalauthor"); - $sth->execute; + if ($item->{'itemlost'} ne $olditem->{'itemlost'}) { + logchange('kohadb', 'change', 'items', 'itemlost', $olditem->{'itemlost'}, $item->{'itemlost'}); + my $sth=$dbh->prepare("update items set itemlost=$itemlost where itemnumber=$itemnumber"); + $sth->execute; + if ($item->{'itemlost'}) { + my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Item lost', $Subfield876_ID); + logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Item lost'); + } else { + my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Item lost', $Subfield876_ID); + logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Item lost'); } } - -} + if ($item->{'wthdrawn'} ne $olditem->{'wthdrawn'}) { + logchange('kohadb', 'change', 'items', 'wthdrawn', $olditem->{'wthdrawn'}, $item->{'wthdrawn'}); + my $sth=$dbh->prepare("update items set wthdrawn=$wthdrawn where itemnumber=$itemnumber"); + $sth->execute; + if ($item->{'wthdrawn'}) { + my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Withdrawn', $Subfield876_ID); + logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Withdrawn'); + } else { + my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Withdrawn', $Subfield876_ID); + logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Withdrawn'); + } + } + if ($item->{'restricted'} ne $olditem->{'restricted'}) { + logchange('kohadb', 'change', 'items', 'restricted', $olditem->{'restricted'}, $item->{'restricted'}); + my $sth=$dbh->prepare("update items set restricted=$restricted where itemnumber=$itemnumber"); + $sth->execute; + if ($item->{'restricted'}) { + my ($Subfield_ID, $Subfield_Key) = addSubfield($Record_ID, '876', 'h', 'Restricted', $Subfield876_ID); + logchange('marc', 'add', $Record_ID, '876', 'h', $Subfield_Key, 'Restricted'); + } else { + my ($Subfield_ID, $Subfield_Key) = deleteSubfield($Record_ID, '876', 'h', 'Restricted', $Subfield876_ID); + logchange('marc', 'delete', $Record_ID, '876', 'h', $Subfield_Key, 'Restricted'); + } + } + $sth->finish; $dbh->disconnect; } -sub logchange { -# Subroutine to log changes to databases -# Eventually, this subroutine will be used to create a log of all changes made, -# with the possibility of "undo"ing some changes - my $database=shift; - if ($database eq 'kohadb') { - my $type=shift; - my $section=shift; - my $item=shift; - my $original=shift; - my $new=shift; - print STDERR "KOHA: $type $section $item $original $new\n"; - } elsif ($database eq 'marc') { - my $type=shift; - my $Record_ID=shift; - my $tag=shift; - my $mark=shift; - my $subfield_ID=shift; - my $original=shift; - my $new=shift; - print STDERR "MARC: $type $Record_ID $tag $mark $subfield_ID $original $new\n"; - } -} +# +# +# END OF UNUSEFUL SUBs +# +# END { } # module clean-up code here (global destructor) -- 2.39.5