C4::Koha - added GetAuthorisedValueCategories
[koha.git] / opac / opac-reserve.pl
index bbd3dec..d89e60a 100755 (executable)
@@ -19,6 +19,7 @@ use strict;
 require Exporter;
 use CGI;
 use C4::Biblio;
+use C4::Items;
 use C4::Auth;    # checkauth, getborrowernumber.
 use C4::Koha;
 use C4::Circulation;
@@ -47,6 +48,10 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
 # get borrower information ....
 my ( $borr, $flags ) = GetMemberDetails( $borrowernumber );
 
+# get branches and itemtypes
+my $branches = GetBranches();
+my $itemtypes = GetItemTypes();
+
 # get biblionumber.....
 my $biblionumber = $query->param('biblionumber');
 
@@ -71,8 +76,6 @@ $template->param( rank => $rank );
 my $branch = $query->param('branch');
 $template->param( branch => $branch );
 
-my $branches = GetBranches();
-
 # make sure it's a real branch
 if ( !$branches->{$branch} ) {
     $branch = '';
@@ -147,10 +150,13 @@ my %types;
 my %itemtypes;
 my @duedates;
 #die @items;
+my %itemhash;
+my $forloan;
 foreach my $itm (@items) {
     push @duedates, { date_due => format_date( $itm->{'date_due'} ) }
       if defined $itm->{'date_due'};
     $itm->{ $itm->{'publictype'} } = 1;
+       warn $itm->{'notforloan'};
     my $fee = GetReserveFee( undef, $borrowernumber, $itm->{'biblionumber'},
         'a', ( $itm->{'biblioitemnumber'} ) );
     $fee = sprintf "%.02f", $fee;
@@ -169,6 +175,10 @@ foreach my $itm (@items) {
             push @{ $types{$pty}->{'items'} }, $itm;
         }
     }
+       $itemhash{$itm->{'itemnumber'}}=$itm;
+       if (!$itm->{'notforloan'} && !$itm->{'itemnotforloan'}){
+               $forloan=1;
+       }
 }
 
 $template->param( ITEMS => \@duedates );
@@ -233,7 +243,7 @@ if ( $query->param('place_reserve') ) {
     } else {
         AddReserve($branch,$borrowernumber,$biblionumber,'a',\@realbi,$rank,$notes,$bibdata->{'title'},$checkitem, $found);
     }
