package C4::Search; #asummes C4/Search

#requires DBI.pm to be installed
#uses DBD:Pg

use strict;
require Exporter;
use DBI;
use C4::Database;
use C4::Reserves2;
use Set::Scalar;

use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
  
# set the version for version checking
$VERSION = 0.01;
    
@ISA = qw(Exporter);
@EXPORT = qw(&CatSearch &BornameSearch &ItemInfo &KeywordSearch &subsearch
&itemdata &bibdata &GetItems &borrdata &getacctlist &itemnodata &itemcount
&OpacSearch &borrdata2 &NewBorrowerNumber &bibitemdata &borrissues
&getboracctrecord &ItemType &itemissues &FrontSearch &subject &subtitle
&addauthor &bibitems &barcodes &findguarantees &allissues &systemprefs
&findguarantor); 
%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
		  
# your exported package globals go here,
# as well as any optionally exported functions

@EXPORT_OK   = qw($Var1 %Hashit);


# non-exported package globals go here
use vars qw(@more $stuff);
	
# initalize package globals, first exported ones

my $Var1   = '';
my %Hashit = ();
		    
# then the others (which are still accessible as $Some::Module::stuff)
my $stuff  = '';
my @more   = ();
	
# all file-scoped lexicals must be created before
# the functions below that use them.
		
# file-private lexicals go here
my $priv_var    = '';
my %secret_hash = ();
			    
# here's a file-private function as a closure,
# callable as &$priv_func;  it cannot be prototyped.
my $priv_func = sub {
  # stuff goes here.
};
						    
# make all your functions, whether exported or not;
sub findguarantees{         
  my ($bornum)=@_;         
  my $dbh=C4Connect;           
  my $query="select cardnumber,borrowernumber from borrowers where    
  guarantor='$bornum'";               
  my $sth=$dbh->prepare($query);                 
  $sth->execute;                   
  my @dat;                     
  my $i=0;                       
  while (my $data=$sth->fetchrow_hashref){    
    $dat[$i]=$data;                           
    $i++;                               
  }                                   
  $sth->finish; 
  $dbh->disconnect;         
  return($i,\@dat);             
}
sub findguarantor{  
  my ($bornum)=@_;  
  my $dbh=C4Connect;    
  my $query="select guarantor from borrowers where      
  borrowernumber='$bornum'";        
  my $sth=$dbh->prepare($query);          
  $sth->execute;            
  my $data=$sth->fetchrow_hashref;              
  $sth->finish;                
  $query="Select * from borrowers where
  borrowernumber='$data->{'guarantor'}'";  
  $sth=$dbh->prepare($query);  
  $sth->execute;    
  $data=$sth->fetchrow_hashref;      
  $sth->finish;        
  $dbh->disconnect;          
  return($data);            
}

sub systemprefs {
    my %systemprefs;
    my $dbh=C4Connect;
    my $sth=$dbh->prepare("select variable,value from systempreferences");
    $sth->execute;
    while (my ($variable,$value)=$sth->fetchrow) {
	$systemprefs{$variable}=$value;
    }
    $sth->finish;
    $dbh->disconnect;
    return(%systemprefs);
}

sub NewBorrowerNumber {           
  my $dbh=C4Connect;        
  my $sth=$dbh->prepare("Select max(borrowernumber) from borrowers");     
  $sth->execute;            
  my $data=$sth->fetchrow_hashref;                                  
  $sth->finish;                   
  $data->{'max(borrowernumber)'}++;         
  $dbh->disconnect;
  return($data->{'max(borrowernumber)'}); 
}    

sub OpacSearch {
  my ($env,$type,$search,$num,$offset)=@_;
  my $dbh = &C4Connect;
  $search->{'keyword'}=~ s/'/\\'/g;
  my @key=split(' ',$search->{'keyword'});
  my $count=@key;
  my $i=1;
  my @results;
  my $query ="Select count(*) from biblio where 
  ((title like '$key[0]%' or title like '% $key[0]%')";
  while ($i < $count){
    $query=$query." and (title like '$key[$i]%' or title like '% $key[$i]%')";
    $i++;
  }
  $query=$query.") or ((author like '$key[0]%' or author like '% $key[0]%')";
  $i=1;
  while ($i < $count){
    $query=$query." and (author like '$key[$i]%' or author like '% $key[$i]%')";
    $i++;
  }
  $query.=") or ((seriestitle like '$key[0]%' or seriestitle like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.=" and (seriestitle like '$key[$i]%' or seriestitle like '% $key[$i]%')";
  }
  $query.= ") or ((notes like '$key[0]%' or notes like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.=" and (notes like '$key[$i]%' or notes like '% $key[$i]%')";
  }
  $query=$query.") order by title";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  my $count=$data->{'count(*)'};
  $sth->finish;
  $query=~ s/count\(\*\)/\*/;
  $query= $query." limit $offset,$num";
  $sth=$dbh->prepare($query);
