Fix for bug 1437, items not showing on moredetail.pl
authorChris Cormack <crc@liblime.com>
Sun, 30 Sep 2007 22:49:53 +0000 (17:49 -0500)
committerChris Cormack <crc@liblime.com>
Sun, 30 Sep 2007 22:58:02 +0000 (17:58 -0500)
Signed-off-by: Chris Cormack <crc@liblime.com>
C4/Biblio.pm
catalogue/moredetail.pl
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl

index 71c7e09..6f5e280 100644 (file)
@@ -68,6 +68,7 @@ push @EXPORT, qw(
   &GetUsedMarcStructure
 
   &GetItemsInfo
+  &GetItemsByBiblioitemnumber
   &GetItemnumberFromBarcode
   &get_itemnumbers_of
   &GetXmlBiblio
@@ -1392,6 +1393,68 @@ sub GetItemInfosOf {
     return get_infos_of( $query, 'itemnumber' );
 }
 
+=head2 GetItemsByBiblioitemnumber
+
+=over 4
+
+GetItemsByBiblioitemnumber($biblioitemnumber);
+
+Returns an arrayref of hashrefs suitable for use in a TMPL_LOOP
+Called by moredetail.pl
+
+=back
+
+=cut
+
+sub GetItemsByBiblioitemnumber {
+       my ( $bibitem ) = @_;
+       my $dbh = C4::Context->dbh;
+       my $sth = $dbh->prepare("SELECT * FROM items WHERE items.biblioitemnumber = ?") || die $dbh->errstr;
+       # Get all items attached to a biblioitem
+    my $i = 0;
+    my @results; 
+    $sth->execute($bibitem) || die $sth->errstr;
+    while ( my $data = $sth->fetchrow_hashref ) {  
+               # Foreach item, get circulation information
+               my $sth2 = $dbh->prepare( "SELECT * FROM issues,borrowers
+                                   WHERE itemnumber = ?
+                                   AND returndate is NULL
+                                   AND issues.borrowernumber = borrowers.borrowernumber"
+        );
+        $sth2->execute( $data->{'itemnumber'} );
+        if ( my $data2 = $sth2->fetchrow_hashref ) {
+                       # if item is out, set the due date and who it is out too
+                       $data->{'date_due'}   = $data2->{'date_due'};
+                       $data->{'cardnumber'} = $data2->{'cardnumber'};
+                       $data->{'borrowernumber'}   = $data2->{'borrowernumber'};
+               }
+        else {
+                       # set date_due to blank, so in the template we check itemlost, and wthdrawn 
+                       $data->{'date_due'} = '';                                                                                                         
+               }    # else         
+        $sth2->finish;
+        # Find the last 3 people who borrowed this item.                  
+        my $query2 = "SELECT * FROM issues, borrowers WHERE itemnumber = ?
+                      AND issues.borrowernumber = borrowers.borrowernumber
+                      AND returndate is not NULL
+                      ORDER BY returndate desc,timestamp desc LIMIT 3";
+        $sth2 = $dbh->prepare($query2) || die $dbh->errstr;
+        $sth2->execute( $data->{'itemnumber'} ) || die $sth2->errstr;
+        my $i2 = 0;
+        while ( my $data2 = $sth2->fetchrow_hashref ) {
+                       $data->{"timestamp$i2"} = $data2->{'timestamp'};
+                       $data->{"card$i2"}      = $data2->{'cardnumber'};
+                       $data->{"borrower$i2"}  = $data2->{'borrowernumber'};
+                       $i2++;
+               }
+        $sth2->finish;
+        push(@results,$data);
+    } 
+    $sth->finish;
+    return (\@results); 
+}
+
+
 =head2 GetBiblioItemInfosOf
 
 =over 4
index 86e0048..d883586 100755 (executable)
@@ -23,7 +23,7 @@ use strict;
 require Exporter;
 use C4::Koha;
 use CGI;
-use C4::Biblio;             # to use &GetBiblioItemData &itemissues
+use C4::Biblio;             # to use &GetBiblioItemData &GetItemsByBiblioitemnumber
 use C4::Acquisition;
 use C4::Output;             # contains gettemplate
 use C4::Auth;
@@ -54,19 +54,19 @@ my $bi=$query->param('bi');
 my $data=GetBiblioItemData($bi);
 my $dewey = $data->{'dewey'};
 # FIXME Dewey is a string, not a number, & we should use a function
-$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/\.$//;
-$data->{'dewey'}=$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/\.$//;
+$data->{'dewey'}=$dewey;
 
 my @results;
 
-my $items= GetItemIssues($bi);
+my $items= GetItemsByBiblioitemnumber($bi);
 my $count=@$items;
 $data->{'count'}=$count;
 
@@ -83,18 +83,16 @@ foreach my $item (@$items){
     $item->{'ordernumber'} = $ordernum;
     $item->{'booksellerinvoicenumber'} = $order->{'booksellerinvoicenumber'};
 
-    if ($item->{'date_due'} eq 'Available'){
+    if ($item->{'date_due'} eq ''){
         $item->{'issue'}= 0;
     } else {
         $item->{'date_due'} = format_date($item->{'date_due'});
         $item->{'issue'}= 1;
-        $item->{'borrowernumber'} = $item->{'borrower'};
-        $item->{'cardnumber'} = $item->{'card'};
     }
 }
 
 $template->param(BIBITEM_DATA => \@results);
-$template->param(ITEM_DATA => \@$items);
+$template->param(ITEM_DATA => $items);
 $template->param(loggedinuser => $loggedinuser);
 
 output_html_with_http_headers $query, $cookie, $template->output;
index 73496d4..9c70749 100644 (file)
@@ -84,4 +84,4 @@ NAME="biblionumber"-->&amp;itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">Modif
 <!-- TMPL_INCLUDE NAME="cat-menu.inc" -->
 </div>
 </div>
-<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
\ No newline at end of file
+<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->