1 package C4::Acquisitions; #assumes C4/Acquisitions.pm
4 # Copyright 2000-2002 Katipo Communications
6 # This file is part of Koha.
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 2 of the License, or (at your option) any later
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License along with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA 02111-1307 USA
22 # NOTE: This module is deprecated in Koha 1.3.x, and will shortly be
30 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
32 # set the version for version checking
37 C4::Acquisitions - Koha module dealing with acquisitions and orders
45 B<NOTE:> This module is deprecated in Koha 1.3.x.
47 The functions in this module deal with acquisitions, managing book
48 orders, converting money to different currencies, and so forth.
57 @EXPORT = qw(&getorders &bookseller &breakdown &basket &newbasket &bookfunds
58 &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
59 &newordernum &modbiblio &modorder &getsingleorder &invoice &receiveorder
60 &bookfundbreakdown &curconvert &updatesup &insertsup &newitems &modbibitem
61 &getcurrencies &modsubtitle &modsubject &modaddauthor &moditem &countitems
62 &findall &needsmod &delitem &deletebiblioitem &delbiblio &delorder &branches
63 &getallorders &getrecorders &updatecurrencies &getorder &getcurrency &updaterecorder
64 &updatecost &checkitems &modnote &getitemtypes &getbiblio
65 &getbiblioitembybiblionumber
66 &getbiblioitem &getitemsbybiblioitem &isbnsearch
67 &websitesearch &addwebsite &updatewebsite &deletewebsite);
68 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
70 # your exported package globals go here,
71 # as well as any optionally exported functions
73 @EXPORT_OK = qw($Var1 %Hashit); # FIXME - Never used
76 # non-exported package globals go here
77 use vars qw(@more $stuff); # FIXME - Never used
79 # initalize package globals, first exported ones
86 # then the others (which are still accessible as $Some::Module::stuff)
91 # all file-scoped lexicals must be created before
92 # the functions below that use them.
94 # file-private lexicals go here
100 # here's a file-private function as a closure,
101 # callable as &$priv_func; it cannot be prototyped.
102 my $priv_func = sub {
106 # make all your functions, whether exported or not;
110 ($count, $orders) = &getorders($booksellerid);
112 Finds pending orders from the bookseller with the given ID. Ignores
113 completed and cancelled orders.
115 C<$count> is the number of elements in C<@{$orders}>.
117 C<$orders> is a reference-to-array; each element is a
118 reference-to-hash with the following fields:
124 Gives the number of orders in with this basket number.
126 =item C<authorizedby>
132 These give the value of the corresponding field in the aqorders table
133 of the Koha database.
137 Results are ordered from most to least recent.
141 # FIXME - This exact function already exists in C4::Catalogue
144 my $dbh = C4::Context->dbh;
145 my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where
146 booksellerid='$supplierid' and (quantity > quantityreceived or
147 quantityreceived is NULL)
148 and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
149 $query.=" group by basketno order by entrydate desc";
151 my $sth=$dbh->prepare($query);
155 while (my $data=$sth->fetchrow_hashref){
160 return ($i,\@results);
163 # Only used internally
164 # FIXME - This is the same as &C4::Biblio::itemcount, but not
165 # the same as &C4::Search::itemcount
168 my $dbh = C4::Context->dbh;
169 my $query="Select count(*) from items where biblionumber=$biblio";
171 my $sth=$dbh->prepare($query);
173 my $data=$sth->fetchrow_hashref;
175 return($data->{'count(*)'});
180 ($order, $ordernumber) = &getorder($biblioitemnumber, $biblionumber);
182 Looks up the order with the given biblionumber and biblioitemnumber.
184 Returns a two-element array. C<$ordernumber> is the order number.
185 C<$order> is a reference-to-hash describing the order; its keys are
186 fields from the biblio, biblioitems, aqorders, and aqorderbreakdown
187 tables of the Koha database.
191 # FIXME - There are functions &getorder and &getorders. Isn't this
192 # somewhat likely to cause confusion?
193 # FIXME - Almost the exact same function is already in C4::Catalogue
196 my $dbh = C4::Context->dbh;
197 my $query="Select ordernumber
199 where biblionumber=? and biblioitemnumber=?";
200 my $sth=$dbh->prepare($query);
201 $sth->execute($bib,$bi);
202 my $ordnum=$sth->fetchrow_hashref;
204 my $order=getsingleorder($ordnum->{'ordernumber'});
206 return ($order,$ordnum->{'ordernumber'});
211 $order = &getsingleorder($ordernumber);
213 Looks up an order by order number.
215 Returns a reference-to-hash describing the order. The keys of
216 C<$order> are fields from the biblio, biblioitems, aqorders, and
217 aqorderbreakdown tables of the Koha database.
221 # FIXME - This is practically the same function as
222 # &C4::Catalogue::getsingleorder and &C4::Biblio::getsingleorder.
225 my $dbh = C4::Context->dbh;
226 my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown
227 where aqorders.ordernumber=?
228 and biblio.biblionumber=aqorders.biblionumber and
229 biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
230 aqorders.ordernumber=aqorderbreakdown.ordernumber";
231 my $sth=$dbh->prepare($query);
232 $sth->execute($ordnum);
233 my $data=$sth->fetchrow_hashref;
240 ($count, @results) = &invoice($booksellerinvoicenumber);
242 Looks up orders by invoice number.
244 Returns an array. C<$count> is the number of elements in C<@results>.
245 C<@results> is an array of references-to-hash; the keys of each
246 elements are fields from the aqorders, biblio, and biblioitems tables
247 of the Koha database.
251 # FIXME - This exact function is already in C4::Catalogue
254 my $dbh = C4::Context->dbh;
255 my $query="Select * from aqorders,biblio,biblioitems where
256 booksellerinvoicenumber='$invoice'
257 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
258 aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
261 my $sth=$dbh->prepare($query);
263 while (my $data=$sth->fetchrow_hashref){
273 ($count, @results) = &getallorders($booksellerid);
275 Looks up all of the pending orders from the supplier with the given
276 bookseller ID. Ignores cancelled orders.
278 C<$count> is the number of elements in C<@results>. C<@results> is an
279 array of references-to-hash. The keys of each element are fields from
280 the aqorders, biblio, and biblioitems tables of the Koha database.
282 C<@results> is sorted alphabetically by book title.
286 # FIXME - Almost (but not quite) the same function appears in C4::Catalogue
287 # That one only lists incomplete orders.
289 #gets all orders from a certain supplier, orders them alphabetically
291 my $dbh = C4::Context->dbh;
292 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
293 and (cancelledby is NULL or cancelledby = '')
294 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
295 aqorders.biblioitemnumber
296 group by aqorders.biblioitemnumber
301 my $sth=$dbh->prepare($query);
303 while (my $data=$sth->fetchrow_hashref){
311 # FIXME - There's a getrecorders in C4::Catalogue
312 # FIXME - Never used (neither is the other one, actually)
314 #gets all orders from a certain supplier, orders them alphabetically
316 my $dbh = C4::Context->dbh;
317 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
318 and (cancelledby is NULL or cancelledby = '')
319 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
320 aqorders.biblioitemnumber and
321 aqorders.quantityreceived>0
322 and aqorders.datereceived >=now()
323 group by aqorders.biblioitemnumber
328 my $sth=$dbh->prepare($query);
330 while (my $data=$sth->fetchrow_hashref){
340 ($count, @results) = &ordersearch($search, $biblionumber, $complete);
344 C<$search> may take one of several forms: if it is an ISBN,
345 C<&ordersearch> returns orders with that ISBN. If C<$search> is an
346 order number, C<&ordersearch> returns orders with that order number
347 and biblionumber C<$biblionumber>. Otherwise, C<$search> is considered
348 to be a space-separated list of search terms; in this case, all of the
349 terms must appear in the title (matching the beginning of title
352 If C<$complete> is C<yes>, the results will include only completed
353 orders. In any case, C<&ordersearch> ignores cancelled orders.
355 C<&ordersearch> returns an array. C<$count> is the number of elements
356 in C<@results>. C<@results> is an array of references-to-hash with the
373 # FIXME - The same function (modulo whitespace) appears in C4::Catalogue
375 my ($search,$biblio,$catview)=@_;
376 my $dbh = C4::Context->dbh;
377 my $query="Select *,biblio.title from aqorders,biblioitems,biblio
378 where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
379 and biblio.biblionumber=aqorders.biblionumber
380 and ((datecancellationprinted is NULL)
381 or (datecancellationprinted = '0000-00-00'))
383 my @data=split(' ',$search);
385 for (my $i=0;$i<$count;$i++){
386 $query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
389 $query.=" ) or biblioitems.isbn='$search'
390 or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
391 if ($catview ne 'yes'){
392 $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
394 $query.=" group by aqorders.ordernumber";
395 my $sth=$dbh->prepare($query);
400 while (my $data=$sth->fetchrow_hashref){
401 my $sth2=$dbh->prepare("Select * from biblio where
402 biblionumber='$data->{'biblionumber'}'");
404 my $data2=$sth2->fetchrow_hashref;
406 $data->{'author'}=$data2->{'author'};
407 $data->{'seriestitle'}=$data2->{'seriestitle'};
408 $sth2=$dbh->prepare("Select * from aqorderbreakdown where
409 ordernumber=$data->{'ordernumber'}");
411 $data2=$sth2->fetchrow_hashref;
413 $data->{'branchcode'}=$data2->{'branchcode'};
414 $data->{'bookfundid'}=$data2->{'bookfundid'};
424 ($count, @results) = &bookseller($searchstring);
426 Looks up a book seller. C<$searchstring> may be either a book seller
427 ID, or a string to look for in the book seller's name.
429 C<$count> is the number of elements in C<@results>. C<@results> is an
430 array of references-to-hash, whose keys are the fields of of the
431 aqbooksellers table in the Koha database.
435 # FIXME - This function appears in C4::Catalogue
437 my ($searchstring)=@_;
438 my $dbh = C4::Context->dbh;
439 my $query="Select * from aqbooksellers where name like '%$searchstring%' or
440 id = '$searchstring'";
441 my $sth=$dbh->prepare($query);
445 while (my $data=$sth->fetchrow_hashref){
455 ($count, $results) = &breakdown($ordernumber);
457 Looks up an order by order ID, and returns its breakdown.
459 C<$count> is the number of elements in C<$results>. C<$results> is a
460 reference-to-array; its elements are references-to-hash, whose keys
461 are the fields of the aqorderbreakdown table in the Koha database.
465 # FIXME - This function appears in C4::Catalogue.
468 my $dbh = C4::Context->dbh;
469 my $query="Select * from aqorderbreakdown where ordernumber='$id'";
470 my $sth=$dbh->prepare($query);
474 while (my $data=$sth->fetchrow_hashref){
479 return($i,\@results);
484 ($count, @orders) = &basket($basketnumber, $booksellerID);
486 Looks up the pending (non-cancelled) orders with the given basket
487 number. If C<$booksellerID> is non-empty, only orders from that seller
490 C<&basket> returns a two-element array. C<@orders> is an array of
491 references-to-hash, whose keys are the fields from the aqorders,
492 biblio, and biblioitems tables in the Koha database. C<$count> is the
493 number of elements in C<@orders>.
497 # FIXME - Almost the same function (with less error-checking) appears in
500 my ($basketno,$supplier)=@_;
501 my $dbh = C4::Context->dbh;
502 my $query="Select *,biblio.title from aqorders,biblio,biblioitems
503 where basketno='$basketno'
504 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
505 =aqorders.biblioitemnumber
506 and (datecancellationprinted is NULL or datecancellationprinted =
508 if (defined $supplier && $supplier ne ''){
509 $query.=" and aqorders.booksellerid='$supplier'";
511 $query.=" group by aqorders.ordernumber";
512 my $sth=$dbh->prepare($query);
517 while (my $data=$sth->fetchrow_hashref){
527 $basket = &newbasket();
529 Finds the next unused basket number in the aqorders table of the Koha
530 database, and returns it.
534 # FIXME - There's a race condition here:
536 # B calls &newbasket (gets the same number as A)
537 # A updates the basket
538 # B updates the basket, and clobbers A's result.
539 # A better approach might be to create a dummy order (with, say,
540 # requisitionedby == "Dummy-$$" or notes == "dummy <time> <pid>"), and
541 # see which basket number it gets. Then have a cron job periodically
542 # remove out-of-date dummy orders.
543 # FIXME - This function appears in C4::Catalogue.pm
545 my $dbh = C4::Context->dbh;
546 my $query="Select max(basketno) from aqorders";
547 my $sth=$dbh->prepare($query);
549 my $data=$sth->fetchrow_arrayref;
550 my $basket=$$data[0];
558 ($count, @results) = &bookfunds();
560 Returns a list of all book funds started on Sep 1, 2001.
562 C<$count> is the number of elements in C<@results>. C<@results> is an
563 array of references-to-hash, whose keys are fields from the aqbookfund
564 and aqbudget tables of the Koha database. Results are ordered
565 alphabetically by book fund name.
569 # FIXME - An identical function (without the hardcoded date) appears in
572 my $dbh = C4::Context->dbh;
573 my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
575 and aqbudget.startdate='2001-07-01'
576 group by aqbookfund.bookfundid order by bookfundname";
577 my $sth=$dbh->prepare($query);
581 while (my $data=$sth->fetchrow_hashref){
591 ($count, @results) = &branches();
593 Returns a list of all library branches.
595 C<$count> is the number of elements in C<@results>. C<@results> is an
596 array of references-to-hash, whose keys are the fields of the branches
597 table of the Koha database.
601 # FIXME - This function (modulo whitespace) appears in C4::Catalogue
603 my $dbh = C4::Context->dbh;
604 my $query="Select * from branches";
605 my $sth=$dbh->prepare($query);
610 while (my $data = $sth->fetchrow_hashref){
616 return($i, @results);
619 # FIXME - POD. But I can't figure out what this function is doing
620 # FIXME - An almost identical function appears in C4::Catalogue
621 sub bookfundbreakdown {
623 my $dbh = C4::Context->dbh;
624 my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
625 from aqorders,aqorderbreakdown where bookfundid='$id' and
626 aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
627 '2001-07-01' and budgetdate <'2002-07-01') or
628 (datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
629 and (datecancellationprinted is NULL or
630 datecancellationprinted='0000-00-00')";
631 my $sth=$dbh->prepare($query);
635 while (my $data=$sth->fetchrow_hashref){
636 if ($data->{'subscription'} == 1){
637 $spent+=$data->{'quantity'}*$data->{'unitprice'};
639 my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
640 $comtd+=($data->{'ecost'})*$leftover;
641 $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
645 return($spent,$comtd);
648 # FIXME - This is in effect identical to &C4::Biblio::newbiblio.
649 # Pick one and stick with it.
653 my $dbh = C4::Context->dbh;
654 my $query = "Select max(biblionumber) from biblio";
655 my $sth = $dbh->prepare($query);
657 my $data = $sth->fetchrow_arrayref;
658 my $bibnum = $$data[0] + 1;
661 $biblio->{'title'} = $dbh->quote($biblio->{'title'});
662 $biblio->{'author'} = $dbh->quote($biblio->{'author'});
663 $biblio->{'copyright'} = $dbh->quote($biblio->{'copyright'});
664 $biblio->{'seriestitle'} = $dbh->quote($biblio->{'seriestitle'});
665 $biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
666 $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
667 if ($biblio->{'seriestitle'}) { $series = 1 };
673 SET biblionumber = $bibnum,
674 title = $biblio->{'title'},
675 author = $biblio->{'author'},
676 copyrightdate = $biblio->{'copyright'},
678 seriestitle = $biblio->{'seriestitle'},
679 notes = $biblio->{'notes'},
680 abstract = $biblio->{'abstract'}
686 # FIXME - This is in effect the same as &C4::Biblio::modbiblio.
687 # Pick one and stick with it.
691 my $dbh = C4::Context->dbh;
695 $biblio->{'title'} = $dbh->quote($biblio->{'title'});
696 $biblio->{'author'} = $dbh->quote($biblio->{'author'});
697 $biblio->{'abstract'} = $dbh->quote($biblio->{'abstract'});
698 $biblio->{'copyrightdate'} = $dbh->quote($biblio->{'copyrightdate'});
699 $biblio->{'seriestitle'} = $dbh->quote($biblio->{'serirestitle'});
700 $biblio->{'serial'} = $dbh->quote($biblio->{'serial'});
701 $biblio->{'unititle'} = $dbh->quote($biblio->{'unititle'});
702 $biblio->{'notes'} = $dbh->quote($biblio->{'notes'});
704 $query = "Update biblio set
705 title = $biblio->{'title'},
706 author = $biblio->{'author'},
707 abstract = $biblio->{'abstract'},
708 copyrightdate = $biblio->{'copyrightdate'},
709 seriestitle = $biblio->{'seriestitle'},
710 serial = $biblio->{'serial'},
711 unititle = $biblio->{'unititle'},
712 notes = $biblio->{'notes'}
713 where biblionumber = $biblio->{'biblionumber'}";
714 $sth = $dbh->prepare($query);
719 return($biblio->{'biblionumber'});
722 # FIXME - This is in effect identical to &C4::Biblio::modsubtitle.
723 # Pick one and stick with it.
726 my ($bibnum, $subtitle) = @_;
727 my $dbh = C4::Context->dbh;
728 my $query = "update bibliosubtitle set
729 subtitle = '$subtitle'
730 where biblionumber = $bibnum";
731 my $sth = $dbh->prepare($query);
738 # FIXME - This is functionally identical to &C4::Biblio::modaddauthor
739 # Pick one and stick with it.
741 my ($bibnum, $author) = @_;
742 my $dbh = C4::Context->dbh;
743 my $query = "Delete from additionalauthors where biblionumber = $bibnum";
744 my $sth = $dbh->prepare($query);
750 $query = "Insert into additionalauthors set
752 biblionumber = '$bibnum'";
753 $sth = $dbh->prepare($query);
761 # FIXME - This is in effect identical to &C4::Biblio::modsubject.
762 # Pick one and stick with it.
765 my ($bibnum, $force, @subject) = @_;
766 my $dbh = C4::Context->dbh;
767 my $count = @subject;
769 for (my $i = 0; $i < $count; $i++) {
770 $subject[$i] =~ s/^ //g;
771 $subject[$i] =~ s/ $//g;
772 my $query = "select * from catalogueentry
773 where entrytype = 's'
774 and catalogueentry = '$subject[$i]'";
775 my $sth = $dbh->prepare($query);
778 if (my $data = $sth->fetchrow_hashref) {
780 if ($force eq $subject[$i]) {
782 # subject not in aut, chosen to force anway
783 # so insert into cataloguentry so its in auth file
784 $query = "Insert into catalogueentry
785 (entrytype,catalogueentry)
786 values ('s','$subject[$i]')";
787 my $sth2 = $dbh->prepare($query);
794 $error = "$subject[$i]\n does not exist in the subject authority file";
795 $query = "Select * from catalogueentry
796 where entrytype = 's'
797 and (catalogueentry like '$subject[$i] %'
798 or catalogueentry like '% $subject[$i] %'
799 or catalogueentry like '% $subject[$i]')";
800 my $sth2 = $dbh->prepare($query);
803 while (my $data = $sth2->fetchrow_hashref) {
804 $error = $error."<br>$data->{'catalogueentry'}";
813 my $query = "Delete from bibliosubject where biblionumber = $bibnum";
814 my $sth = $dbh->prepare($query);
819 for (my $i = 0; $i < $count; $i++) {
820 $sth = $dbh->prepare("Insert into bibliosubject
821 values ('$subject[$i]', $bibnum)");
831 # FIXME - This is very similar to &C4::Biblio::modbibitem.
832 # Pick one and stick with it.
835 my ($biblioitem) = @_;
836 my $dbh = C4::Context->dbh;
839 # foreach my $field (qw( ... ))
841 # $biblioitem->{$field} = $dbh->quote($biblioitem->{$field});
843 $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
844 $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
845 $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
846 $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
847 $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
848 $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
849 $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
850 $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
851 $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
852 $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
853 $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'});
854 $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
855 $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
856 $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
860 SET itemtype = $biblioitem->{'itemtype'},
861 url = $biblioitem->{'url'},
862 isbn = $biblioitem->{'isbn'},
863 publishercode = $biblioitem->{'publishercode'},
864 publicationyear = $biblioitem->{'publicationyear'},
865 classification = $biblioitem->{'classification'},
866 dewey = $biblioitem->{'dewey'},
867 subclass = $biblioitem->{'subclass'},
868 illus = $biblioitem->{'illus'},
869 pages = $biblioitem->{'pages'},
870 volumeddesc = $biblioitem->{'volumeddesc'},
871 notes = $biblioitem->{'notes'},
872 size = $biblioitem->{'size'},
873 place = $biblioitem->{'place'}
874 WHERE biblioitemnumber = $biblioitem->{'biblioitemnumber'}
878 # FIXME - This is in effect identical to &C4::Biblio::modnote.
879 # Pick one and stick with it.
882 my ($bibitemnum,$note)=@_;
883 my $dbh = C4::Context->dbh;
888 WHERE biblioitemnumber = '$bibitemnum'
893 # FIXME - &C4::Biblio::newbiblioitem is quite similar to this
895 my ($biblioitem) = @_;
896 my $dbh = C4::Context->dbh;
897 my $query = "Select max(biblioitemnumber) from biblioitems";
898 my $sth = $dbh->prepare($query);
902 $biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'});
903 $biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'});
904 $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'});
905 $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'});
906 $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'});
907 $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'});
908 $biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'});
909 $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'});
910 $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'});
911 $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
912 $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'});
913 $biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'});
914 $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
915 $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'});
916 $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'});
917 $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'});
918 $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'});
919 $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'});
920 $biblioitem->{'lccn'} = $dbh->quote($biblioitem->{'lccn'});
921 $biblioitem->{'marc'} = $dbh->quote($biblioitem->{'marc'});
924 $data = $sth->fetchrow_arrayref;
925 $bibitemnum = $$data[0] + 1;
929 $query = "insert into biblioitems set
930 biblioitemnumber = $bibitemnum,
931 biblionumber = $biblioitem->{'biblionumber'},
932 volume = $biblioitem->{'volume'},
933 number = $biblioitem->{'number'},
934 classification = $biblioitem->{'classification'},
935 itemtype = $biblioitem->{'itemtype'},
936 url = $biblioitem->{'url'},
937 isbn = $biblioitem->{'isbn'},
938 issn = $biblioitem->{'issn'},
939 dewey = $biblioitem->{'dewey'},
940 subclass = $biblioitem->{'subclass'},
941 publicationyear = $biblioitem->{'publicationyear'},
942 publishercode = $biblioitem->{'publishercode'},
943 volumedate = $biblioitem->{'volumedate'},
944 volumeddesc = $biblioitem->{'volumeddesc'},
945 illus = $biblioitem->{'illus'},
946 pages = $biblioitem->{'pages'},
947 notes = $biblioitem->{'notes'},
948 size = $biblioitem->{'size'},
949 lccn = $biblioitem->{'lccn'},
950 marc = $biblioitem->{'marc'},
951 place = $biblioitem->{'place'}";
953 $sth = $dbh->prepare($query);
960 # FIXME - This is in effect identical to &C4::Biblio::newsubject.
961 # Pick one and stick with it.
965 my $dbh = C4::Context->dbh;
966 my $query="insert into bibliosubject (biblionumber) values
968 my $sth=$dbh->prepare($query);
975 # FIXME - This is in effect the same as &C4::Biblio::newsubtitle
976 # Pick one and stick with it.
978 my ($bibnum, $subtitle) = @_;
979 my $dbh = C4::Context->dbh;
980 $subtitle = $dbh->quote($subtitle);
981 my $query = "insert into bibliosubtitle set
982 biblionumber = $bibnum,
983 subtitle = $subtitle";
984 my $sth = $dbh->prepare($query);
993 &neworder($biblionumber, $title, $ordnum, $basket, $quantity, $listprice,
994 $booksellerid, $who, $notes, $bookfund, $biblioitemnumber, $rrp,
995 $ecost, $gst, $budget, $unitprice, $subscription,
996 $booksellerinvoicenumber);
998 Adds a new order to the database. Any argument that isn't described
999 below is the new value of the field with the same name in the aqorders
1000 table of the Koha database.
1002 C<$ordnum> is a "minimum order number." After adding the new entry to
1003 the aqorders table, C<&neworder> finds the first entry in aqorders
1004 with order number greater than or equal to C<$ordnum>, and adds an
1005 entry to the aqorderbreakdown table, with the order number just found,
1006 and the book fund ID of the newly-added order.
1008 C<$budget> is effectively ignored.
1010 C<$subscription> may be either "yes", or anything else for "no".
1014 # FIXME - This function appears in C4::Catalogue
1016 my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
1017 if ($budget eq 'now'){
1020 $budget="'2001-07-01'";
1027 my $dbh = C4::Context->dbh;
1028 my $query="insert into aqorders (biblionumber,title,basketno,
1029 quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
1030 biblioitemnumber,rrp,ecost,gst,unitprice,subscription,booksellerinvoicenumber)
1033 ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
1034 '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst','$cost',
1035 '$sub','$invoice')";
1036 my $sth=$dbh->prepare($query);
1040 $query="select * from aqorders where
1041 biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
1042 $sth=$dbh->prepare($query);
1044 my $data=$sth->fetchrow_hashref;
1046 $ordnum=$data->{'ordernumber'};
1047 $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
1048 ($ordnum,'$bookfund')";
1049 $sth=$dbh->prepare($query);
1057 &delorder($biblionumber, $ordernumber);
1059 Cancel the order with the given order and biblio numbers. It does not
1060 delete any entries in the aqorders table, it merely marks them as
1063 If there are no items remaining with the given biblionumber,
1064 C<&delorder> also deletes them from the marc_subfield_table and
1065 marc_biblio tables of the Koha database.
1069 # FIXME - This function appears in C4::Catalogue
1071 my ($bibnum,$ordnum)=@_;
1072 my $dbh = C4::Context->dbh;
1073 my $query="update aqorders set datecancellationprinted=now()
1074 where biblionumber='$bibnum' and
1075 ordernumber='$ordnum'";
1076 my $sth=$dbh->prepare($query);
1080 my $count=itemcount($bibnum);
1088 &modorder($title, $ordernumber, $quantity, $listprice,
1089 $biblionumber, $basketno, $supplier, $who, $notes,
1090 $bookfundid, $bibitemnum, $rrp, $ecost, $gst, $budget,
1091 $unitprice, $booksellerinvoicenumber);
1093 Modifies an existing order. Updates the order with order number
1094 C<$ordernumber> and biblionumber C<$biblionumber>. All other arguments
1095 update the fields with the same name in the aqorders table of the Koha
1098 Entries with order number C<$ordernumber> in the aqorderbreakdown
1099 table are also updated to the new book fund ID.
1103 # FIXME - This function appears in C4::Catalogue
1105 my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
1106 my $dbh = C4::Context->dbh;
1107 my $query="update aqorders set title='$title',
1108 quantity='$quantity',listprice='$listprice',basketno='$basketno',
1109 rrp='$rrp',ecost='$ecost',unitprice='$cost',
1110 booksellerinvoicenumber='$invoice'
1112 ordernumber=$ordnum and biblionumber=$bibnum";
1113 my $sth=$dbh->prepare($query);
1117 $query="update aqorderbreakdown set bookfundid=$bookfund where
1118 ordernumber=$ordnum";
1119 $sth=$dbh->prepare($query);
1127 $order = &newordernum();
1129 Finds the next unused order number in the aqorders table of the Koha
1130 database, and returns it.
1134 # FIXME - Race condition
1135 # FIXME - This function appears in C4::Catalogue
1137 my $dbh = C4::Context->dbh;
1138 my $query="Select max(ordernumber) from aqorders";
1139 my $sth=$dbh->prepare($query);
1141 my $data=$sth->fetchrow_arrayref;
1142 my $ordnum=$$data[0];
1150 &receiveorder($biblionumber, $ordernumber, $quantityreceived, $user,
1151 $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
1152 $freight, $bookfund, $rrp);
1154 Updates an order, to reflect the fact that it was received, at least
1155 in part. All arguments not mentioned below update the fields with the
1156 same name in the aqorders table of the Koha database.
1158 Updates the order with bibilionumber C<$biblionumber> and ordernumber
1161 Also updates the book fund ID in the aqorderbreakdown table.
1165 # FIXME - This function appears in C4::Catalogue
1167 my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
1168 my $dbh = C4::Context->dbh;
1169 my $query="update aqorders set quantityreceived='$quantrec',
1170 datereceived=now(),booksellerinvoicenumber='$invoiceno',
1171 biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
1173 where biblionumber=$biblio and ordernumber=$ordnum
1176 my $sth=$dbh->prepare($query);
1179 $query="update aqorderbreakdown set bookfundid=$bookfund where
1180 ordernumber=$ordnum";
1181 $sth=$dbh->prepare($query);
1187 =item updaterecorder
1189 &updaterecorder($biblionumber, $ordernumber, $user, $unitprice,
1192 Updates the order with biblionumber C<$biblionumber> and order number
1193 C<$ordernumber>. C<$bookfundid> is the new value for the book fund ID
1194 in the aqorderbreakdown table of the Koha database. All other
1195 arguments update the fields with the same name in the aqorders table.
1197 C<$user> is ignored.
1201 # FIXME - This function appears in C4::Catalogue
1203 my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
1204 my $dbh = C4::Context->dbh;
1205 my $query="update aqorders set
1206 unitprice='$cost', rrp='$rrp'
1207 where biblionumber=$biblio and ordernumber=$ordnum
1210 my $sth=$dbh->prepare($query);
1213 $query="update aqorderbreakdown set bookfundid=$bookfund where
1214 ordernumber=$ordnum";
1215 $sth=$dbh->prepare($query);
1223 $foreignprice = &curconvert($currency, $localprice);
1225 Converts the price C<$localprice> to foreign currency C<$currency> by
1226 dividing by the exchange rate, and returns the result.
1228 If no exchange rate is found, C<&curconvert> assumes the rate is one
1233 # FIXME - An almost identical version of this function appears in
1236 my ($currency,$price)=@_;
1237 my $dbh = C4::Context->dbh;
1238 my $query="Select rate from currency where currency='$currency'";
1239 my $sth=$dbh->prepare($query);
1241 my $data=$sth->fetchrow_hashref;
1243 my $cur=$data->{'rate'};
1247 $price=$price / $cur;
1253 ($count, $currencies) = &getcurrencies();
1255 Returns the list of all known currencies.
1257 C<$count> is the number of elements in C<$currencies>. C<$currencies>
1258 is a reference-to-array; its elements are references-to-hash, whose
1259 keys are the fields from the currency table in the Koha database.
1263 # FIXME - This function appears in C4::Catalogue
1265 my $dbh = C4::Context->dbh;
1266 my $query="Select * from currency";
1267 my $sth=$dbh->prepare($query);
1271 while (my $data=$sth->fetchrow_hashref){
1276 return($i,\@results);
1279 # FIXME - This function appears in C4::Catalogue. Neither one is used.
1282 my $dbh = C4::Context->dbh;
1283 my $query="Select * from currency where currency='$cur'";
1284 my $sth=$dbh->prepare($query);
1287 my $data=$sth->fetchrow_hashref;
1292 =item updatecurrencies
1294 &updatecurrencies($currency, $newrate);
1296 Sets the exchange rate for C<$currency> to be C<$newrate>.
1300 # FIXME - This function appears in C4::Catalogue
1301 sub updatecurrencies {
1302 my ($currency,$rate)=@_;
1303 my $dbh = C4::Context->dbh;
1304 my $query="update currency set rate=$rate where currency='$currency'";
1305 my $sth=$dbh->prepare($query);
1312 &updatesup($bookseller);
1314 Updates the information for a given bookseller. C<$bookseller> is a
1315 reference-to-hash whose keys are the fields of the aqbooksellers table
1316 in the Koha database. It must contain entries for all of the fields.
1317 The entry to modify is determined by C<$bookseller-E<gt>{id}>.
1319 The easiest way to get all of the necessary fields is to look up a
1320 book seller with C<&booksellers>, modify what's necessary, then call
1321 C<&updatesup> with the result.
1325 # FIXME - This function appears in C4::Catalogue
1328 my $dbh = C4::Context->dbh;
1329 my $query="Update aqbooksellers set
1330 name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
1331 address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
1332 phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
1333 contact='$data->{'contact'}',contpos='$data->{'contpos'}',
1334 contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
1335 '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
1336 '$data->{'contnotes'}', active=$data->{'active'},
1337 listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
1338 gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
1339 invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
1340 discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
1341 nocalc='$data->{'nocalc'}'
1342 where id='$data->{'id'}'";
1343 my $sth=$dbh->prepare($query);
1352 my $dbh = C4::Context->dbh;
1353 my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
1355 my $data2=$sth->fetchrow_hashref;
1357 $data2->{'max(id)'}++;
1358 $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
1361 $data->{'id'}=$data2->{'max(id)'};
1363 return($data->{'id'});
1368 $id = &insertsup($bookseller);
1370 Creates a new bookseller. C<$bookseller> is a reference-to-hash whose
1371 keys are the fields of the aqbooksellers table in the Koha database.
1372 All fields must be present.
1374 Returns the ID of the newly-created bookseller.
1378 # FIXME - This function appears in C4::Catalogue
1379 # FIXME - This is different from &C4::Biblio::newitems, though both
1382 my ($item, @barcodes) = @_;
1383 my $dbh = C4::Context->dbh;
1384 my $query = "Select max(itemnumber) from items";
1385 my $sth = $dbh->prepare($query);
1391 $data = $sth->fetchrow_hashref;
1392 $itemnumber = $data->{'max(itemnumber)'} + 1;
1395 $item->{'booksellerid'} = $dbh->quote($item->{'booksellerid'});
1396 $item->{'homebranch'} = $dbh->quote($item->{'homebranch'});
1397 $item->{'price'} = $dbh->quote($item->{'price'});
1398 $item->{'replacementprice'} = $dbh->quote($item->{'replacementprice'});
1399 $item->{'itemnotes'} = $dbh->quote($item->{'itemnotes'});
1401 foreach my $barcode (@barcodes) {
1402 $barcode = uc($barcode);
1403 $barcode = $dbh->quote($barcode);
1404 $query = "Insert into items set
1405 itemnumber = $itemnumber,
1406 biblionumber = $item->{'biblionumber'},
1407 biblioitemnumber = $item->{'biblioitemnumber'},
1409 booksellerid = $item->{'booksellerid'},
1410 dateaccessioned = NOW(),
1411 homebranch = $item->{'homebranch'},
1412 holdingbranch = $item->{'homebranch'},
1413 price = $item->{'price'},
1414 replacementprice = $item->{'replacementprice'},
1415 replacementpricedate = NOW(),
1416 itemnotes = $item->{'itemnotes'}";
1418 if ($item->{'loan'}) {
1420 notforloan = $item->{'loan'}";
1423 $sth = $dbh->prepare($query);
1426 $error .= $sth->errstr;
1435 # FIXME - This is the same as &C4::Biblio::Checkitems.
1436 # Pick one and stick with it.
1439 my ($count,@barcodes)=@_;
1440 my $dbh = C4::Context->dbh;
1442 for (my $i=0;$i<$count;$i++){
1443 $barcodes[$i]=uc $barcodes[$i];
1444 my $query="Select * from items where barcode='$barcodes[$i]'";
1445 my $sth=$dbh->prepare($query);
1447 if (my $data=$sth->fetchrow_hashref){
1448 $error.=" Duplicate Barcode: $barcodes[$i]";
1455 # FIXME - This appears to be functionally equivalent to
1456 # &C4::Biblio::moditem.
1457 # Pick one and stick with it.
1460 my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
1461 my $dbh = C4::Context->dbh;
1462 my $query="update items set biblioitemnumber=$bibitemnum,
1463 barcode='$barcode',itemnotes='$notes'
1464 where itemnumber=$itemnum";
1465 if ($barcode eq ''){
1466 $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
1469 $query="update items set biblioitemnumber=$bibitemnum,
1470 barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
1471 itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
1473 if ($replacement ne ''){
1474 $query=~ s/ where/,replacementprice='$replacement' where/;
1477 my $sth=$dbh->prepare($query);
1482 # FIXME - This function appears in C4::Catalogue. Neither one is used
1484 my($price,$rrp,$itemnum)=@_;
1485 my $dbh = C4::Context->dbh;
1486 my $query="update items set price='$price',replacementprice='$rrp'
1487 where itemnumber=$itemnum";
1488 my $sth=$dbh->prepare($query);
1493 # FIXME - This is identical to &C4::Biblio::countitems.
1494 # Pick one and stick with it.
1497 my ($bibitemnum)=@_;
1498 my $dbh = C4::Context->dbh;
1499 my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
1500 my $sth=$dbh->prepare($query);
1502 my $data=$sth->fetchrow_hashref;
1504 return($data->{'count(*)'});
1507 # FIXME - This function appears in C4::Catalogue. Neither one is used.
1509 my ($biblionumber)=@_;
1510 my $dbh = C4::Context->dbh;
1511 my $query="Select * from biblioitems,items,itemtypes where
1512 biblioitems.biblionumber=$biblionumber
1513 and biblioitems.biblioitemnumber=items.biblioitemnumber and
1514 itemtypes.itemtype=biblioitems.itemtype
1515 order by items.biblioitemnumber";
1516 my $sth=$dbh->prepare($query);
1520 while (my $data=$sth->fetchrow_hashref){
1528 # FIXME - This function appears in C4::Catalogue. Neither one is used
1530 my ($bibitemnum,$itemtype)=@_;
1531 my $dbh = C4::Context->dbh;
1532 my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
1533 and itemtype='$itemtype'";
1534 my $sth=$dbh->prepare($query);
1537 if (my $data=$sth->fetchrow_hashref){
1544 # FIXME - A nearly-identical function, appears in C4::Biblio
1545 # Pick one and stick with it.
1549 my $dbh = C4::Context->dbh;
1550 my $query="select * from items where itemnumber=$itemnum";
1551 my $sth=$dbh->prepare($query);
1553 my @data=$sth->fetchrow_array;
1555 $query="Insert into deleteditems values (";
1556 foreach my $temp (@data){
1557 $query=$query."'$temp',";
1561 $sth=$dbh->prepare($query);
1564 $query = "Delete from items where itemnumber=$itemnum";
1565 $sth=$dbh->prepare($query);
1570 # FIXME - This is functionally identical to &C4::Biblio::deletebiblioitem.
1571 # Pick one and stick with it.
1573 sub deletebiblioitem {
1574 my ($biblioitemnumber) = @_;
1575 my $dbh = C4::Context->dbh;
1576 my $query = "Select * from biblioitems
1577 where biblioitemnumber = $biblioitemnumber";
1578 my $sth = $dbh->prepare($query);
1583 if (@results = $sth->fetchrow_array) {
1585 $query = "Insert into deletedbiblioitems values (";
1586 foreach my $value (@results) {
1587 $value = $dbh->quote($value);
1588 $query .= "$value,";
1591 $query =~ s/\,$/\)/;
1595 DELETE FROM biblioitems
1596 WHERE biblioitemnumber = $biblioitemnumber
1602 # Now delete all the items attached to the biblioitem
1604 $query = "Select * from items where biblioitemnumber = $biblioitemnumber";
1605 $sth = $dbh->prepare($query);
1609 while (@results = $sth->fetchrow_array) {
1611 $query = "Insert into deleteditems values (";
1612 foreach my $value (@results) {
1613 $value = $dbh->quote($value);
1614 $query .= "$value,";
1617 $query =~ s/\,$/\)/;
1621 $sth->finish; # FIXME - This is bogus, isn't it?
1625 WHERE biblioitemnumber = $biblioitemnumber
1628 } # sub deletebiblioitem
1630 # FIXME - This is functionally identical to &C4::Biblio::delbiblio.
1631 # Pick one and stick with it.
1635 my $dbh = C4::Context->dbh;
1636 my $query="select * from biblio where biblionumber=$biblio";
1637 my $sth=$dbh->prepare($query);
1639 if (my @data=$sth->fetchrow_array){
1641 $query="Insert into deletedbiblio values (";
1642 foreach my $temp (@data){
1643 $temp=~ s/\'/\\\'/g;
1644 $query=$query."'$temp',";
1648 $sth=$dbh->prepare($query);
1651 $query = "Delete from biblio where biblionumber=$biblio";
1652 $sth=$dbh->prepare($query);
1662 my $dbh = C4::Context->dbh;
1663 my $query = "select * from itemtypes";
1664 my $sth = $dbh->prepare($query);
1665 # || die "Cannot prepare $query" . $dbh->errstr;
1670 # || die "Cannot execute $query\n" . $sth->errstr;
1671 while (my $data = $sth->fetchrow_hashref) {
1672 $results[$count] = $data;
1677 return($count, @results);
1678 } # sub getitemtypes
1680 # FIXME - This is identical to &C4::Biblio::getitemtypes.
1681 # Pick one and stick with it.
1684 my ($biblionumber) = @_;
1685 my $dbh = C4::Context->dbh;
1686 my $query = "Select * from biblio where biblionumber = $biblionumber";
1687 my $sth = $dbh->prepare($query);
1688 # || die "Cannot prepare $query\n" . $dbh->errstr;
1693 # || die "Cannot execute $query\n" . $sth->errstr;
1694 while (my $data = $sth->fetchrow_hashref) {
1695 $results[$count] = $data;
1700 return($count, @results);
1705 my ($biblioitemnum) = @_;
1706 my $dbh = C4::Context->dbh;
1707 my $query = "Select * from biblioitems where
1708 biblioitemnumber = $biblioitemnum";
1709 my $sth = $dbh->prepare($query);
1715 while (my $data = $sth->fetchrow_hashref) {
1716 $results[$count] = $data;
1721 return($count, @results);
1722 } # sub getbiblioitem
1724 # FIXME - This is identical to &C4::Biblio::getbiblioitem.
1725 # Pick one and stick with it.
1727 sub getbiblioitembybiblionumber {
1728 my ($biblionumber) = @_;
1729 my $dbh = C4::Context->dbh;
1730 my $query = "Select * from biblioitems where biblionumber =
1732 my $sth = $dbh->prepare($query);
1738 while (my $data = $sth->fetchrow_hashref) {
1739 $results[$count] = $data;
1744 return($count, @results);
1747 # FIXME - This is identical to
1748 # &C4::Biblio::getbiblioitembybiblionumber.
1749 # Pick one and stick with it.
1751 sub getitemsbybiblioitem {
1752 my ($biblioitemnum) = @_;
1753 my $dbh = C4::Context->dbh;
1754 my $query = "Select * from items, biblio where
1755 biblio.biblionumber = items.biblionumber and biblioitemnumber
1757 my $sth = $dbh->prepare($query);
1758 # || die "Cannot prepare $query\n" . $dbh->errstr;
1763 # || die "Cannot execute $query\n" . $sth->errstr;
1764 while (my $data = $sth->fetchrow_hashref) {
1765 $results[$count] = $data;
1770 return($count, @results);
1771 } # sub getitemsbybiblioitem
1773 # FIXME - This is identical to &C4::Biblio::isbnsearch.
1774 # Pick one and stick with it.
1778 my $dbh = C4::Context->dbh;
1784 $isbn = $dbh->quote($isbn);
1785 $query = "Select biblio.* from biblio, biblioitems where
1786 biblio.biblionumber = biblioitems.biblionumber
1788 $sth = $dbh->prepare($query);
1791 while (my $data = $sth->fetchrow_hashref) {
1792 $results[$count] = $data;
1797 return($count, @results);
1802 ($count, @results) = &websitesearch($keywordlist);
1804 Looks up biblioitems by URL.
1806 C<$keywordlist> is a space-separated list of search terms.
1807 C<&websitesearch> returns those biblioitems whose URL contains at
1808 least one of the search terms.
1810 C<$count> is the number of elements in C<@results>. C<@results> is an
1811 array of references-to-hash, whose keys are the fields of the biblio
1812 and biblioitems tables in the Koha database.
1816 # FIXME - This function appears in C4::Catalogue
1818 my ($keywordlist) = @_;
1819 my $dbh = C4::Context->dbh;
1820 my $query = "Select distinct biblio.* from biblio, biblioitems where
1821 biblio.biblionumber = biblioitems.biblionumber and (";
1825 my @keywords = split(/ +/, $keywordlist);
1826 my $keyword = shift(@keywords);
1828 $keyword =~ s/%/\\%/g;
1829 $keyword =~ s/_/\\_/;
1830 $keyword = "%" . $keyword . "%";
1831 $keyword = $dbh->quote($keyword);
1832 $query .= " (url like $keyword)";
1834 foreach $keyword (@keywords) {
1835 $keyword =~ s/%/\\%/;
1836 $keyword =~ s/_/\\_/;
1837 $keyword = "%" . $keyword . "%";
1838 $keyword = $dbh->quote($keyword);
1839 $query .= " or (url like $keyword)";
1843 $sth = $dbh->prepare($query);
1846 while (my $data = $sth->fetchrow_hashref) {
1847 $results[$count] = $data;
1852 return($count, @results);
1853 } # sub websitesearch
1857 &addwebsite($website);
1859 Adds a new web site. C<$website> is a reference-to-hash, with the keys
1860 C<biblionumber>, C<title>, C<description>, and C<url>. All of these
1865 # FIXME - This function appears in C4::Catalogue
1868 my $dbh = C4::Context->dbh;
1870 $website->{'biblionumber'} = $dbh->quote($website->{'biblionumber'});
1871 $website->{'title'} = $dbh->quote($website->{'title'});
1872 $website->{'description'} = $dbh->quote($website->{'description'});
1873 $website->{'url'} = $dbh->quote($website->{'url'});
1876 INSERT INTO websites
1877 SET biblionumber = $website->{'biblionumber'},
1878 title = $website->{'title'},
1879 description = $website->{'description'},
1880 url = $website->{'url'}
1886 &updatewebsite($website);
1888 Updates an existing web site. C<$website> is a reference-to-hash with
1889 the keys C<websitenumber>, C<title>, C<description>, and C<url>. All
1890 of these are mandatory. C<$website-E<gt>{websitenumber}> identifies
1891 the entry to update.
1895 # FIXME - This function appears in C4::Catalogue
1898 my $dbh = C4::Context->dbh;
1900 $website->{'title'} = $dbh->quote($website->{'title'});
1901 $website->{'description'} = $dbh->quote($website->{'description'});
1902 $website->{'url'} = $dbh->quote($website->{'url'});
1906 SET title = $website->{'title'},
1907 description = $website->{'description'},
1908 url = $website->{'url'}
1909 where websitenumber = $website->{'websitenumber'}
1911 } # sub updatewebsite
1915 &deletewebsite($websitenumber);
1917 Deletes the web site with number C<$websitenumber>.
1921 # FIXME - This function appears in C4::Catalogue
1923 my ($websitenumber) = @_;
1924 my $dbh = C4::Context->dbh;
1927 DELETE FROM websites
1928 WHERE websitenumber = $websitenumber
1930 } # sub deletewebsite
1933 END { } # module clean-up code here (global destructor)
1942 Koha Developement team <info@koha.org>