DBI bound parameters
[koha.git] / C4 / Acquisitions.pm
1 package C4::Acquisitions; #assumes C4/Acquisitions.pm
2
3 use strict;
4 require Exporter;
5 use C4::Database;
6 use warnings;
7 use vars qw($VERSION @ISA @EXPORT);
8
9 # set the version for version checking
10 $VERSION = 0.01;
11
12 @ISA = qw(Exporter);
13 @EXPORT = qw(&getorders &bookseller &breakdown &basket &newbasket &bookfunds
14 &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
15  &newordernum &modbiblio &modorder &getsingleorder &invoice &receiveorder
16  &bookfundbreakdown &curconvert &updatesup &insertsup &makeitems &modbibitem
17 &getcurrencies &modsubtitle &modsubject &modaddauthor &moditem &countitems 
18 &findall &needsmod &delitem &delbibitem &delbiblio &delorder &branches
19 &getallorders &getrecorders &updatecurrencies &getorder &getcurrency &updaterecorder
20 &updatecost &checkitems &modnote &getitemtypes &getbiblio);
21
22 sub getorders {
23   my ($supplierid)=@_;
24   my $dbh=C4Connect;
25   my $query = "Select count(*),authorisedby,entrydate,basketno from aqorders where 
26   booksellerid='$supplierid' and (quantity > quantityreceived or
27   quantityreceived is NULL)
28   and (datecancellationprinted is NULL or datecancellationprinted = '0000-00-00')";
29   $query.=" group by basketno order by entrydate desc";
30   #print $query;
31   my $sth=$dbh->prepare($query);
32   $sth->execute;
33   my @results;
34   my $i=0;
35   while (my $data=$sth->fetchrow_hashref){
36     $results[$i]=$data;
37     $i++;
38   }
39   $sth->finish;
40   $dbh->disconnect;
41   return ($i,\@results);
42 }
43
44 sub itemcount{
45   my ($biblio)=@_;
46   my $dbh=C4Connect;
47   my $query="Select count(*) from items where biblionumber=$biblio";
48 #  print $query;
49   my $sth=$dbh->prepare($query);
50   $sth->execute;
51   my $data=$sth->fetchrow_hashref;
52   $sth->finish;
53   $dbh->disconnect;
54   return($data->{'count(*)'});
55 }
56
57 sub getorder{
58   my ($bi,$bib)=@_;
59   my $dbh=C4Connect;
60   my $query="Select ordernumber 
61         from aqorders 
62         where biblionumber=? and biblioitemnumber=?";
63   my $sth=$dbh->prepare($query);
64   $sth->execute($bib,$bi);
65   my $ordnum=$sth->fetchrow_hashref;
66   $sth->finish;
67   my $order=getsingleorder($ordnum->{'ordernumber'});
68   $dbh->disconnect;
69 #  print $query;
70   return ($order,$ordnum->{'ordernumber'});
71 }
72
73 sub getsingleorder {
74   my ($ordnum)=@_;
75   my $dbh=C4Connect;
76   my $query="Select * from biblio,biblioitems,aqorders,aqorderbreakdown 
77   where aqorders.ordernumber=?
78   and biblio.biblionumber=aqorders.biblionumber and
79   biblioitems.biblioitemnumber=aqorders.biblioitemnumber and
80   aqorders.ordernumber=aqorderbreakdown.ordernumber";
81   my $sth=$dbh->prepare($query);
82   $sth->execute($ordnum);
83   my $data=$sth->fetchrow_hashref;
84   $sth->finish;
85   $dbh->disconnect;
86   return($data);
87 }
88
89 sub invoice {
90   my ($invoice)=@_;
91   my $dbh=C4Connect;
92   my $query="Select * from aqorders,biblio,biblioitems where
93   booksellerinvoicenumber='$invoice' 
94   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
95   aqorders.biblioitemnumber group by aqorders.ordernumber,aqorders.biblioitemnumber";
96   my $i=0;
97   my @results;
98   my $sth=$dbh->prepare($query);
99   $sth->execute;
100   while (my $data=$sth->fetchrow_hashref){
101     $results[$i]=$data;
102     $i++;
103   }
104   $sth->finish;
105   $dbh->disconnect;
106   return($i,@results);
107 }
108
109 sub getallorders {
110   #gets all orders from a certain supplier, orders them alphabetically
111   my ($supid)=@_;
112   my $dbh=C4Connect;
113   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
114   and (cancelledby is NULL or cancelledby = '')
115   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
116   aqorders.biblioitemnumber 
117   group by aqorders.biblioitemnumber 
118   order by
119   biblio.title";
120   my $i=0;
121   my @results;
122   my $sth=$dbh->prepare($query);
123   $sth->execute;
124   while (my $data=$sth->fetchrow_hashref){
125     $results[$i]=$data;
126     $i++;
127   }
128   $sth->finish;
129   $dbh->disconnect;
130   return($i,@results);
131 }
132
133 sub getrecorders {
134   #gets all orders from a certain supplier, orders them alphabetically
135   my ($supid)=@_;
136   my $dbh=C4Connect;
137   my $query="Select * from aqorders,biblio,biblioitems where booksellerid='$supid'
138   and (cancelledby is NULL or cancelledby = '')
139   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=                    
140   aqorders.biblioitemnumber and
141   aqorders.quantityreceived>0
142   and aqorders.datereceived >=now()
143   group by aqorders.biblioitemnumber 
144   order by
145   biblio.title";
146   my $i=0;
147   my @results;
148   my $sth=$dbh->prepare($query);
149   $sth->execute;
150   while (my $data=$sth->fetchrow_hashref){
151     $results[$i]=$data;
152     $i++;
153   }
154   $sth->finish;
155   $dbh->disconnect;
156   return($i,@results);
157 }
158
159 sub ordersearch {
160   my ($search,$biblio,$catview)=@_;
161   my $dbh=C4Connect;
162   my $query="Select *,biblio.title from aqorders,biblioitems,biblio
163   where aqorders.biblioitemnumber=
164   biblioitems.biblioitemnumber and biblio.biblionumber=aqorders.biblionumber 
165   and (datecancellationprinted is NULL or datecancellationprinted =
166 '000-00-00')
167   and ((";
168   my @data=split(' ',$search);
169   my $count=@data;
170   for (my $i=0;$i<$count;$i++){
171     $query.= "(biblio.title like '$data[$i]%' or biblio.title like '% $data[$i]%') and ";
172   }
173   $query=~ s/ and $//;
174   $query.=" ) or biblioitems.isbn='$search' 
175   or (aqorders.ordernumber='$search' and aqorders.biblionumber='$biblio')) ";
176   if ($catview ne 'yes'){
177     $query.=" and (quantityreceived < quantity or quantityreceived is NULL)";
178   }
179   $query.=" group by aqorders.ordernumber";
180   my $sth=$dbh->prepare($query);
181 #  print $query;
182   $sth->execute;
183   my $i=0;
184   my @results;
185   while (my $data=$sth->fetchrow_hashref){
186      my $sth2=$dbh->prepare("Select * from biblio where
187      biblionumber='$data->{'biblionumber'}'");
188      $sth2->execute;
189      my $data2=$sth2->fetchrow_hashref;
190      $sth2->finish;
191      $data->{'author'}=$data2->{'author'};
192      $data->{'seriestitle'}=$data2->{'seriestitle'};
193      $sth2=$dbh->prepare("Select * from aqorderbreakdown where
194     ordernumber=$data->{'ordernumber'}");
195     $sth2->execute;
196     $data2=$sth2->fetchrow_hashref;
197     $sth2->finish;
198     $data->{'branchcode'}=$data2->{'branchcode'};
199     $data->{'bookfundid'}=$data2->{'bookfundid'};
200     $results[$i]=$data;
201     $i++;
202   }
203   $sth->finish;
204   $dbh->disconnect;
205   return($i,@results);
206 }
207
208
209 sub bookseller {
210   my ($searchstring)=@_;
211   my $dbh=C4Connect;
212   my $query="Select * from aqbooksellers where name like '%$searchstring%' or
213   id = '$searchstring'";
214   my $sth=$dbh->prepare($query);
215   $sth->execute;
216   my @results;
217   my $i=0;
218   while (my $data=$sth->fetchrow_hashref){
219     $results[$i]=$data;
220     $i++;
221   }
222   $sth->finish;
223   $dbh->disconnect;
224   return($i,@results);
225 }
226
227 sub breakdown {
228   my ($id)=@_;
229   my $dbh=C4Connect;
230   my $query="Select * from aqorderbreakdown where ordernumber='$id'";
231   my $sth=$dbh->prepare($query);
232   $sth->execute;
233   my @results;
234   my $i=0;
235   while (my $data=$sth->fetchrow_hashref){
236     $results[$i]=$data;
237     $i++;
238   }
239   $sth->finish;
240   $dbh->disconnect;
241   return($i,\@results);
242 }
243
244 sub basket {
245   my ($basketno,$supplier)=@_;
246   my $dbh=C4Connect;
247   my $query="Select *,biblio.title from aqorders,biblio,biblioitems 
248   where basketno='$basketno'
249   and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber
250   =aqorders.biblioitemnumber 
251   and (datecancellationprinted is NULL or datecancellationprinted =
252   '0000-00-00')";
253   if ($supplier ne ''){
254     $query.=" and aqorders.booksellerid='$supplier'";
255   } 
256   $query.=" group by aqorders.ordernumber";
257   my $sth=$dbh->prepare($query);
258   $sth->execute;
259   my @results;
260 #  print $query;
261   my $i=0;
262   while (my $data=$sth->fetchrow_hashref){
263     $results[$i]=$data;
264     $i++;
265   }
266   $sth->finish;
267   $dbh->disconnect;
268   return($i,@results);
269 }
270
271 sub newbasket {
272   my $dbh=C4Connect;
273   my $query="Select max(basketno) from aqorders";
274   my $sth=$dbh->prepare($query);
275   $sth->execute;
276   my $data=$sth->fetchrow_arrayref;
277   my $basket=$$data[0];
278   $basket++;
279   $sth->finish;
280   $dbh->disconnect;
281   return($basket);
282 }
283
284 sub bookfunds {
285   my $dbh=C4Connect;
286   my $query="Select * from aqbookfund,aqbudget where aqbookfund.bookfundid
287   =aqbudget.bookfundid 
288   and aqbudget.startdate='2001=07-01' 
289   group by aqbookfund.bookfundid order by bookfundname";
290   my $sth=$dbh->prepare($query);
291   $sth->execute;
292   my @results;
293   my $i=0;
294   while (my $data=$sth->fetchrow_hashref){
295     $results[$i]=$data;
296     $i++;
297   }
298   $sth->finish;
299   $dbh->disconnect;
300   return($i,@results);
301 }
302
303 sub branches {
304   my $dbh=C4Connect;
305   my $query="Select * from branches";
306   my $sth=$dbh->prepare($query);
307   $sth->execute;
308   my @results;
309   my $i=0;
310   while (my $data=$sth->fetchrow_hashref){
311     $results[$i]=$data;
312     $i++;
313   }
314   $sth->finish;
315   $dbh->disconnect;
316   return($i,@results);
317 }
318
319 sub bookfundbreakdown {
320   my ($id)=@_;
321   my $dbh=C4Connect;
322   my $query="Select quantity,datereceived,freight,unitprice,listprice,ecost,quantityreceived,subscription
323   from aqorders,aqorderbreakdown where bookfundid='$id' and 
324   aqorders.ordernumber=aqorderbreakdown.ordernumber and ((budgetdate >=
325   '2001-07-01' and budgetdate <'2002-07-01') or
326   (datereceived >= '2001-07-01' and datereceived < '2002-07-01'))
327   and (datecancellationprinted is NULL or
328   datecancellationprinted='0000-00-00')";
329   my $sth=$dbh->prepare($query);
330   $sth->execute;
331   my $comtd=0;
332   my $spent=0;
333   while (my $data=$sth->fetchrow_hashref){
334     if ($data->{'subscription'} == 1){
335       $spent+=$data->{'quantity'}*$data->{'unitprice'};
336     } else {
337       my $leftover=$data->{'quantity'}-$data->{'quantityreceived'};
338       $comtd+=($data->{'ecost'})*$leftover;
339       $spent+=($data->{'unitprice'})*$data->{'quantityreceived'};
340     }
341   }
342   $sth->finish;
343   $dbh->disconnect;
344   return($spent,$comtd);
345 }
346       
347
348 sub newbiblio {
349   my ($biblio) = @_;
350   my $dbh    = &C4Connect;
351   my $query  = "Select max(biblionumber) from biblio";
352   my $sth    = $dbh->prepare($query);
353   $sth->execute;
354   my $data   = $sth->fetchrow_arrayref;
355   my $bibnum = $$data[0] + 1;
356   my $series;
357
358   if ($biblio->{'seriestitle'}) { $series = 1 } else { $series = 0 };
359
360   $sth->finish;
361   $query = "insert into biblio set
362         biblionumber  = ?,
363         title         = ?,
364         author        = ?,
365         copyrightdate = ?,
366         series        = ?,
367         seriestitle   = ?,
368         notes         = ?   ";
369
370 #  print $query;
371   $sth = $dbh->prepare($query);
372   $sth->execute(
373     $bibnum,
374     $biblio->{'title'},
375     $biblio->{'author'},
376     $biblio->{'copyright'},
377     $series,
378     $biblio->{'seriestitle'} ,
379     $biblio->{'notes'}     
380   ) ;
381
382   $sth->finish;
383   $dbh->disconnect;
384   return($bibnum);
385 }
386
387 sub modbiblio {
388   my ($bibnum,$title,$author,$copyright,$seriestitle,$serial,$unititle,$notes)=@_;
389   my $dbh=C4Connect;
390   my $query="update biblio set title='$title',
391   author='$author',copyrightdate='$copyright',
392   seriestitle='$seriestitle',serial='$serial',unititle='$unititle',notes='$notes'
393   where
394   biblionumber=$bibnum";
395   my $sth=$dbh->prepare($query);
396   $sth->execute;
397   $sth->finish;
398   $dbh->disconnect;
399     return($bibnum);
400 }
401
402 sub modsubtitle {
403   my ($bibnum,$subtitle)=@_;
404   my $dbh=C4Connect;
405   my $query="update bibliosubtitle set subtitle='$subtitle' where biblionumber=$bibnum";
406   my $sth=$dbh->prepare($query);
407   $sth->execute;
408   $sth->finish;
409   $dbh->disconnect;
410 }
411
412 sub modaddauthor {
413   my ($bibnum,$author)=@_;
414   my $dbh=C4Connect;
415   my $query="Delete from additionalauthors where biblionumber=$bibnum";
416   my $sth=$dbh->prepare($query);
417   $sth->execute;
418   $sth->finish;
419   if ($author ne ''){
420       $query="insert into additionalauthors (author,biblionumber) values ('$author','$bibnum')";
421     $sth=$dbh->prepare($query);
422     $sth->execute;
423     $sth->finish;
424   }
425   $dbh->disconnect;
426
427
428 sub modsubject {
429   my ($bibnum,$force,@subject)=@_;
430   my $dbh=C4Connect;
431   my $count=@subject;
432   my $error;
433   for (my $i=0;$i<$count;$i++){
434     $subject[$i]=~ s/^ //g;
435     $subject[$i]=~ s/ $//g;
436     my $query="select * from catalogueentry where entrytype='s' and
437     catalogueentry='$subject[$i]'";
438     my $sth=$dbh->prepare($query);
439     $sth->execute;
440     if (my $data=$sth->fetchrow_hashref){
441       
442     } else {
443       if ($force eq $subject[$i]){
444          #subject not in aut, chosen to force anway
445          #so insert into cataloguentry so its in auth file
446          $query="Insert into catalogueentry (entrytype,catalogueentry)
447          values ('s','$subject[$i]')";
448          my $sth2=$dbh->prepare($query);
449 #        print $query;
450          $sth2->execute;
451          $sth2->finish;
452       } else {      
453         $error="$subject[$i]\n does not exist in the subject authority file";
454         $query= "Select * from catalogueentry where
455         entrytype='s' and (catalogueentry like '$subject[$i] %' or 
456         catalogueentry like '% $subject[$i] %' or catalogueentry like
457         '% $subject[$i]')";
458         my $sth2=$dbh->prepare($query);
459 #        print $query;
460         $sth2->execute;
461         while (my $data=$sth2->fetchrow_hashref){
462           $error=$error."<br>$data->{'catalogueentry'}";
463         }
464         $sth2->finish;
465 #       $error=$error."<br>$query";
466      }
467    }
468     $sth->finish;
469   }
470   if ($error eq ''){  
471     my $query="Delete from bibliosubject where biblionumber=$bibnum";
472 #  print $query;
473     my $sth=$dbh->prepare($query);
474 #  print $query;
475     $sth->execute;
476     $sth->finish;
477     for (my $i=0;$i<$count;$i++){
478       $sth=$dbh->prepare("Insert into bibliosubject values ('$subject[$i]',$bibnum)");
479 #     print $subject[$i];
480       $sth->execute;
481       $sth->finish;
482     }
483   }
484   $dbh->disconnect;
485   return($error);
486 }
487
488 sub modbibitem {
489   my ($bibitemnum,$itemtype,$isbn,$publishercode,$publicationdate,$classification,$dewey,$subclass,$illus,$pages,$volumeddesc,$notes,$size,$place)=@_;
490   my $dbh=C4Connect;
491   my $query="update biblioitems set itemtype='$itemtype',
492   isbn='$isbn',publishercode='$publishercode',publicationyear='$publicationdate',
493   classification='$classification',dewey='$dewey',subclass='$subclass',illus='$illus',
494   pages='$pages',volumeddesc='$volumeddesc',notes='$notes',size='$size',place='$place'
495   where
496   biblioitemnumber=$bibitemnum";
497   my $sth=$dbh->prepare($query);
498 #    print $query;
499   $sth->execute;
500   $sth->finish;
501   $dbh->disconnect;
502 }
503
504 sub modnote {
505   my ($bibitemnum,$note)=@_;
506   my $dbh=C4Connect;
507   my $query="update biblioitems set notes='$note' where
508   biblioitemnumber='$bibitemnum'";
509   my $sth=$dbh->prepare($query);
510   $sth->execute;
511   $sth->finish;
512   $dbh->disconnect;
513 }
514
515 sub newbiblioitem {
516   my ($biblioitem) = @_;
517   my $dbh   = C4Connect;
518   my $query = "Select max(biblioitemnumber) from biblioitems";
519   my $sth   = $dbh->prepare($query);
520   my $data;
521   my $bibitemnum;
522   
523   $biblioitem->{'volume'}          = $dbh->quote($biblioitem->{'volume'});
524   $biblioitem->{'number'}          = $dbh->quote($biblioitem->{'number'});
525   $biblioitem->{'classification'}  = $dbh->quote($biblioitem->{'classification'});
526   $biblioitem->{'itemtype'}        = $dbh->quote($biblioitem->{'itemtype'});
527   $biblioitem->{'isbn'}            = $dbh->quote($biblioitem->{'isbn'});
528   $biblioitem->{'issn'}            = $dbh->quote($biblioitem->{'issn'});
529   $biblioitem->{'dewey'}           = $dbh->quote($biblioitem->{'dewey'});
530   $biblioitem->{'subclass'}        = $dbh->quote($biblioitem->{'subclass'});
531   $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'});
532   $biblioitem->{'publishercode'}   = $dbh->quote($biblioitem->{'publishercode'});
533   $biblioitem->{'volumedate'}      = $dbh->quote($biblioitem->{'volumedate'});
534   $biblioitem->{'volumeddesc'}     = $dbh->quote($biblioitem->{'volumeddesc'});  $biblioitem->{'illus'}            = $dbh->quote($biblioitem->{'illus'});
535   $biblioitem->{'pages'}           = $dbh->quote($biblioitem->{'pages'});
536   $biblioitem->{'notes'}           = $dbh->quote($biblioitem->{'notes'});
537   $biblioitem->{'size'}            = $dbh->quote($biblioitem->{'size'});
538   $biblioitem->{'place'}           = $dbh->quote($biblioitem->{'place'});
539   
540   $sth->execute;
541   $data       = $sth->fetchrow_arrayref;
542   $bibitemnum = $$data[0] + 1;
543
544   $sth->finish;
545
546   $query = "insert into biblioitems set
547 biblioitemnumber = $bibitemnum,
548 biblionumber     = $biblioitem->{'biblionumber'},
549 volume           = $biblioitem->{'volume'},
550 number           = $biblioitem->{'number'},
551 classification   = $biblioitem->{'classification'},
552 itemtype         = $biblioitem->{'itemtype'},
553 isbn             = $biblioitem->{'isbn'},
554 issn             = $biblioitem->{'issn'},
555 dewey            = $biblioitem->{'dewey'},
556 subclass         = $biblioitem->{'subclass'},
557 publicationyear  = $biblioitem->{'publicationyear'},
558 publishercode    = $biblioitem->{'publishercode'},
559 volumedate       = $biblioitem->{'volumedate'},
560 volumeddesc      = $biblioitem->{'volumeddesc'},
561 illus            = $biblioitem->{'illus'},
562 pages            = $biblioitem->{'pages'},
563 notes            = $biblioitem->{'notes'},
564 size             = $biblioitem->{'size'},
565 place            = $biblioitem->{'place'}";
566
567   $sth = $dbh->prepare($query);
568   $sth->execute;
569
570   $sth->finish;
571   $dbh->disconnect;
572   return($bibitemnum);
573 }
574
575 sub newsubject {
576   my ($bibnum)=@_;
577   my $dbh=C4Connect;
578   my $query="insert into bibliosubject (biblionumber) values
579   ($bibnum)";
580   my $sth=$dbh->prepare($query);
581 #  print $query;
582   $sth->execute;
583   $sth->finish;
584   $dbh->disconnect;
585 }
586
587 sub newsubtitle {
588   my ($bibnum, $subtitle) = @_;
589   my $dbh   = C4Connect;
590   $subtitle = $dbh->quote($subtitle);
591   my $query = "insert into bibliosubtitle set
592 biblionumber = $bibnum,
593 subtitle = $subtitle";
594   my $sth   = $dbh->prepare($query);
595
596   $sth->execute;
597
598   $sth->finish;
599   $dbh->disconnect;
600 }
601
602 sub neworder {
603   my ($bibnum,$title,$ordnum,$basket,$quantity,$listprice,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$sub,$invoice)=@_;
604   if ($budget eq 'now'){
605     $budget="now()";
606   } else {
607     $budget="'2001-07-01'";
608   }
609   if ($sub eq 'yes'){
610     $sub=1;
611   } else {
612     $sub=0;
613   }
614   my $dbh=C4Connect;
615   my $query="insert into aqorders (biblionumber,title,basketno,
616   quantity,listprice,booksellerid,entrydate,requisitionedby,authorisedby,notes,
617   biblioitemnumber,rrp,ecost,gst,budgetdate,unitprice,subscription,booksellerinvoicenumber)
618
619   values
620   ($bibnum,'$title',$basket,$quantity,$listprice,'$supplier',now(),
621   '$who','$who','$notes',$bibitemnum,'$rrp','$ecost','$gst',$budget,'$cost',
622   '$sub','$invoice')";
623   my $sth=$dbh->prepare($query);
624 #  print $query;
625   $sth->execute;
626   $sth->finish;
627   $query="select * from aqorders where
628   biblionumber=$bibnum and basketno=$basket and ordernumber >=$ordnum";
629   $sth=$dbh->prepare($query);
630   $sth->execute;
631   my $data=$sth->fetchrow_hashref;
632   $sth->finish;
633   $ordnum=$data->{'ordernumber'};
634   $query="insert into aqorderbreakdown (ordernumber,bookfundid) values
635   ($ordnum,'$bookfund')";
636   $sth=$dbh->prepare($query);
637 #  print $query;
638   $sth->execute;
639   $sth->finish;
640   $dbh->disconnect;
641 }
642
643 sub delorder {
644   my ($bibnum,$ordnum)=@_;
645   my $dbh=C4Connect;
646   my $query="update aqorders set datecancellationprinted=now()
647   where biblionumber='$bibnum' and
648   ordernumber='$ordnum'";
649   my $sth=$dbh->prepare($query);
650   #print $query;
651   $sth->execute;
652   $sth->finish;
653   my $count=itemcount($bibnum);
654   if ($count == 0){
655     delbiblio($bibnum);
656   }
657   $dbh->disconnect;
658 }
659
660 sub modorder {
661   my ($title,$ordnum,$quantity,$listprice,$bibnum,$basketno,$supplier,$who,$notes,$bookfund,$bibitemnum,$rrp,$ecost,$gst,$budget,$cost,$invoice)=@_;
662   my $dbh=C4Connect;
663   my $query="update aqorders set title='$title',
664   quantity='$quantity',listprice='$listprice',basketno='$basketno', 
665   rrp='$rrp',ecost='$ecost',unitprice='$cost',
666   booksellerinvoicenumber='$invoice'
667   where
668   ordernumber=$ordnum and biblionumber=$bibnum";
669   my $sth=$dbh->prepare($query);
670 #  print $query;
671   $sth->execute;
672   $sth->finish;
673   $query="update aqorderbreakdown set bookfundid=$bookfund where
674   ordernumber=$ordnum";
675   $sth=$dbh->prepare($query);
676 #  print $query;
677   $sth->execute;
678   $sth->finish;
679   $dbh->disconnect;
680 }
681
682 sub newordernum {
683   my $dbh=C4Connect;
684   my $query="Select max(ordernumber) from aqorders";
685   my $sth=$dbh->prepare($query);
686   $sth->execute;
687   my $data=$sth->fetchrow_arrayref;
688   my $ordnum=$$data[0];
689   $ordnum++;
690   $sth->finish;
691   $dbh->disconnect;
692   return($ordnum);
693 }
694
695 sub receiveorder {
696   my ($biblio,$ordnum,$quantrec,$user,$cost,$invoiceno,$bibitemno,$freight,$bookfund,$rrp)=@_;
697   my $dbh=C4Connect;
698   my $query="update aqorders set quantityreceived='$quantrec',
699   datereceived=now(),booksellerinvoicenumber='$invoiceno',
700   biblioitemnumber=$bibitemno,unitprice='$cost',freight='$freight',
701   rrp='$rrp'
702   where biblionumber=$biblio and ordernumber=$ordnum
703   ";
704 #  print $query;
705   my $sth=$dbh->prepare($query);
706   $sth->execute;
707   $sth->finish;
708   $query="update aqorderbreakdown set bookfundid=$bookfund where
709   ordernumber=$ordnum";
710   $sth=$dbh->prepare($query);
711 #  print $query;
712   $sth->execute;
713   $sth->finish;  
714   $dbh->disconnect;
715 }
716 sub updaterecorder{
717   my($biblio,$ordnum,$user,$cost,$bookfund,$rrp)=@_;
718   my $dbh=C4Connect;
719   my $query="update aqorders set
720   unitprice='$cost', rrp='$rrp'
721   where biblionumber=$biblio and ordernumber=$ordnum
722   ";
723 #  print $query;
724   my $sth=$dbh->prepare($query);
725   $sth->execute;
726   $sth->finish;
727   $query="update aqorderbreakdown set bookfundid=$bookfund where
728   ordernumber=$ordnum";
729   $sth=$dbh->prepare($query);
730 #  print $query;
731   $sth->execute;
732   $sth->finish;  
733   $dbh->disconnect;
734 }
735
736 sub curconvert {
737   my ($currency,$price)=@_;
738   my $dbh=C4Connect;
739   my $query="Select rate from currency where currency='$currency'";
740   my $sth=$dbh->prepare($query);
741   $sth->execute;
742   my $data=$sth->fetchrow_hashref;
743   $sth->finish;
744   $dbh->disconnect;
745   my $cur=$data->{'rate'};
746   if ($cur==0){
747     $cur=1;
748   }
749   $price=$price / $cur;
750   return($price);
751 }
752
753 sub getcurrencies {
754   my $dbh=C4Connect;
755   my $query="Select * from currency";
756   my $sth=$dbh->prepare($query);
757   $sth->execute;
758   my @results;
759   my $i=0;
760   while (my $data=$sth->fetchrow_hashref){
761     $results[$i]=$data;
762     $i++;
763   }
764   $sth->finish;
765   $dbh->disconnect;
766   return($i,\@results);
767
768
769 sub getcurrency {
770   my ($cur)=@_;
771   my $dbh=C4Connect;
772   my $query="Select * from currency where currency='$cur'";
773   my $sth=$dbh->prepare($query);
774   $sth->execute;
775
776   my $data=$sth->fetchrow_hashref;
777   $sth->finish;
778   $dbh->disconnect;
779   return($data);
780
781
782 sub updatecurrencies {
783   my ($currency,$rate)=@_;
784   my $dbh=C4Connect;
785   my $query="update currency set rate=$rate where currency='$currency'";
786   my $sth=$dbh->prepare($query);
787   $sth->execute;
788   $sth->finish;
789   $dbh->disconnect;
790
791
792 sub updatesup {
793    my ($data)=@_;
794    my $dbh=C4Connect;
795    my $query="Update aqbooksellers set
796    name='$data->{'name'}',address1='$data->{'address1'}',address2='$data->{'address2'}',
797    address3='$data->{'address3'}',address4='$data->{'address4'}',postal='$data->{'postal'}',
798    phone='$data->{'phone'}',fax='$data->{'fax'}',url='$data->{'url'}',
799    contact='$data->{'contact'}',contpos='$data->{'contpos'}',
800    contphone='$data->{'contphone'}', contfax='$data->{'contfax'}', contaltphone=
801    '$data->{'contaltphone'}', contemail='$data->{'contemail'}', contnotes=
802    '$data->{'contnotes'}', active=$data->{'active'},
803    listprice='$data->{'listprice'}', invoiceprice='$data->{'invoiceprice'}',
804    gstreg=$data->{'gstreg'}, listincgst=$data->{'listincgst'},
805    invoiceincgst=$data->{'invoiceincgst'}, specialty='$data->{'specialty'}',
806    discount='$data->{'discount'}',invoicedisc='$data->{'invoicedisc'}',
807    nocalc='$data->{'nocalc'}'
808    where id='$data->{'id'}'";
809    my $sth=$dbh->prepare($query);
810    $sth->execute;
811    $sth->finish;
812    $dbh->disconnect;
813 #   print $query;
814 }
815
816 sub insertsup {
817   my ($data)=@_;
818   my $dbh=C4Connect;
819   my $sth=$dbh->prepare("Select max(id) from aqbooksellers");
820   $sth->execute;
821   my $data2=$sth->fetchrow_hashref;
822   $sth->finish;
823   $data2->{'max(id)'}++;
824   $sth=$dbh->prepare("Insert into aqbooksellers (id) values ($data2->{'max(id)'})");
825   $sth->execute;
826   $sth->finish;
827   $data->{'id'}=$data2->{'max(id)'};
828   $dbh->disconnect;
829   updatesup($data);
830   return($data->{'id'});
831 }
832
833 sub makeitems {
834   my
835 ($count,$bibitemno,$biblio,$replacement,$price,$booksellerid,$branch,$loan,@barcodes)=@_;
836   my $dbh=C4Connect;
837   my $sth=$dbh->prepare("Select max(itemnumber) from items");
838   $sth->execute;
839   my $data=$sth->fetchrow_hashref;
840   my $item=$data->{'max(itemnumber)'};
841   $sth->finish;
842   $item++;
843   my $error;
844   for (my $i=0;$i<$count;$i++){
845     $barcodes[$i]=uc $barcodes[$i];
846     my $query="Insert into items (biblionumber,biblioitemnumber,itemnumber,barcode,
847     booksellerid,dateaccessioned,homebranch,holdingbranch,price,replacementprice,
848     replacementpricedate,notforloan) values
849     ($biblio,$bibitemno,$item,'$barcodes[$i]','$booksellerid',now(),'$branch',
850     '$branch','$price','$replacement',now(),$loan)";
851     my $sth=$dbh->prepare($query);
852     $sth->execute;
853     $error.=$sth->errstr;
854     $sth->finish;
855     $item++;
856 #    print $query;
857   }
858   $dbh->disconnect;
859   return($error);
860 }
861
862 sub checkitems{
863   my ($count,@barcodes)=@_;
864   my $dbh=C4Connect;
865   my $error;
866   for (my $i=0;$i<$count;$i++){
867     $barcodes[$i]=uc $barcodes[$i];
868     my $query="Select * from items where barcode='$barcodes[$i]'";
869     my $sth=$dbh->prepare($query);
870     $sth->execute;
871     if (my $data=$sth->fetchrow_hashref){
872       $error.=" Duplicate Barcode: $barcodes[$i]";
873     }
874     $sth->finish;
875   }
876   $dbh->disconnect;
877   return($error);
878 }
879
880 sub moditem {
881   my ($loan,$itemnum,$bibitemnum,$barcode,$notes,$homebranch,$lost,$wthdrawn,$replacement)=@_;
882   my $dbh=C4Connect;
883   my $query="update items set biblioitemnumber=$bibitemnum,
884   barcode='$barcode',itemnotes='$notes'
885   where itemnumber=$itemnum";
886   if ($barcode eq ''){
887     $query="update items set biblioitemnumber=$bibitemnum,notforloan=$loan where itemnumber=$itemnum";
888   }
889   if ($lost ne ''){
890     $query="update items set biblioitemnumber=$bibitemnum,
891       barcode='$barcode',itemnotes='$notes',homebranch='$homebranch',
892       itemlost='$lost',wthdrawn='$wthdrawn' where itemnumber=$itemnum";
893   }
894   if ($replacement ne ''){
895     $query=~ s/ where/,replacementprice='$replacement' where/;
896   }
897
898   my $sth=$dbh->prepare($query);
899   $sth->execute;
900   $sth->finish;
901   $dbh->disconnect;
902 }
903
904 sub updatecost{
905   my($price,$rrp,$itemnum)=@_;
906   my $dbh=C4Connect;
907   my $query="update items set price='$price',replacementprice='$rrp'
908   where itemnumber=$itemnum";
909   my $sth=$dbh->prepare($query);
910   $sth->execute;
911   $sth->finish;
912   $dbh->disconnect;
913 }
914 sub countitems{
915   my ($bibitemnum)=@_;
916   my $dbh=C4Connect;
917   my $query="Select count(*) from items where biblioitemnumber='$bibitemnum'";
918   my $sth=$dbh->prepare($query);
919   $sth->execute;
920   my $data=$sth->fetchrow_hashref;
921   $sth->finish;
922   $dbh->disconnect;
923   return($data->{'count(*)'});
924 }
925
926 sub findall {
927   my ($biblionumber)=@_;
928   my $dbh=C4Connect;
929   my $query="Select * from biblioitems,items,itemtypes where 
930   biblioitems.biblionumber=$biblionumber 
931   and biblioitems.biblioitemnumber=items.biblioitemnumber and
932   itemtypes.itemtype=biblioitems.itemtype
933   order by items.biblioitemnumber";
934   my $sth=$dbh->prepare($query);
935   $sth->execute;
936   my @results;
937   my $i;
938   while (my $data=$sth->fetchrow_hashref){
939     $results[$i]=$data;
940     $i++;
941   }
942   $sth->finish;
943   $dbh->disconnect;
944   return(@results);
945 }
946
947 sub needsmod{
948   my ($bibitemnum,$itemtype)=@_;
949   my $dbh=C4Connect;
950   my $query="Select * from biblioitems where biblioitemnumber=$bibitemnum
951   and itemtype='$itemtype'";
952   my $sth=$dbh->prepare($query);
953   $sth->execute;
954   my $result=0;
955   if (my $data=$sth->fetchrow_hashref){
956     $result=1;
957   }
958   $sth->finish;
959   $dbh->disconnect;
960   return($result);
961 }
962
963 sub delitem{
964   my ($itemnum)=@_;
965   my $dbh=C4Connect;
966   my $query="select * from items where itemnumber=$itemnum";
967   my $sth=$dbh->prepare($query);
968   $sth->execute;
969   my @data=$sth->fetchrow_array;
970   $sth->finish;
971   $query="Insert into deleteditems values (";
972   foreach my $temp (@data){
973     $query=$query."'$temp',";
974   }
975   $query=~ s/\,$/\)/;
976 #  print $query;
977   $sth=$dbh->prepare($query);
978   $sth->execute;
979   $sth->finish;
980   $query = "Delete from items where itemnumber=$itemnum";
981   $sth=$dbh->prepare($query);
982   $sth->execute;
983   $sth->finish;
984   $dbh->disconnect;
985 }
986
987 sub delbibitem{
988   my ($itemnum)=@_;
989   my $dbh=C4Connect;
990   my $query="select * from biblioitems where biblioitemnumber=$itemnum";
991   my $sth=$dbh->prepare($query);
992   $sth->execute;
993   if (my @data=$sth->fetchrow_array){
994     $sth->finish;
995     $query="Insert into deletedbiblioitems values (";
996     foreach my $temp (@data){
997       $temp=~ s/\'/\\\'/g;
998       $query=$query."'$temp',";
999     }
1000     $query=~ s/\,$/\)/;
1001 #   print $query;
1002     $sth=$dbh->prepare($query);
1003     $sth->execute;
1004     $sth->finish;
1005     $query = "Delete from biblioitems where biblioitemnumber=$itemnum";
1006     $sth=$dbh->prepare($query);
1007     $sth->execute;
1008     $sth->finish;
1009   }
1010   $sth->finish;
1011   $dbh->disconnect;
1012 }
1013
1014 sub delbiblio{
1015   my ($biblio)=@_;
1016   my $dbh=C4Connect;
1017   my $query="select * from biblio where biblionumber=$biblio";
1018   my $sth=$dbh->prepare($query);
1019   $sth->execute;
1020   if (my @data=$sth->fetchrow_array){
1021     $sth->finish;
1022     $query="Insert into deletedbiblio values (";
1023     foreach my $temp (@data){
1024       $temp=~ s/\'/\\\'/g;
1025       $query=$query."'$temp',";
1026     }
1027     $query=~ s/\,$/\)/;
1028 #   print $query;
1029     $sth=$dbh->prepare($query);
1030     $sth->execute;
1031     $sth->finish;
1032     $query = "Delete from biblio where biblionumber=$biblio";
1033     $sth=$dbh->prepare($query);
1034     $sth->execute;
1035     $sth->finish;
1036   }
1037
1038   $sth->finish;
1039   $dbh->disconnect;
1040 }
1041
1042 sub getitemtypes {
1043   my $dbh   = C4Connect;
1044   my $query = "select * from itemtypes";
1045   my $sth   = $dbh->prepare($query);
1046     # || die "Cannot prepare $query" . $dbh->errstr;
1047   my $count = 0;
1048   my @results;
1049   
1050   $sth->execute;
1051     # || die "Cannot execute $query\n" . $sth->errstr;
1052   while (my $data = $sth->fetchrow_hashref) {
1053     $results[$count] = $data;
1054     $count++;
1055   } # while
1056   
1057   $sth->finish;
1058   $dbh->disconnect;
1059   return($count, @results);
1060 } # sub getitemtypes
1061
1062
1063 sub getbiblio {
1064     my ($biblionumber) = @_;
1065     my $dbh   = C4Connect;
1066     my $query = "Select * from biblio where biblionumber = $biblionumber";
1067     my $sth   = $dbh->prepare($query);
1068       # || die "Cannot prepare $query" . $dbh->errstr;
1069     my $count = 0;
1070     my @results;
1071     
1072     $sth->execute;
1073       # || die "Cannot execute $query" . $sth->errstr;
1074     while (my $data = $sth->fetchrow_hashref) {
1075       $results[$count] = $data;
1076       $count++;
1077     } # while
1078     
1079     $sth->finish;
1080     $dbh->disconnect;
1081     return($count, @results);
1082 } # sub getbiblio
1083
1084
1085 END { }       # module clean-up code here (global destructor)