-    print $query->redirect("/cgi-bin/koha/opac-user.pl");
+    print $query->redirect("/cgi-bin/koha/opac-user.pl#opac-user-holds");
 }
 else {
 
@@ -270,13 +280,13 @@ else {
     }
     my @reserves = GetReservesFromBorrowernumber( $borrowernumber );
     $template->param( RESERVES => \@reserves );
-    if ( scalar(@$reserves) >= $MAXIMUM_NUMBER_OF_RESERVES ) {
+    if ( scalar(@reserves) >= $MAXIMUM_NUMBER_OF_RESERVES ) {
         $template->param( message => 1 );
         $noreserves = 1;
-        $template->param( too_many_reserves => scalar($reserves));
+        $template->param( too_many_reserves => scalar(@reserves));
     }
-    foreach my $res (@$reserves) {
-        if ( $res->{'biblionumber'} == $biblionumber ) {
+    foreach my $res (@reserves) {
+        if ( $res->{'biblionumber'} == $biblionumber && $res->{'borrowernumber'} == $borrowernumber) {
             $template->param( message => 1 );
             $noreserves = 1;
             $template->param( already_reserved => 1 );
@@ -289,25 +299,17 @@ else {
 }
 
 
-my @branchcodes;
 my %itemnumbers_of_biblioitem;
 my @itemnumbers  = @{ get_itemnumbers_of($biblionumber)->{$biblionumber} };
 my $iteminfos_of = GetItemInfosOf(@itemnumbers);
 
 foreach my $itemnumber (@itemnumbers) {
-    push( @branchcodes,
-        $iteminfos_of->{$itemnumber}->{homebranch},
-        $iteminfos_of->{$itemnumber}->{holdingbranch} );
-
     my $biblioitemnumber = $iteminfos_of->{$itemnumber}->{biblioitemnumber};
     push( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, $itemnumber );
 }
 
-# @branchcodes = uniq @branchcodes;
-
 my @biblioitemnumbers = keys %itemnumbers_of_biblioitem;
 
-my $branchinfos_of      = get_branchinfos_of(@branchcodes);
 my $notforloan_label_of = get_notforloan_label_of();
 my $biblioiteminfos_of  = GetBiblioItemInfosOf(@biblioitemnumbers);
 
@@ -316,29 +318,27 @@ foreach my $biblioitemnumber (@biblioitemnumbers) {
     push @itemtypes, $biblioiteminfos_of->{$biblioitemnumber}{itemtype};
 }
 
-my $itemtypeinfos_of = get_itemtypeinfos_of(@itemtypes);
-
 my @bibitemloop;
 
 foreach my $biblioitemnumber (@biblioitemnumbers) {
     my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber};
 
     $biblioitem->{description} =
-      $itemtypeinfos_of->{ $biblioitem->{itemtype} }{description};
+      $itemtypes->{ $biblioitem->{itemtype} }{description};
 
     foreach
       my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } )
     {
-        my $item = $iteminfos_of->{$itemnumber};
+               my $item = $itemhash{$itemnumber};
 
         $item->{homebranchname} =
-          $branchinfos_of->{ $item->{homebranch} }{branchname};
+          $branches->{ $item->{homebranch} }{branchname};
 
         # if the holdingbranch is different than the homebranch, we show the
         # holdingbranch of the document too
         if ( $item->{homebranch} ne $item->{holdingbranch} ) {
             $item->{holdingbranchname} =
-              $branchinfos_of->{ $item->{holdingbranch} }{branchname};
+              $branches->{ $item->{holdingbranch} }{branchname};
         }
         
 #      add information
@@ -367,7 +367,7 @@ foreach my $biblioitemnumber (@biblioitemnumbers) {
         }
 
         # Management of the notforloan document
-        if ( $item->{notforloan} ) {
+        if ( $item->{notforloan} || $item->{itemnotforloan}) {
             $item->{backgroundcolor} = 'other';
             $item->{notforloanvalue} =
               $notforloan_label_of->{ $item->{notforloan} };
@@ -391,14 +391,15 @@ foreach my $biblioitemnumber (@biblioitemnumbers) {
         if ( $transfertwhen ne '' ) {
             $item->{transfertwhen} = format_date($transfertwhen);
             $item->{transfertfrom} =
-              $branchinfos_of->{$transfertfrom}{branchname};
-            $item->{transfertto} = $branchinfos_of->{$transfertto}{branchname};
+              $branches->{$transfertfrom}{branchname};
+            $item->{transfertto} = $branches->{$transfertto}{branchname};
                $item->{nocancel} = 1;
         }
 
         # If there is no loan, return and transfer, we show a checkbox.
         $item->{notforloan} = $item->{notforloan} || 0;
 
+       # FIXME: every library will define this differently
         # An item is available only if:
         if (
             not defined $reservedate    # not reserved yet
@@ -411,6 +412,14 @@ foreach my $biblioitemnumber (@biblioitemnumbers) {
             $item->{available} = 1;
         }
 
+       # FIXME: move this to a pm
+        my $dbh = C4::Context->dbh;
+        my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'");
+        $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber});
+        while (my $wait_hashref = $sth2->fetchrow_hashref) {
+            $item->{waitingdate} = format_date($wait_hashref->{waitingdate});
+        }
+       $item->{imageurl} = getitemtypeimagesrc() . "/".$itemtypes->{ $item->{itype} }{imageurl};
         push @{ $biblioitem->{itemloop} }, $item;
     }
 
@@ -419,6 +428,7 @@ foreach my $biblioitemnumber (@biblioitemnumbers) {
 
 # display infos
 $template->param(
+       forloan           => $forloan,
     bibitemloop       => \@bibitemloop,
 );
 output_html_with_http_headers $query, $cookie, $template->output;