#  print $query;
  $sth->execute;
  $i=0;
  while (my $data=$sth->fetchrow_hashref){
      my $sti=$dbh->prepare("select dewey,subclass from biblioitems where biblionumber=$data->{'biblionumber'}");
      $sti->execute;
      my ($dewey, $subclass) = $sti->fetchrow;
      $dewey=~s/0*$//;
      ($dewey == 0) && ($dewey='');
      ($dewey) && ($dewey.=" $subclass");
      $sti->finish;
    $results[$i]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$dewey";
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($count,@results);
}


  
sub FrontSearch {
  my ($env,$type,$search,$num,$offset)=@_;
  my $dbh = &C4Connect;
  $search->{'front'}=~ s/ +$//;
  $search->{'front'}=~ s/'/\\'/;
  my @key=split(' ',$search->{'front'});
  my $count=@key;
  my $i=1;
  my @results;
  my $query ="Select * from biblio,bibliosubtitle where
  biblio.biblionumber=bibliosubtitle.biblionumber and
  ((title like '$key[0]%' or title like '% $key[0]%'
  or subtitle like '$key[0]%' or subtitle like '% $key[0]%'
  or author like '$key[0]%' or author like '% $key[0]%')";
  while ($i < $count){
    $query=$query." and (title like '%$key[$i]%' or subtitle like '%$key[$i]%')";
    $i++;
  }
  $query=$query.") group by biblio.biblionumber order by author,title";
  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  $i=0;
  while (my $data=$sth->fetchrow_hashref){
    my $sti=$dbh->prepare("select dewey,subclass from biblioitems where biblionumber=$data->{'biblionumber'}");
    $sti->execute;
    my ($dewey, $subclass) = $sti->fetchrow;
    $dewey=~s/\.*0*$//;
    ($dewey == 0) && ($dewey='');
    ($dewey) && ($dewey.=" $subclass");
    $sti->finish;
    $results[$i]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey";
#      print $results[$i];
    $i++;
  }
  $sth->finish;
  $sth=$dbh->prepare("Select biblionumber from bibliosubject where subject
  like '%$search->{'keyword'}%'");
  $sth->execute;
  while (my $data=$sth->fetchrow_hashref){
    my $sth2=$dbh->prepare("Select * from biblio where
    biblionumber=$data->{'biblionumber'}");
    $sth2->execute;
    while (my $data2=$sth2->fetchrow_hashref){

$results[$i]="$data2->{'author'}\t$data2->{'title'}\t$data2->{'biblionumber'}\t$data->{'copyrightdate'}";
#      print $results[$i];
      $i++;   
    }
    $sth2->finish;
  }    
  my $i2=1;
  @results=sort @results;
  my @res;
  my $count=@results;
  $i=1;
  $res[0]=$results[0];
  while ($i2 < $count){
    if ($results[$i2] ne $res[$i-1]){
      $res[$i]=$results[$i2];
      $i++;
    }
    $i2++;
  }
  $i2=0;
  my @res2;
  $count=@res;
  while ($i2 < $num && $i2 < $count){
    $res2[$i2]=$res[$i2+$offset];
#    print $res2[$i2];
    $i2++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,@res2);
}

  
sub KeywordSearch {
  my ($env,$type,$search,$num,$offset)=@_;
  my $dbh = &C4Connect;
  $search->{'keyword'}=~ s/ +$//;
  $search->{'keyword'}=~ s/'/\\'/;
  my @key=split(' ',$search->{'keyword'});
  my $count=@key;
  my $i=1;
  my @results;
  my $query="Select biblionumber from biblio
  where ((title like '$key[0]%' or title like '% $key[0]%')";
  while ($i < $count){                                                  
      $query=$query." and (title like '$key[$i]%' or title like '% $key[$i]%')";                                                   
      $i++;                                                  
  }
  $query.= ") or ((biblio.notes like '$key[0]%' or biblio.notes like '% $key[0]%')";                                             
  for ($i=1;$i<$count;$i++){                                                  
      $query.=" and (biblio.notes like '$key[$i]%' or biblio.notes like '% $key[$i]%')";                                           
  }
   $query.= ") or ((seriestitle like '$key[0]%' or seriestitle like '% $key[0]%')";                                               
  for ($i=1;$i<$count;$i++){                                                  
      $query.=" and (seriestitle like '$key[$i]%' or seriestitle like '% $key[$i]%')";                                             
  }
  $query.=" )";
#  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $i=0;
  while (my @res=$sth->fetchrow_array){
    $results[$i]=$res[0];
    $i++;
  }
  $sth->finish;
  my $set1=Set::Scalar->new(@results);
  $query="Select biblionumber from bibliosubtitle where
  ((subtitle like '$key[0]%' or subtitle like '% $key[0]%')";                 
  for ($i=1;$i<$count;$i++){   
        $query.= " and (subtitle like '$key[$i]%' or subtitle like '% $key[$i]%')";                                                  
  }                   
  $query.=" )";
#  print $query;
  $sth=$dbh->prepare($query);
  $sth->execute;
  $i=0;
  while (my @res=$sth->fetchrow_array){
    $results[$i]=$res[0];
    $i++;
  }
  $sth->finish;
  my $set2=Set::Scalar->new(@results);
  if ($i > 0){
    $set1=$set1+$set2;
  }
  $query ="Select biblionumber from biblioitems where
  ((biblioitems.notes like '$key[0]%' or biblioitems.notes like '% $key[0]%')";                                   
  for ($i=1;$i<$count;$i++){                                                  
      $query.=" and (biblioitems.notes like '$key[$i]%' or biblioitems.notes like '% $key[$i]%')";                                 
  }            
  $query.=" )";
#  print $query;
  $sth=$dbh->prepare($query);
  $sth->execute;
  $i=0;
  while (my @res=$sth->fetchrow_array){
    $results[$i]=$res[0];
    $i++;
  }
  $sth->finish;
  my $set3=Set::Scalar->new(@results);    
  if ($i > 0){
    $set1=$set1+$set3;
  }
  $sth=$dbh->prepare("Select biblionumber from bibliosubject where subject
  like '%$search->{'keyword'}%' group by biblionumber");
  $sth->execute;
  $i=0;
  while (my @res=$sth->fetchrow_array){
    $results[$i]=$res[0];
    $i++;
  }
  $sth->finish;
  my $set4=Set::Scalar->new(@results);    
  if ($i > 0){
    $set1=$set1+$set4;
  }
  my $i2=0;
  my $i3=0;
  my $i4=0;

  my @res2;
  my @res = $set1->members;
  $count=@res;
#  print $set1;
  $i=0;
#  print "count $count";
  if ($search->{'class'} ne ''){ 
    while ($i2 <$count){
      my $query="select * from biblio,biblioitems where 
      biblio.biblionumber='$res[$i2]' and     
      biblio.biblionumber=biblioitems.biblionumber ";         
      if ($search->{'class'} ne ''){             
      my @temp=split(/\|/,$search->{'class'});
      my $count=@temp;                       
      $query.= "and ( itemtype='$temp[0]'";     
      for (my $i=1;$i<$count;$i++){     
        $query.=" or itemtype='$temp[$i]'";                                     
      } 
      $query.=")"; 
      }
       my $sth=$dbh->prepare($query);    
       #    print $query;        
       $sth->execute;        
       if (my $data2=$sth->fetchrow_hashref){            
         my $dewey= $data2->{'dewey'};                
         my $subclass=$data2->{'subclass'};          
         $dewey=~s/\.*0*$//;           
         ($dewey == 0) && ($dewey=''); 
         ($dewey) && ($dewey.=" $subclass") ;                                    
          $sth->finish;
	  my $end=$offset +$num;
	  if ($i4 <= $offset){
	    $i4++;
	  }
#	  print $i4;
	  if ($i4 <=$end && $i4 > $offset){
	    $res2[$i3]="$data2->{'author'}\t$data2->{'title'}\t$data2->{'biblionumber'}\t$data2->{'copyrightdate'}\t$dewey";	
            $i3++;
            $i4++;
#	    print "in here $i3<br>";
	  } else {
#	    print $end;
	  }
	  $i++; 
        }         
     $i2++;
     }
     $count=$i;
  
   } else {
  while ($i2 < $num && $i2 < $count){
    my $query="select * from biblio,biblioitems where
    biblio.biblionumber='$res[$i2+$offset]' and        
    biblio.biblionumber=biblioitems.biblionumber ";
    if ($search->{'class'} ne ''){
      my @temp=split(/\|/,$search->{'class'});
      my $count=@temp;
      $query.= "and ( itemtype='$temp[0]'";
      for (my $i=1;$i<$count;$i++){
        $query.=" or itemtype='$temp[$i]'";
      }
      $query.=")"; 
    }
    if ($search->{'dewey'} ne ''){
      $query.= "and (dewey like '$search->{'dewey'}%') ";
    }

    my $sth=$dbh->prepare($query);
#    print $query;
    $sth->execute;
    if (my $data2=$sth->fetchrow_hashref){
        my $dewey= $data2->{'dewey'};               
        my $subclass=$data2->{'subclass'};                   
	$dewey=~s/\.*0*$//;     
        ($dewey == 0) && ($dewey='');               
        ($dewey) && ($dewey.=" $subclass") ;                      
        $sth->finish;                                                        
	$res2[$i]="$data2->{'author'}\t$data2->{'title'}\t$data2->{'biblionumber'}\t$data2->{'copyrightdate'}\t$dewey";
        $i++;
    }
    $i2++;
    
  }
  }
  $dbh->disconnect;

  #$count=$i;
  return($count,@res2);
}

sub KeywordSearch2 {
  my ($env,$type,$search,$num,$offset)=@_;
  my $dbh = &C4Connect;
  $search->{'keyword'}=~ s/ +$//;
  $search->{'keyword'}=~ s/'/\\'/;
  my @key=split(' ',$search->{'keyword'});
  my $count=@key;
  my $i=1;
  my @results;
  my $query ="Select * from biblio,bibliosubtitle,biblioitems where
  biblio.biblionumber=biblioitems.biblionumber and
  biblio.biblionumber=bibliosubtitle.biblionumber and
  (((title like '$key[0]%' or title like '% $key[0]%')";
  while ($i < $count){
    $query=$query." and (title like '$key[$i]%' or title like '% $key[$i]%')";
    $i++;
  }
  $query.= ") or ((subtitle like '$key[0]%' or subtitle like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.= " and (subtitle like '$key[$i]%' or subtitle like '% $key[$i]%')";
  }
  $query.= ") or ((seriestitle like '$key[0]%' or seriestitle like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.=" and (seriestitle like '$key[$i]%' or seriestitle like '% $key[$i]%')";
  }
  $query.= ") or ((biblio.notes like '$key[0]%' or biblio.notes like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.=" and (biblio.notes like '$key[$i]%' or biblio.notes like '% $key[$i]%')";
  }
  $query.= ") or ((biblioitems.notes like '$key[0]%' or biblioitems.notes like '% $key[0]%')";
  for ($i=1;$i<$count;$i++){
    $query.=" and (biblioitems.notes like '$key[$i]%' or biblioitems.notes like '% $key[$i]%')";
  }
  if ($search->{'keyword'} =~ /new zealand/i){
    $query.= "or (title like 'nz%' or title like '% nz %' or title like '% nz' or subtitle like 'nz%'
    or subtitle like '% nz %' or subtitle like '% nz' or author like 'nz %' 
    or author like '% nz %' or author like '% nz')"
  }
  if ($search->{'keyword'} eq  'nz' || $search->{'keyword'} eq 'NZ' ||
  $search->{'keyword'} =~ /nz /i || $search->{'keyword'} =~ / nz /i ||
  $search->{'keyword'} =~ / nz/i){
    $query.= "or (title like 'new zealand%' or title like '% new zealand %'
    or title like '% new zealand' or subtitle like 'new zealand%' or
    subtitle like '% new zealand %'
    or subtitle like '% new zealand' or author like 'new zealand%' 
    or author like '% new zealand %' or author like '% new zealand' or 
    seriestitle like 'new zealand%' or seriestitle like '% new zealand %'
    or seriestitle like '% new zealand')"
  }
  $query=$query."))";
  if ($search->{'class'} ne ''){
    my @temp=split(/\|/,$search->{'class'});
    my $count=@temp;
    $query.= "and ( itemtype='$temp[0]'";
    for (my $i=1;$i<$count;$i++){
      $query.=" or itemtype='$temp[$i]'";
     }
  $query.=")"; 
  }
  if ($search->{'dewey'} ne ''){
    $query.= "and (dewey like '$search->{'dewey'}%') ";
  }
   $query.="group by biblio.biblionumber";
   #$query.=" order by author,title";
#  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  $i=0;
  while (my $data=$sth->fetchrow_hashref){
#    my $sti=$dbh->prepare("select dewey,subclass from biblioitems where biblionumber=$data->{'biblionumber'}
#    ");
#    $sti->execute;
#    my ($dewey, $subclass) = $sti->fetchrow;
    my $dewey=$data->{'dewey'};
    my $subclass=$data->{'subclass'};
    $dewey=~s/\.*0*$//;
    ($dewey == 0) && ($dewey='');
    ($dewey) && ($dewey.=" $subclass");
#    $sti->finish;
    $results[$i]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey";
#      print $results[$i];
    $i++;
  }
  $sth->finish;
  $sth=$dbh->prepare("Select biblionumber from bibliosubject where subject
  like '%$search->{'keyword'}%' group by biblionumber");
  $sth->execute;
  while (my $data=$sth->fetchrow_hashref){
    $query="Select * from biblio,biblioitems where
    biblio.biblionumber=$data->{'biblionumber'} and
    biblio.biblionumber=biblioitems.biblionumber ";
    if ($search->{'class'} ne ''){
      my @temp=split(/\|/,$search->{'class'});
      my $count=@temp;
      $query.= " and ( itemtype='$temp[0]'";
      for (my $i=1;$i<$count;$i++){
        $query.=" or itemtype='$temp[$i]'";
      }
      $query.=")"; 
      
    }
    if ($search->{'dewey'} ne ''){
      $query.= "and (dewey like '$search->{'dewey'}%') ";
    }
    my $sth2=$dbh->prepare($query);
    $sth2->execute;
#    print $query;
    while (my $data2=$sth2->fetchrow_hashref){
      my $dewey= $data2->{'dewey'};
      my $subclass=$data2->{'subclass'};
      $dewey=~s/\.*0*$//;          
      ($dewey == 0) && ($dewey='');              
      ($dewey) && ($dewey.=" $subclass") ;                  
#      $sti->finish;              
       $results[$i]="$data2->{'author'}\t$data2->{'title'}\t$data2->{'biblionumber'}\t$data2->{'copyrightdate'}\t$dewey";
#      print $results[$i];
      $i++;   
    }
    $sth2->finish;
  }    
  my $i2=1;
  @results=sort @results;
  my @res;
  my $count=@results;
  $i=1;
  if ($count > 0){
    $res[0]=$results[0];
  }
  while ($i2 < $count){
    if ($results[$i2] ne $res[$i-1]){
      $res[$i]=$results[$i2];
      $i++;
    }
    $i2++;
  }
  $i2=0;
  my @res2;
  $count=@res;
  while ($i2 < $num && $i2 < $count){
    $res2[$i2]=$res[$i2+$offset];
#    print $res2[$i2];
    $i2++;
  }
  $sth->finish;
  $dbh->disconnect;
#  $i--;
#  $i++;
  return($i,@res2);
}

sub CatSearch  {
  my ($env,$type,$search,$num,$offset)=@_;
  my $dbh = &C4Connect;
  my $query = '';
    my @results;
  $search->{'title'}=~ s/'/\\'/g;
  $search->{'author'}=~ s/'/\\'/g;
  $search->{'illustrator'}=~ s/'/\\'/g;
  my $title = lc($search->{'title'}); 
  
  if ($type eq 'loose') {
      if ($search->{'author'} ne ''){
        my @key=split(' ',$search->{'author'});
	my $count=@key;
	my $i=1;
        $query="select *,biblio.author,biblio.biblionumber from
         biblioitems,biblio
	 left join additionalauthors
	 on additionalauthors.biblionumber =biblio.biblionumber
         where biblioitems.biblionumber=biblio.biblionumber 
	 and
         ((biblio.author like '$key[0]%' or biblio.author like '% $key[0]%' or
	 additionalauthors.author like '$key[0]%' or additionalauthors.author 
	 like '% $key[0]%'
	 	 )";    
	 while ($i < $count){ 
           $query=$query." and (
	   biblio.author like '$key[$i]%' or biblio.author like '% $key[$i]%' or
	   additionalauthors.author like '$key[$i]%' or additionalauthors.author like '% $key[$i]%'
	   )";
           $i++;       
	 }   
	 $query=$query.")";
         if ($search->{'title'} ne ''){ 
	   my @key=split(' ',$search->{'title'});
	   my $count=@key;
           my $i=0;
	   $query.= " and (((title like '$key[0]%' or title like '% $key[0]%' or title like '% $key[0]')";
            while ($i<$count){            
	      $query=$query." and (title like '$key[$i]%' or title like '% $key[$i]%' or title like '% $key[$i]')";
              $i++; 
	    }                       
#	    $query.=") or ((subtitle like '$key[0]%' or subtitle like '% $key[0] %' or subtitle like '% $key[0]')"; 
#            for ($i=1;$i<$count;$i++){
#	      $query.=" and (subtitle like '$key[$i]%' or subtitle like '% $key[$i] %' or subtitle like '% $key[$i]')";   
#            }
	    $query.=") or ((seriestitle like '$key[0]%' or seriestitle like '% $key[0]%' or seriestitle like '% $key[0]')";  
            for ($i=1;$i<$count;$i++){                    
	        $query.=" and (seriestitle like '$key[$i]%' or seriestitle like '% $key[$i]%')";
            }                                                             
	    $query.=") or ((unititle like '$key[0]%' or unititle like '% $key[0]%' or unititle like '% $key[0]')";                         
            for ($i=1;$i<$count;$i++){                    
	        $query.=" and (unititle like '$key[$i]%' or unititle like '% $key[$i]%')";   
            }                                                             
	    $query=$query."))"; 
	   #$query=$query. " and (title like '%$search->{'title'}%' 
	   #or seriestitle like '%$search->{'title'}%')";
	 }
	 if ($search->{'class'} ne ''){
      	   my @temp=split(/\|/,$search->{'class'});
	   my $count=@temp;
	   $query.= "and ( itemtype='$temp[0]'";
	   for (my $i=1;$i<$count;$i++){
	     $query.=" or itemtype='$temp[$i]'";
  	   }
	   $query.=") ";
	 }
	 if ($search->{'dewey'} ne ''){
	      $query.=" and dewey='$search->{'dewey'}' ";
         }           
	  if ($search->{'illustrator'} ne ''){
	    $query.=" and illus like '%".$search->{'illustrator'}."%' ";
	  }
	 
	 $query.=" group by biblio.biblionumber";
      } else {
          if ($search->{'title'} ne '') {
	   if ($search->{'ttype'} eq 'exact'){
	     $query="select * from biblio
	     where                            
	     (biblio.title='$search->{'title'}' or (biblio.unititle = '$search->{'title'}'
	     or biblio.unititle like '$search->{'title'} |%' or 
	     biblio.unititle like '%| $search->{'title'} |%' or
	     biblio.unititle like '%| $search->{'title'}') or
	     (biblio.seriestitle = '$search->{'title'}' or
	     biblio.seriestitle like '$search->{'title'} |%' or
	     biblio.seriestitle like '%| $search->{'title'} |%' or
	     biblio.seriestitle like '%| $search->{'title'}')
	     )";
	   } else {
	    my @key=split(' ',$search->{'title'});
	    my $count=@key;
	    my $i=1;
            $query="select * from biblio,biblioitems
	    left join bibliosubtitle on
	    biblio.biblionumber=bibliosubtitle.biblionumber
	    where
            biblioitems.biblionumber=biblio.biblionumber and
	    (((title like '$key[0]%' or title like '% $key[0]%' or title like '% $key[0]')";
	    while ($i<$count){
	      $query=$query." and (title like '$key[$i]%' or title like '% $key[$i]%' or title like '% $key[$i]')";
	      $i++;
	    }
	    $query.=") or ((subtitle like '$key[0]%' or subtitle like '% $key[0]%' or subtitle like '% $key[0]')";
	    for ($i=1;$i<$count;$i++){
	      $query.=" and (subtitle like '$key[$i]%' or subtitle like '% $key[$i]%' or subtitle like '% $key[$i]')";
	    }
	    $query.=") or ((seriestitle like '$key[0]%' or seriestitle like '% $key[0]%' or seriestitle like '% $key[0]')";
	    for ($i=1;$i<$count;$i++){
	      $query.=" and (seriestitle like '$key[$i]%' or seriestitle like '% $key[$i]%')";
	    }
	    $query.=") or ((unititle like '$key[0]%' or unititle like '% $key[0]%' or unititle like '% $key[0]')";
	    for ($i=1;$i<$count;$i++){
	      $query.=" and (unititle like '$key[$i]%' or unititle like '% $key[$i]%')";
	    }
	    $query=$query."))";
	    if ($search->{'class'} ne ''){
	      my @temp=split(/\|/,$search->{'class'});
	      my $count=@temp;
	      $query.= " and ( itemtype='$temp[0]'";
	      for (my $i=1;$i<$count;$i++){
	       $query.=" or itemtype='$temp[$i]'";
	      }
	      $query.=")";
	    }
	    if ($search->{'dewey'} ne ''){
	      $query.=" and dewey='$search->{'dewey'}' ";
	    }
	    if ($search->{'illustrator'} ne ''){
	      $query.=" and illus like '%".$search->{'illustrator'}."%' ";
	    }
	   }
	  } elsif ($search->{'class'} ne ''){
	     $query="select * from biblioitems,biblio where biblio.biblionumber=biblioitems.biblionumber";
	     my @temp=split(/\|/,$search->{'class'});
	      my $count=@temp;
	      $query.= " and ( itemtype='$temp[0]'";
	      for (my $i=1;$i<$count;$i++){
	       $query.=" or itemtype='$temp[$i]'";
	      }
	      $query.=")";
	      if ($search->{'illustrator'} ne ''){
	        $query.=" and illus like '%".$search->{'illustrator'}."%' ";
	      }
	      if ($search->{'dewey'} ne ''){
	        $query.=" and biblioitems.dewey like '$search->{'dewey'}%'";
	      }
	  } elsif ($search->{'dewey'} ne ''){
	     $query="select * from biblioitems,biblio 
	     where biblio.biblionumber=biblioitems.biblionumber
	     and biblioitems.dewey like '$search->{'dewey'}%'";
	  } elsif ($search->{'illustrator'} ne '') {
	  if ($search->{'illustrator'} ne ''){
	     $query="select * from biblioitems,biblio 
	     where biblio.biblionumber=biblioitems.biblionumber
	     and biblioitems.illus like '%".$search->{'illustrator'}."%'";
	  }
	}
          $query .=" group by biblio.biblionumber";	 
      }
  } 
  if ($type eq 'subject'){
    my @key=split(' ',$search->{'subject'});
    my $count=@key;
    my $i=1;
    $query="select distinct(subject) from bibliosubject where( subject like
    '$key[0]%' or subject like '% $key[0]%' or subject like '% $key[0]' or subject like '%($key[0])%')";
    while ($i<$count){
      $query.=" and (subject like '$key[$i]%' or subject like '% $key[$i]%'
      or subject like '% $key[$i]'
      or subject like '%($key[$i])%')";
      $i++;
    }
    if ($search->{'subject'} eq 'NZ' || $search->{'subject'} eq 'nz'){ 
      $query.= " or (subject like 'NEW ZEALAND %' or subject like '% NEW ZEALAND %'
      or subject like '% NEW ZEALAND' or subject like '%(NEW ZEALAND)%' ) ";
    } elsif ( $search->{'subject'} =~ /^nz /i || $search->{'subject'} =~ / nz /i || $search->{'subject'} =~ / nz$/i){
      $query=~ s/ nz/ NEW ZEALAND/ig;
      $query=~ s/nz /NEW ZEALAND /ig;
      $query=~ s/\(nz\)/\(NEW ZEALAND\)/gi;
    }  
  }
  if ($type eq 'precise'){
      $query="select * from items,biblio ";
      if ($search->{'item'} ne ''){
        my $search2=uc $search->{'item'};
        $query=$query." where 
        items.biblionumber=biblio.biblionumber 
	and barcode='$search2'";
      }
      if ($search->{'isbn'} ne ''){
        my $search2=uc $search->{'isbn'};
        my $query1 = "select * from biblioitems where isbn='$search2'";
	my $sth1=$dbh->prepare($query1);
#	print $query1;
	$sth1->execute;
        my $i2=0;
	while (my $data=$sth1->fetchrow_hashref) {
	   $query="select * from biblioitems,biblio where
           biblio.biblionumber = $data->{'biblionumber'}
           and biblioitems.biblionumber = biblio.biblionumber";
	   my $sth=$dbh->prepare($query);
	   $sth->execute;
	   my $data=$sth->fetchrow_hashref;
	   my ($dewey, $subclass) = ($data->{'dewey'}, $data->{'subclass'});
	   $dewey=~s/\.*0*$//;
	   ($dewey == 0) && ($dewey='');
	   ($dewey) && ($dewey.=" $subclass");
           $results[$i2]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey\t$data->{'isbn'}\t$data->{'itemtype'}";
           $i2++; 
	   $sth->finish;
	}
	$sth1->finish;
      }
  }
print $query;
if ($type ne 'precise' && $type ne 'subject'){
  if ($search->{'author'} ne ''){   
      $query=$query." order by biblio.author,title";
  } else {
      $query=$query." order by title";
  }
} else {
  if ($type eq 'subject'){
      $query=$query." order by subject";
  }
}
#print $query;
my $sth=$dbh->prepare($query);
$sth->execute;
my $count=1;
my $i=0;
my $limit= $num+$offset;
while (my $data=$sth->fetchrow_hashref){
  my $sti=$dbh->prepare("select dewey,subclass from biblioitems where biblionumber=$data->{'biblionumber'}");
  $sti->execute;
  my ($dewey, $subclass) = $sti->fetchrow;
  $dewey=~s/\.*0*$//;
  ($dewey == 0) && ($dewey='');
  ($dewey) && ($dewey.=" $subclass");
  $sti->finish;
  if ($count > $offset && $count <= $limit){
    if ($type ne 'subject' && $type ne 'precise'){
       $results[$i]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey\t$data->{'illus'}";
    } elsif ($search->{'isbn'} ne '' || $search->{'item'} ne ''){
       $results[$i]="$data->{'author'}\t$data->{'title'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey\t$data->{'illus'}";
    } else {  
     $results[$i]="$data->{'author'}\t$data->{'subject'}\t$data->{'biblionumber'}\t$data->{'copyrightdate'}\t$dewey\t$data->{'illus'}";
    }
    $i++;
  }
  $count++;
}
$sth->finish;
#if ($type ne 'precise'){
  $count--;
#}
#$count--;
return($count,@results);
}

sub updatesearchstats{
  my ($dbh,$query)=@_;
  
}

sub subsearch {
  my ($env,$subject)=@_;
  my $dbh=C4Connect();
  $subject=$dbh->quote($subject);
  my $query="Select * from biblio,bibliosubject where
  biblio.biblionumber=bibliosubject.biblionumber and
  bibliosubject.subject=$subject group by biblio.biblionumber
  order by biblio.title";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $i=0;
#  print $query;
  my @results;
  while (my $data=$sth->fetchrow_hashref){
    $results[$i]="$data->{'title'}\t$data->{'author'}\t$data->{'biblionumber'}";
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return(@results);
}


sub ItemInfo {
  my ($env,$biblionumber,$type)=@_;
  my $dbh = &C4Connect;
  my $query="Select * from items,biblio,biblioitems,branches 
  where (items.biblioitemnumber = biblioitems.biblioitemnumber)
  and biblioitems.biblionumber=biblio.biblionumber
  and biblio.biblionumber='$biblionumber' and branches.branchcode=
  items.holdingbranch ";
#  print $type;
  if ($type ne 'intra'){
    $query.=" and (items.itemlost<>1 or items.itemlost is NULL)
    and (wthdrawn <> 1 or wthdrawn is NULL)";
  }
  $query=$query."order by items.dateaccessioned desc";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $i=0;
  my @results;
#  print $query;
  while (my $data=$sth->fetchrow_hashref){
    my $iquery = "Select * from issues
    where itemnumber = '$data->{'itemnumber'}'
    and returndate is null";
    my $datedue = '';
    my $isth=$dbh->prepare($iquery);
    $isth->execute;
    if (my $idata=$isth->fetchrow_hashref){
      my @temp=split('-',$idata->{'date_due'});
      $datedue = "$temp[2]/$temp[1]/$temp[0]";
    }
    if ($data->{'itemlost'} eq '1'){
        $datedue='Itemlost';
    }
    if ($data->{'wthdrawn'} eq '1'){
      $datedue="Cancelled";
    }
    if ($datedue eq ''){
       my ($rescount,$reserves)=FindReserves($biblionumber,'');   
       if ($rescount >0){                                
          $datedue='Request';
       }
    }
    $isth->finish;
    my $class = $data->{'classification'};
    my $dewey = $data->{'dewey'};
    $dewey =~ s/0+$//;
    if ($dewey eq "000.") { $dewey = "";};    
    if ($dewey < 10){$dewey='00'.$dewey;}
    if ($dewey < 100 && $dewey > 10){$dewey='0'.$dewey;}
    if ($dewey <= 0){
      $dewey='';
    }
    $dewey=~ s/\.$//;
    $class = $class.$dewey;
    if ($dewey ne ''){
      $class = $class.$data->{'subclass'};
    }
 #   $results[$i]="$data->{'title'}\t$data->{'barcode'}\t$datedue\t$data->{'branchname'}\t$data->{'dewey'}";
    my @temp=split('-',$data->{'datelastseen'});
    my $date="$temp[2]/$temp[1]/$temp[0]";
    $results[$i]="$data->{'title'}\t$data->{'barcode'}\t$datedue\t$data->{'branchname'}\t$class\t$data->{'itemnumber'}\t$data->{'itemtype'}\t$date\t$data->{'biblioitemnumber'}\t$data->{'volumeddesc'}";
#    print "$results[$i] <br>";
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return(@results);
}

sub GetItems {
   my ($env,$biblionumber)=@_;
   #debug_msg($env,"GetItems");
   my $dbh = &C4Connect;
   my $query = "Select * from biblioitems where (biblionumber = $biblionumber)";
   #debug_msg($env,$query);
   my $sth=$dbh->prepare($query);
   $sth->execute;
   #debug_msg($env,"executed query");      
   my $i=0;
   my @results;
   while (my $data=$sth->fetchrow_hashref) {
      #debug_msg($env,$data->{'biblioitemnumber'});
      my $dewey = $data->{'dewey'};
      $dewey =~ s/0+$//; 
      my $line = $data->{'biblioitemnumber'}."\t".$data->{'itemtype'};
      $line = $line."\t$data->{'classification'}\t$dewey";
      $line = $line."\t$data->{'subclass'}\t$data->{isbn}";
      $line = $line."\t$data->{'volume'}\t$data->{number}";
      my $isth= $dbh->prepare("select * from items where biblioitemnumber = $data->{'biblioitemnumber'}");
      $isth->execute;
      while (my $idata = $isth->fetchrow_hashref) {
        my $iline = $idata->{'barcode'}."[".$idata->{'holdingbranch'}."[";
	if ($idata->{'notforloan'} == 1) {
	  $iline = $iline."NFL ";
	}
	if ($idata->{'itemlost'} == 1) {
	  $iline = $iline."LOST ";
	}        
        $line = $line."\t$iline"; 
      }
      $isth->finish;
      $results[$i] = $line;
      $i++;      
   }
   $sth->finish;
   $dbh->disconnect;
   return(@results);
}	     
  
sub itemdata {
  my ($barcode)=@_;
  my $dbh=C4Connect;
  my $query="Select * from items,biblioitems where barcode='$barcode'
  and items.biblioitemnumber=biblioitems.biblioitemnumber";
#  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;
  $dbh->disconnect;
  return($data);
}

sub bibdata {
  my ($bibnum,$type)=@_;
  my $dbh=C4Connect;
  my $query="Select *,biblio.notes  from biblio,biblioitems,bibliosubtitle where biblio.biblionumber=$bibnum
  and biblioitems.biblionumber=$bibnum and 
(bibliosubtitle.biblionumber=$bibnum)"; 
#  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;
  $query="Select * from bibliosubject where biblionumber='$bibnum'";
  $sth=$dbh->prepare($query);
  $sth->execute;
  while (my $dat=$sth->fetchrow_hashref){
    $data->{'subject'}.=" | $dat->{'subject'}";

  }
  #print $query;
  $sth->finish;
  $dbh->disconnect;
  return($data);
}

sub bibitemdata {
  my ($bibitem)=@_;
  my $dbh=C4Connect;
  my $query="Select *,biblioitems.notes as bnotes from biblio,biblioitems,itemtypes where biblio.biblionumber=
  biblioitems.biblionumber and biblioitemnumber=$bibitem and
  biblioitems.itemtype=itemtypes.itemtype";
#  print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;
  $dbh->disconnect;
  return($data);
}

sub subject {
  my ($bibnum)=@_;
  my $dbh=C4Connect;
  my $query="Select * from bibliosubject where biblionumber=$bibnum";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my @results;
  my $i=0;
  while (my $data=$sth->fetchrow_hashref){
    $results[$i]=$data;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,\@results);
}

sub addauthor {
  my ($bibnum)=@_;
  my $dbh=C4Connect;
  my $query="Select * from additionalauthors where biblionumber=$bibnum";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my @results;
  my $i=0;
  while (my $data=$sth->fetchrow_hashref){
    $results[$i]=$data;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,\@results);
}

sub subtitle {
  my ($bibnum)=@_;
  my $dbh=C4Connect;
  my $query="Select * from bibliosubtitle where biblionumber=$bibnum";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my @results;
  my $i=0;
  while (my $data=$sth->fetchrow_hashref){
    $results[$i]=$data;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,\@results);
}



sub itemissues {
  my ($bibitem,$biblio)=@_;
  my $dbh=C4Connect;
  my $query="Select * from items where 
  items.biblioitemnumber='$bibitem'";
  my $sth=$dbh->prepare($query) || die $dbh->errstr;
  $sth->execute || die $sth->errstr;
  my $i=0;
  my @results;
  while (my $data=$sth->fetchrow_hashref) {
    my $query2="select * from issues,borrowers where itemnumber=$data->{'itemnumber'}
    and returndate is NULL and issues.borrowernumber=borrowers.borrowernumber";
    my $sth2=$dbh->prepare($query2);
    $sth2->execute;
    if (my $data2=$sth2->fetchrow_hashref) {
      $data->{'date_due'}=$data2->{'date_due'};
      $data->{'card'}=$data2->{'cardnumber'};
    } else {
      if ($data->{'wthdrawn'} eq '1') {
        $data->{'date_due'}='Cancelled';
      } else {
          $data->{'date_due'}='Available';
      }
    }
    $sth2->finish;
    $query2="select * from issues,borrowers where itemnumber='$data->{'itemnumber'}'
    and issues.borrowernumber=borrowers.borrowernumber 
    order by date_due desc";
    my $sth2=$dbh->prepare($query2) || die $dbh->errstr;
    $sth2->execute || die $sth2->errstr;
    for (my $i2=0;$i2<2;$i2++){
      if (my $data2=$sth2->fetchrow_hashref){
        $data->{"timestamp$i2"}=$data2->{'timestamp'};
        $data->{"card$i2"}=$data2->{'cardnumber'};
	$data->{"borrower$i2"}=$data2->{'borrowernumber'};
      }
    }
    $sth2->finish;
    $results[$i]=$data;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return(@results);
}

sub itemnodata {
  my ($env,$dbh,$itemnumber) = @_;
  $dbh=C4Connect;
  my $query="Select * from biblio,items,biblioitems
    where items.itemnumber = '$itemnumber'
    and biblio.biblionumber = items.biblionumber
    and biblioitems.biblioitemnumber = items.biblioitemnumber";
  my $sth=$dbh->prepare($query);
#  print $query;
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;  
  $dbh->disconnect;
  return($data);	       
}

#used by member enquiries from the intranet
#called by member.pl
sub BornameSearch  {
  my ($env,$searchstring,$type)=@_;
  my $dbh = &C4Connect;
  $searchstring=~ s/\'/\\\'/g;
  my @data=split(' ',$searchstring);
  my $count=@data;
  my $query="Select * from borrowers 
  where ((surname like \"$data[0]%\" or surname like \"% $data[0]%\" 
  or firstname  like \"$data[0]%\" or firstname like \"% $data[0]%\" 
  or othernames like \"$data[0]%\" or othernames like \"% $data[0]%\")
  ";
  for (my $i=1;$i<$count;$i++){
    $query=$query." and (surname like \"$data[$i]%\" or surname like \"% $data[$i]%\"                  
    or firstname  like \"$data[$i]%\" or firstname like \"% $data[$i]%\"                    
    or othernames like \"$data[$i]%\" or othernames like \"% $data[$i]%\")";
  }
  $query=$query.") or cardnumber = \"$searchstring\"
  order by surname,firstname";
#  print $query,"\n";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my @results;
  my $cnt=0;
  while (my $data=$sth->fetchrow_hashref){
    push(@results,$data);
    $cnt ++;
  }
#  $sth->execute;
  $sth->finish;
  $dbh->disconnect;
  return ($cnt,\@results);
}

sub borrdata {
  my ($cardnumber,$bornum)=@_;
  $cardnumber = uc $cardnumber;
  my $dbh=C4Connect;
  my $query;
  if ($bornum eq ''){
    $query="Select * from borrowers where cardnumber='$cardnumber'";
  } else {
      $query="Select * from borrowers where borrowernumber='$bornum'";
  }
  #print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;
  $dbh->disconnect;
  return($data);
}

sub borrissues {
  my ($bornum)=@_;
  my $dbh=C4Connect;
  my $query;
  $query="Select * from issues,biblio,items where borrowernumber='$bornum' and
items.itemnumber=issues.itemnumber and
items.biblionumber=biblio.biblionumber and issues.returndate is NULL order
by date_due";
  #print $query;
  my $sth=$dbh->prepare($query);
    $sth->execute;
  my @result;
  my $i=0;
  while (my $data=$sth->fetchrow_hashref){
    $result[$i]=$data;;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,\@result);
}

sub allissues { 
  my ($bornum,$order,$limit)=@_; 
  my $dbh=C4Connect;   
  my $query;     
  $query="Select * from issues,biblio,items,biblioitems       
  where borrowernumber='$bornum' and         
  items.biblioitemnumber=biblioitems.biblioitemnumber and           
  items.itemnumber=issues.itemnumber and             
  items.biblionumber=biblio.biblionumber";               
  $query.=" order by $order";                 
  if ($limit !=0){                   
    $query.=" limit $limit";                     
  }                         
  #print $query;                           
  my $sth=$dbh->prepare($query);          
  $sth->execute;
  my @result;   
  my $i=0;    
  while (my $data=$sth->fetchrow_hashref){                                      
    $result[$i]=$data;; 
    $i++;     
  }         
  $sth->finish;           
  $dbh->disconnect;             
  return($i,\@result);               
}

sub borrdata2 {
  my ($env,$bornum)=@_;
  my $dbh=C4Connect;
  my $query="Select count(*) from issues where borrowernumber='$bornum' and
    returndate is NULL";
    # print $query;
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $data=$sth->fetchrow_hashref;
  $sth->finish;
  $sth=$dbh->prepare("Select count(*) from issues where
    borrowernumber='$bornum' and date_due < now() and returndate is NULL");
  $sth->execute;
  my $data2=$sth->fetchrow_hashref;
  $sth->finish;
  $sth=$dbh->prepare("Select sum(amountoutstanding) from accountlines where
    borrowernumber='$bornum'");
  $sth->execute;
  my $data3=$sth->fetchrow_hashref;
  $sth->finish;
  $dbh->disconnect;

return($data2->{'count(*)'},$data->{'count(*)'},$data3->{'sum(amountoutstanding)'});
}
		  
sub getacctlist {
   my ($env,$params) = @_;
   my $dbh=C4Connect;
   my @acctlines;
   my $numlines;
   my $query = "Select borrowernumber, accountno, date, amount, description,
      dispute, accounttype, amountoutstanding, barcode, title
      from accountlines,items,biblio   
      where borrowernumber = $params->{'borrowernumber'} ";
   if ($params->{'acctno'} ne "") {
      my $query = $query." and accountlines.accountno = $params->{'acctno'} ";
      }
   my $query = $query." and accountlines.itemnumber = items.itemnumber
      and items.biblionumber = biblio.biblionumber
      and accountlines.amountoutstanding<>0 order by date";
   my $sth=$dbh->prepare($query);
#   print $query;
   $sth->execute;
   my $total=0;
   while (my $data=$sth->fetchrow_hashref){
      $acctlines[$numlines] = $data;
      $numlines++;
      $total = $total+ $data->{'amountoutstanding'};
   }
   return ($numlines,\@acctlines,$total);
   $sth->finish;
   $dbh->disconnect;
}

sub getboracctrecord {
   my ($env,$params) = @_;
   my $dbh=C4Connect;
   my @acctlines;
   my $numlines=0;
   my $query= "Select * from accountlines where
borrowernumber=$params->{'borrowernumber'} order by date desc,timestamp desc";
   my $sth=$dbh->prepare($query);
#   print $query;
   $sth->execute;
   my $total=0;
   while (my $data=$sth->fetchrow_hashref){
#      if ($data->{'itemnumber'} ne ''){
#        $query="Select * from items,biblio where items.itemnumber=
#	'$data->{'itemnumber'}' and biblio.biblionumber=items.biblionumber";
#	my $sth2=$dbh->prepare($query);
#	$sth2->execute;
#	my $data2=$sth2->fetchrow_hashref;
#	$sth2->finish;
#	$data=$data2;
 #     }
      $acctlines[$numlines] = $data;
      $numlines++;
      $total = $total+ $data->{'amountoutstanding'};
   }
   $sth->finish;
   $dbh->disconnect;
   return ($numlines,\@acctlines,$total);
}

sub itemcount { 
  my ($env,$bibnum,$type)=@_; 
  my $dbh=C4Connect;   
  my $query="Select * from items where     
  biblionumber=$bibnum ";
  if ($type ne 'intra'){
    $query.=" and (itemlost <>1 or itemlost is NULL) and
    (wthdrawn <> 1 or wthdrawn is NULL)";      
  }
  my $sth=$dbh->prepare($query);         
  #  print $query;           
  $sth->execute;           
  my $count=0;             
  my $lcount=0;               
  my $nacount=0;                 
  my $fcount=0;
  my $scount=0;
  my $lostcount=0;
  my $mending=0;
  my $transit=0;
  my $ocount=0;
  while (my $data=$sth->fetchrow_hashref){
    $count++;                     
    my $query2="select * from issues,items where issues.itemnumber=                          
    '$data->{'itemnumber'}' and returndate is NULL
    and items.itemnumber=issues.itemnumber and (items.itemlost <>1 or
    items.itemlost is NULL)"; 
    my $sth2=$dbh->prepare($query2);     
    $sth2->execute;         
    if (my $data2=$sth2->fetchrow_hashref){         
       $nacount++;         
    } else {         
      if ($data->{'holdingbranch'} eq 'C'){         
        $lcount++;               
      }                       
      if ($data->{'holdingbranch'} eq 'F' || $data->{'holdingbranch'} eq 'FP'){         
        $fcount++;               
      }                       
      if ($data->{'holdingbranch'} eq 'S' || $data->{'holdingbranch'} eq 'SP'){         
        $scount++;               
      }                       
      if ($data->{'itemlost'} eq '1'){
        $lostcount++;
      }
      if ($data->{'holdingbranch'} eq 'FM'){
        $mending++;
      }
      if ($data->{'holdingbranch'} eq 'TR'){
        $transit++;
      }
    }                             
    $sth2->finish;     
  } 
#  if ($count == 0){
    my $query2="Select * from aqorders where biblionumber=$bibnum";
    my $sth2=$dbh->prepare($query2);
    $sth2->execute;
    if (my $data=$sth2->fetchrow_hashref){
      $ocount=$data->{'quantity'} - $data->{'quantityreceived'};
    }
#    $count+=$ocount;
    $sth2->finish;
  $sth->finish; 
  $dbh->disconnect;                   
  return ($count,$lcount,$nacount,$fcount,$scount,$lostcount,$mending,$transit,$ocount); 
}

sub ItemType {
  my ($type)=@_;
  my $dbh=C4Connect;
  my $query="select description from itemtypes where itemtype='$type'";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $dat=$sth->fetchrow_hashref;
  $sth->finish;
  $dbh->disconnect;
  return ($dat->{'description'});
}

sub bibitems {
  my ($bibnum)=@_;
  my $dbh=C4Connect;
  my $query="Select * from biblioitems,itemtypes,items where
  biblioitems.biblionumber='$bibnum' and biblioitems.itemtype=itemtypes.itemtype and
  biblioitems.biblioitemnumber=items.biblioitemnumber group by
  items.biblioitemnumber";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my $i=0;
  my @results;
  while (my $data=$sth->fetchrow_hashref){
    $results[$i]=$data;
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return($i,@results);
}

sub barcodes{
  my ($biblioitemnumber)=@_;
  my $dbh=C4Connect;
  my $query="Select barcode from items where
   biblioitemnumber='$biblioitemnumber'";
  my $sth=$dbh->prepare($query);
  $sth->execute;
  my @barcodes;
  my $i=0;
  while (my $data=$sth->fetchrow_hashref){
    $barcodes[$i]=$data->{'barcode'};
    $i++;
  }
  $sth->finish;
  $dbh->disconnect;
  return(@barcodes);
  
}
END { }       # module clean-up code here (global destructor)






