1 package C4::Catalogue; #assumes C4/Acquisitions.pm
3 # Continue working on updateItem!!!!!!
5 # updateItem is looking not bad. Need to add addSubfield and deleteSubfield
8 # Trying to track down $dbh's that aren't disconnected....
13 # Copyright 2000-2002 Katipo Communications
15 # This file is part of Koha.
17 # Koha is free software; you can redistribute it and/or modify it under the
18 # terms of the GNU General Public License as published by the Free Software
19 # Foundation; either version 2 of the License, or (at your option) any later
22 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
23 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
24 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
26 # You should have received a copy of the GNU General Public License along with
27 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
28 # Suite 330, Boston, MA 02111-1307 USA
36 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
38 # set the version for version checking
63 &getorders &getallorders &getrecorders
64 &getorder &neworder &delorder
66 &modorder &getsingleorder &invoice &receiveorder
67 &updaterecorder &newordernum
69 &bookfunds &bookfundbreakdown &updatecost
70 &curconvert &getcurrencies &updatecurrencies &getcurrency
72 &findall &needsmod &branches &updatesup &insertsup
73 &bookseller &breakdown &checkitems
74 &websitesearch &addwebsite &updatewebsite &deletewebsite
76 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
78 # your exported package globals go here,
79 # as well as any optionally exported functions
81 @EXPORT_OK = qw($Var1 %Hashit); # FIXME - Unused
84 # non-exported package globals go here
85 use vars qw(@more $stuff); # FIXME - Unused
87 # initalize package globals, first exported ones
93 # then the others (which are still accessible as $Some::Module::stuff)
98 # all file-scoped lexicals must be created before
99 # the functions below that use them.
101 # file-private lexicals go here
104 my %secret_hash = ();
106 # here's a file-private function as a closure,
107 # callable as &$priv_func; it cannot be prototyped.
109 my $priv_func = sub {
113 # make all your functions, whether exported or not;
125 ($count, @orders) = &basket($basketnumber, $booksellerID);
127 Looks up the pending (non-cancelled) orders with the given basket
128 number. If C<$booksellerID> is non-empty, only orders from that seller
131 C<&basket> returns a two-element array. C<@orders> is an array of
132 references-to-hash, whose keys are the fields from the aqorders,
133 biblio, and biblioitems tables in the Koha database. C<$count> is the
134 number of elements in C<@orders>.
139 my ($basketno,$supplier)=@_;
141 my $query="Select *,biblio.title from aqorders,biblio,biblioitems
142 where basketno='$basketno'
143 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
144 =aqorders.biblioitemnumber
145 and (datecancellationprinted is NULL or datecancellationprinted =
147 if ($supplier ne ''){
148 $query.=" and aqorders.booksellerid='$supplier'";
150 $query.=" group by aqorders.ordernumber";
151 my $sth=$dbh->prepare($query);
156 while (my $data=$sth->fetchrow_hashref){
167 $basket = &newbasket();
169 Finds the next unused basket number in the aqorders table of the Koha
170 database, and returns it.
174 # FIXME - There's a race condition here:
176 # B calls &newbasket (gets the same number as A)
177 # A updates the basket
178 # B updates the basket, and clobbers A's result.
179 # A better approach might be to create a dummy order (with, say,
180 # requisitionedby == "Dummy-$$" or notes == "dummy <time> <pid>"), and
181 # see which basket number it gets. Then have a cron job periodically
182 # remove out-of-date dummy orders.
185 my $query="Select max(basketno) from aqorders";
186 my $sth=$dbh->prepare($query);
188 my $data=$sth->fetchrow_arrayref;
189 my $basket=$$data[0];
198 &neworder($biblionumber, $title, $ordnum, $basket, $quantity, $listprice,
199 $booksellerid, $who, $notes, $bookfund, $biblioitemnumber, $rrp,
200 $ecost, $gst, $budget, $unitprice, $subscription,
201 $booksellerinvoicenumber);
203 Adds a new order to the database. Any argument that isn't described
204 below is the new value of the field with the same name in the aqorders
205 table of the Koha database.
207 C<$ordnum> is a "minimum order number." After adding the new entry to
208 the aqorders table, C<&neworder> finds the first entry in aqorders
209 with order number greater than or equal to C<$ordnum>, and adds an
210 entry to the aqorderbreakdown table, with the order number just found,
211 and the book fund ID of the newly-added order.
213 C<$budget> is effectively ignored.
215 C<$subscription> may be either "yes", or anything else for "no".
220 my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
221 if ($budget eq 'now'){
224 $budget="'2001-07-01'";
232 my $query="insert into aqorders (biblionumber,title,basketno,
233 quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
234 biblioitemnumber,rrp,ecost,gst,unitprice,subscription,booksellerinvoicenumber)
237 ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
238 '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst','$cost',
240 my $sth=$dbh->prepare($query);
244 $query="select * from aqorders where
245 biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
246 $sth=$dbh->prepare($query);
248 my $data=$sth->fetchrow_hashref;
250 $ordnum=$data->{'ordernumber'};
251 $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
252 ($ordnum,'$bookfund')";
253 $sth=$dbh->prepare($query);
262 &delorder($biblionumber, $ordernumber);
264 Cancel the order with the given order and biblio numbers. It does not
265 delete any entries in the aqorders table, it merely marks them as
268 If there are no items remaining with the given biblionumber,
269 C<&delorder> also deletes them from the marc_subfield_table and
270 marc_biblio tables of the Koha database.
275 my ($bibnum,$ordnum)=@_;
277 my $query="update aqorders set datecancellationprinted=now()
278 where biblionumber='$bibnum' and
279 ordernumber='$ordnum'";
280 my $sth=$dbh->prepare($query);
284 my $count=itemcount($bibnum);
286 delbiblio($bibnum); # This is C4::Biblio::delbiblio, not
287 # C4::Acquisitions::delbiblio
294 &modorder($title, $ordernumber, $quantity, $listprice,
295 $biblionumber, $basketno, $supplier, $who, $notes,
296 $bookfundid, $bibitemnum, $rrp, $ecost, $gst, $budget,
297 $unitprice, $booksellerinvoicenumber);
299 Modifies an existing order. Updates the order with order number
300 C<$ordernumber> and biblionumber C<$biblionumber>. All other arguments
301 update the fields with the same name in the aqorders table of the Koha
304 Entries with order number C<$ordernumber> in the aqorderbreakdown
305 table are also updated to the new book fund ID.
310 my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
312 my $query="update aqorders set title='$title',
313 quantity='$quantity',listprice='$listprice',basketno='$basketno',
314 rrp='$rrp',ecost='$ecost',unitprice='$cost',
315 booksellerinvoicenumber='$invoice'
317 ordernumber=$ordnum and biblionumber=$bibnum";
318 my $sth=$dbh->prepare($query);
322 $query="update aqorderbreakdown set bookfundid=$bookfund where
323 ordernumber=$ordnum";
324 $sth=$dbh->prepare($query);
333 $order = &newordernum();
335 Finds the next unused order number in the aqorders table of the Koha
336 database, and returns it.
340 # FIXME - Race condition
343 my $query="Select max(ordernumber) from aqorders";
344 my $sth=$dbh->prepare($query);
346 my $data=$sth->fetchrow_arrayref;
347 my $ordnum=$$data[0];
356 &receiveorder($biblionumber, $ordernumber, $quantityreceived, $user,
357 $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
358 $freight, $bookfund, $rrp);
360 Updates an order, to reflect the fact that it was received, at least
361 in part. All arguments not mentioned below update the fields with the
362 same name in the aqorders table of the Koha database.
364 Updates the order with bibilionumber C<$biblionumber> and ordernumber
367 Also updates the book fund ID in the aqorderbreakdown table.
372 my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
374 my $query="update aqorders set quantityreceived='$quantrec',
375 datereceived=now(),booksellerinvoicenumber='$invoiceno',
376 biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
378 where biblionumber=$biblio and ordernumber=$ordnum
381 my $sth=$dbh->prepare($query);
384 $query="update aqorderbreakdown set bookfundid=$bookfund where
385 ordernumber=$ordnum";
386 $sth=$dbh->prepare($query);
395 &updaterecorder($biblionumber, $ordernumber, $user, $unitprice,
398 Updates the order with biblionumber C<$biblionumber> and order number
399 C<$ordernumber>. C<$bookfundid> is the new value for the book fund ID
400 in the aqorderbreakdown table of the Koha database. All other
401 arguments update the fields with the same name in the aqorders table.
408 my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
410 my $query="update aqorders set
411 unitprice='$cost', rrp='$rrp'
412 where biblionumber=$biblio and ordernumber=$ordnum
415 my $sth=$dbh->prepare($query);
418 $query="update aqorderbreakdown set bookfundid=$bookfund where
419 ordernumber=$ordnum";
420 $sth=$dbh->prepare($query);
435 ($count, $orders) = &getorders($booksellerid);
437 Finds pending orders from the bookseller with the given ID. Ignores
438 completed and cancelled orders.
440 C<$count> is the number of elements in C<@{$orders}>.
442 C<$orders> is a reference-to-array; each element is a
443 reference-to-hash with the following fields:
449 Gives the number of orders in with this basket number.
451 =item C<authorizedby>
457 These give the value of the corresponding field in the aqorders table
458 of the Koha database.
462 Results are ordered from most to least recent.
469 my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where
470 booksellerid='$supplierid' and (quantity > quantityreceived or
471 quantityreceived is NULL)
472 and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
473 $query.=" group by basketno order by entrydate desc";
475 my $sth=$dbh->prepare($query);
479 while (my $data=$sth->fetchrow_hashref){
485 return ($i,\@results);
490 ($order, $ordernumber) = &getorder($biblioitemnumber, $biblionumber);
492 Looks up the order with the given biblionumber and biblioitemnumber.
494 Returns a two-element array. C<$ordernumber> is the order number.
495 C<$order> is a reference-to-hash describing the order; its keys are
496 fields from the biblio, biblioitems, aqorders, and aqorderbreakdown
497 tables of the Koha database.
504 my $query="Select ordernumber from aqorders where biblionumber=$bib and
505 biblioitemnumber='$bi'";
506 my $sth=$dbh->prepare($query);
508 # FIXME - Use fetchrow_array(), since we're only interested in the one
510 my $ordnum=$sth->fetchrow_hashref;
512 my $order=getsingleorder($ordnum->{'ordernumber'});
515 return ($order,$ordnum->{'ordernumber'});
520 $order = &getsingleorder($ordernumber);
522 Looks up an order by order number.
524 Returns a reference-to-hash describing the order. The keys of
525 C<$order> are fields from the biblio, biblioitems, aqorders, and
526 aqorderbreakdown tables of the Koha database.
530 # FIXME - This is basically the same thing as
531 # C4::Acquisitions::getsingleorder. Figure out where it goes and nuke
536 my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown
537 where aqorders.ordernumber='$ordnum'
538 and biblio.biblionumber=aqorders.biblionumber and
539 biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
540 aqorders.ordernumber=aqorderbreakdown.ordernumber";
541 my $sth=$dbh->prepare($query);
543 my $data=$sth->fetchrow_hashref;
551 ($count, @results) = &getallorders($booksellerid);
553 Looks up all of the pending orders from the supplier with the given
554 bookseller ID. Ignores cancelled and completed orders.
556 C<$count> is the number of elements in C<@results>. C<@results> is an
557 array of references-to-hash. The keys of each element are fields from
558 the aqorders, biblio, and biblioitems tables of the Koha database.
560 C<@results> is sorted alphabetically by book title.
565 #gets all orders from a certain supplier, orders them alphabetically
568 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
569 and (cancelledby is NULL or cancelledby = '')
570 and (quantityreceived < quantity or quantityreceived is NULL)
571 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
572 aqorders.biblioitemnumber
573 group by aqorders.biblioitemnumber
578 my $sth=$dbh->prepare($query);
580 while (my $data=$sth->fetchrow_hashref){
591 #gets all orders from a certain supplier, orders them alphabetically
594 my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
595 and (cancelledby is NULL or cancelledby = '')
596 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
597 aqorders.biblioitemnumber and
598 aqorders.quantityreceived>0
599 and aqorders.datereceived >=now()
600 group by aqorders.biblioitemnumber
605 my $sth=$dbh->prepare($query);
607 while (my $data=$sth->fetchrow_hashref){
618 ($count, @results) = &ordersearch($search, $biblionumber, $complete);
622 C<$search> may take one of several forms: if it is an ISBN,
623 C<&ordersearch> returns orders with that ISBN. If C<$search> is an
624 order number, C<&ordersearch> returns orders with that order number
625 and biblionumber C<$biblionumber>. Otherwise, C<$search> is considered
626 to be a space-separated list of search terms; in this case, all of the
627 terms must appear in the title (matching the beginning of title
630 If C<$complete> is C<yes>, the results will include only completed
631 orders. In any case, C<&ordersearch> ignores cancelled orders.
633 C<&ordersearch> returns an array. C<$count> is the number of elements
634 in C<@results>. C<@results> is an array of references-to-hash with the
652 my ($search,$biblio,$catview) = @_;
654 my $query = "Select *,biblio.title from aqorders,biblioitems,biblio
655 where aqorders.biblioitemnumber = biblioitems.biblioitemnumber
656 and biblio.biblionumber=aqorders.biblionumber
657 and ((datecancellationprinted is NULL)
658 or (datecancellationprinted = '0000-00-00'))
660 my @data = split(' ',$search);
662 for (my $i = 0; $i < $count; $i++) {
663 $query .= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
666 # FIXME - Redo this properly instead of hacking off the
668 $query.=" ) or biblioitems.isbn='$search'
669 or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
670 if ($catview ne 'yes'){
671 $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
673 $query.=" group by aqorders.ordernumber";
674 my $sth=$dbh->prepare($query);
678 while (my $data=$sth->fetchrow_hashref){
679 my $sth2=$dbh->prepare("Select * from biblio where
680 biblionumber='$data->{'biblionumber'}'");
682 my $data2=$sth2->fetchrow_hashref;
684 $data->{'author'}=$data2->{'author'};
685 $data->{'seriestitle'}=$data2->{'seriestitle'};
686 $sth2=$dbh->prepare("Select * from aqorderbreakdown where
687 ordernumber=$data->{'ordernumber'}");
689 $data2=$sth2->fetchrow_hashref;
691 $data->{'branchcode'}=$data2->{'branchcode'};
692 $data->{'bookfundid'}=$data2->{'bookfundid'};
708 ($count, @results) = &invoice($booksellerinvoicenumber);
710 Looks up orders by invoice number.
712 Returns an array. C<$count> is the number of elements in C<@results>.
713 C<@results> is an array of references-to-hash; the keys of each
714 elements are fields from the aqorders, biblio, and biblioitems tables
715 of the Koha database.
722 my $query="Select * from aqorders,biblio,biblioitems where
723 booksellerinvoicenumber='$invoice'
724 and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
725 aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
728 my $sth=$dbh->prepare($query);
730 while (my $data=$sth->fetchrow_hashref){
741 ($count, @results) = &bookfunds();
743 Returns a list of all book funds.
745 C<$count> is the number of elements in C<@results>. C<@results> is an
746 array of references-to-hash, whose keys are fields from the aqbookfund
747 and aqbudget tables of the Koha database. Results are ordered
748 alphabetically by book fund name.
754 my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
756 group by aqbookfund.bookfundid order by bookfundname";
757 my $sth=$dbh->prepare($query);
761 while (my $data=$sth->fetchrow_hashref){
770 # FIXME - POD. I can't figure out what this function is doing. Then
771 # again, I don't think it's being used (anymore).
772 sub bookfundbreakdown {
775 my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
776 from aqorders,aqorderbreakdown where bookfundid='$id' and
777 aqorders.ordernumber=aqorderbreakdown.ordernumber
778 and (datecancellationprinted is NULL or
779 datecancellationprinted='0000-00-00')";
780 my $sth=$dbh->prepare($query);
784 while (my $data=$sth->fetchrow_hashref){
785 if ($data->{'subscription'} == 1){
786 $spent+=$data->{'quantity'}*$data->{'unitprice'};
788 my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
789 $comtd+=($data->{'ecost'})*$leftover;
790 $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
795 return($spent,$comtd);
800 $foreignprice = &curconvert($currency, $localprice);
802 Converts the price C<$localprice> to foreign currency C<$currency> by
803 dividing by the exchange rate, and returns the result.
805 If no exchange rate is found, C<&curconvert> assumes the rate is one
811 my ($currency,$price)=@_;
813 my $query="Select rate from currency where currency='$currency'";
814 my $sth=$dbh->prepare($query);
816 my $data=$sth->fetchrow_hashref;
819 my $cur=$data->{'rate'};
823 my $price=$price / $cur;
829 ($count, $currencies) = &getcurrencies();
831 Returns the list of all known currencies.
833 C<$count> is the number of elements in C<$currencies>. C<$currencies>
834 is a reference-to-array; its elements are references-to-hash, whose
835 keys are the fields from the currency table in the Koha database.
841 my $query="Select * from currency";
842 my $sth=$dbh->prepare($query);
846 while (my $data=$sth->fetchrow_hashref){
852 return($i,\@results);
859 my $query="Select * from currency where currency='$cur'";
860 my $sth=$dbh->prepare($query);
863 my $data=$sth->fetchrow_hashref;
869 =item updatecurrencies
871 &updatecurrencies($currency, $newrate);
873 Sets the exchange rate for C<$currency> to be C<$newrate>.
877 sub updatecurrencies {
878 my ($currency,$rate)=@_;
880 my $query="update currency set rate=$rate where currency='$currency'";
881 my $sth=$dbh->prepare($query);
889 my($price,$rrp,$itemnum)=@_;
891 my $query="update items set price='$price',replacementprice='$rrp'
892 where itemnumber=$itemnum";
893 my $sth=$dbh->prepare($query);
907 ($count, @results) = &bookseller($searchstring);
909 Looks up a book seller. C<$searchstring> may be either a book seller
910 ID, or a string to look for in the book seller's name.
912 C<$count> is the number of elements in C<@results>. C<@results> is an
913 array of references-to-hash, whose keys are the fields of of the
914 aqbooksellers table in the Koha database.
919 my ($searchstring)=@_;
921 my $query="Select * from aqbooksellers where name like '%$searchstring%' or
922 id = '$searchstring'";
923 my $sth=$dbh->prepare($query);
927 while (my $data=$sth->fetchrow_hashref){
938 ($count, $results) = &breakdown($ordernumber);
940 Looks up an order by order ID, and returns its breakdown.
942 C<$count> is the number of elements in C<$results>. C<$results> is a
943 reference-to-array; its elements are references-to-hash, whose keys
944 are the fields of the aqorderbreakdown table in the Koha database.
951 my $query="Select * from aqorderbreakdown where ordernumber='$id'";
952 my $sth=$dbh->prepare($query);
956 while (my $data=$sth->fetchrow_hashref){
962 return($i,\@results);
967 ($count, @results) = &branches();
969 Returns a list of all library branches.
971 C<$count> is the number of elements in C<@results>. C<@results> is an
972 array of references-to-hash, whose keys are the fields of the branches
973 table of the Koha database.
979 my $query = "Select * from branches";
980 my $sth = $dbh->prepare($query);
985 while (my $data = $sth->fetchrow_hashref) {
986 $results[$i] = $data;
992 return($i, @results);
997 my ($biblionumber)=@_;
999 my $query="Select * from biblioitems,items,itemtypes where
1000 biblioitems.biblionumber=$biblionumber
1001 and biblioitems.biblioitemnumber=items.biblioitemnumber and
1002 itemtypes.itemtype=biblioitems.itemtype
1003 order by items.biblioitemnumber";
1004 my $sth=$dbh->prepare($query);
1008 while (my $data=$sth->fetchrow_hashref){
1017 # FIXME - Never used
1019 my ($bibitemnum,$itemtype)=@_;
1021 my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
1022 and itemtype='$itemtype'";
1023 my $sth=$dbh->prepare($query);
1026 if (my $data=$sth->fetchrow_hashref){
1036 &updatesup($bookseller);
1038 Updates the information for a given bookseller. C<$bookseller> is a
1039 reference-to-hash whose keys are the fields of the aqbooksellers table
1040 in the Koha database. It must contain entries for all of the fields.
1041 The entry to modify is determined by C<$bookseller-E<gt>{id}>.
1043 The easiest way to get all of the necessary fields is to look up a
1044 book seller with C<&booksellers>, modify what's necessary, then call
1045 C<&updatesup> with the result.
1052 my $query="Update aqbooksellers set
1053 name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
1054 address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
1055 phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
1056 contact='$data->{'contact'}',contpos='$data->{'contpos'}',
1057 contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
1058 '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
1059 '$data->{'contnotes'}', active=$data->{'active'},
1060 listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
1061 gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
1062 invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
1063 discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
1064 nocalc='$data->{'nocalc'}'
1065 where id='$data->{'id'}'";
1066 my $sth=$dbh->prepare($query);
1075 $id = &insertsup($bookseller);
1077 Creates a new bookseller. C<$bookseller> is a reference-to-hash whose
1078 keys are the fields of the aqbooksellers table in the Koha database.
1079 All fields must be present.
1081 Returns the ID of the newly-created bookseller.
1088 my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
1090 my $data2=$sth->fetchrow_hashref;
1092 $data2->{'max(id)'}++;
1093 $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
1096 $data->{'id'}=$data2->{'max(id)'};
1099 return($data->{'id'});
1104 ($count, @results) = &websitesearch($keywordlist);
1106 Looks up biblioitems by URL.
1108 C<$keywordlist> is a space-separated list of search terms.
1109 C<&websitesearch> returns those biblioitems whose URL contains at
1110 least one of the search terms.
1112 C<$count> is the number of elements in C<@results>. C<@results> is an
1113 array of references-to-hash, whose keys are the fields of the biblio
1114 and biblioitems tables in the Koha database.
1119 my ($keywordlist) = @_;
1120 my $dbh = C4Connect;
1121 my $query = "Select distinct biblio.* from biblio, biblioitems where
1122 biblio.biblionumber = biblioitems.biblionumber and (";
1126 my @keywords = split(/ +/, $keywordlist);
1127 my $keyword = shift(@keywords);
1130 # $query .= join(" and ",
1131 # apply { url like "%$_%" } @keywords
1133 $keyword =~ s/%/\\%/g;
1134 $keyword =~ s/_/\\_/;
1135 $keyword = "%" . $keyword . "%";
1136 $keyword = $dbh->quote($keyword);
1137 $query .= " (url like $keyword)";
1139 foreach $keyword (@keywords) {
1140 $keyword =~ s/%/\\%/;
1141 $keyword =~ s/_/\\_/;
1142 $keyword = "%" . $keyword . "%";
1143 $keyword = $dbh->quote($keyword);
1144 $query .= " or (url like $keyword)";
1148 $sth = $dbh->prepare($query);
1151 while (my $data = $sth->fetchrow_hashref) {
1152 $results[$count] = $data;
1158 return($count, @results);
1159 } # sub websitesearch
1163 &addwebsite($website);
1165 Adds a new web site. C<$website> is a reference-to-hash, with the keys
1166 C<biblionumber>, C<title>, C<description>, and C<url>. All of these
1173 my $dbh = C4Connect;
1177 # for (qw( biblionumber title description url )) # and any others
1179 # $website->{$_} = $dbh->quote($_);
1181 # Perhaps extend this to building the query as well. This might allow
1182 # some of the fields to be optional.
1183 $website->{'biblionumber'} = $dbh->quote($website->{'biblionumber'});
1184 $website->{'title'} = $dbh->quote($website->{'title'});
1185 $website->{'description'} = $dbh->quote($website->{'description'});
1186 $website->{'url'} = $dbh->quote($website->{'url'});
1188 $query = "Insert into websites set
1189 biblionumber = $website->{'biblionumber'},
1190 title = $website->{'title'},
1191 description = $website->{'description'},
1192 url = $website->{'url'}";
1201 &updatewebsite($website);
1203 Updates an existing web site. C<$website> is a reference-to-hash with
1204 the keys C<websitenumber>, C<title>, C<description>, and C<url>. All
1205 of these are mandatory. C<$website-E<gt>{websitenumber}> identifies
1206 the entry to update.
1212 my $dbh = C4Connect;
1215 $website->{'title'} = $dbh->quote($website->{'title'});
1216 $website->{'description'} = $dbh->quote($website->{'description'});
1217 $website->{'url'} = $dbh->quote($website->{'url'});
1219 $query = "Update websites set
1220 title = $website->{'title'},
1221 description = $website->{'description'},
1222 url = $website->{'url'}
1223 where websitenumber = $website->{'websitenumber'}";
1228 } # sub updatewebsite
1232 &deletewebsite($websitenumber);
1234 Deletes the web site with number C<$websitenumber>.
1239 my ($websitenumber) = @_;
1240 my $dbh = C4Connect;
1241 my $query = "Delete from websites where websitenumber = $websitenumber";
1246 } # sub deletewebsite
1248 END { } # module clean-up code here (global destructor)
1257 Koha Developement team <info@koha.org>