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