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