use strict;
use warnings;
use CGI;
-use C4::Biblio;
-use C4::Items;
use C4::Auth; # checkauth, getborrowernumber.
use C4::Koha;
use C4::Circulation;
use C4::Reserves;
+use C4::Biblio;
+use C4::Items;
use C4::Output;
use C4::Dates qw/format_date/;
use C4::Context;
}
# pass the pickup branch along....
-my $branch = $query->param('branch');
+my $branch = $query->param('branch') || C4::Context->userenv->{branch} || '' ;
+($branches->{$branch}) or $branch = ""; # Confirm branch is real
$template->param( branch => $branch );
-# make sure it's a real branch
-if ( !$branch || !$branches->{$branch} ) {
- $branch = '';
-}
-$template->param( branchname => $branches->{$branch}->{'branchname'} );
-
# make branch selection options...
-my @branches;
-my @select_branch;
-my %select_branches;
-
-my @CGIbranchlooparray;
-
-foreach my $branch ( keys %$branches ) {
- if ($branch) {
- my %line;
- $line{branch} = $branches->{$branch}->{'branchname'};
- $line{value} = $branch;
- if ($line{value} eq C4::Context->userenv->{'branch'}) {
- $line{selected} = 1;
- }
- push @CGIbranchlooparray, \%line;
- }
-}
-@CGIbranchlooparray =
- sort { $a->{branch} cmp $b->{branch} } @CGIbranchlooparray;
-my $CGIbranchloop = \@CGIbranchlooparray;
+my $CGIbranchloop = GetBranchesLoop($branch);
$template->param( CGIbranch => $CGIbranchloop );
-
#Debug
#output_html_with_http_headers($query,$cookie,"<html><head></head><body> @biblionumbers </body></html>\n");
#exit;
}
# Compute the priority rank.
- my ( $rank, $reserves ) = GetReservesFromBiblionumber($biblioNumber);
+ my ( $rank, $reserves ) = GetReservesFromBiblionumber($biblioNumber,1);
$biblioData->{reservecount} = $rank;
foreach my $res (@$reserves) {
my $found = $res->{'found'};
#
#
if ( $query->param('place_reserve') ) {
-
my $notes = $query->param('notes');
+ my $canreserve=0;
# List is composed of alternating biblio/item/branch
my $selectedItems = $query->param('selecteditems');
while (@selectedItems) {
my $biblioNum = shift(@selectedItems);
- my $itemNum = shift(@selectedItems);
- my $branch = shift(@selectedItems); # i.e., branch code, not name
+ my $itemNum = shift(@selectedItems);
+ my $branch = shift(@selectedItems); # i.e., branch code, not name
my $singleBranchMode = $template->param('singleBranchMode');
if ($singleBranchMode) {
my $biblioData = $biblioDataHash{$biblioNum};
my $found;
+ # Check for user supplied reserve date
+ my $startdate;
+ if (
+ C4::Context->preference( 'AllowHoldDateInFuture' ) &&
+ C4::Context->preference( 'OPACAllowHoldDateInFuture' )
+ ) {
+ $startdate = $query->param("reserve_date_$biblioNum");
+ }
+
# If a specific item was selected and the pickup branch is the same as the
# holdingbranch, force the value $rank and $found.
my $rank = $biblioData->{rank};
if ($itemNum ne ''){
+ $canreserve = 1 if CanItemBeReserved($borrowernumber,$itemNum);
$rank = '0' unless C4::Context->preference('ReservesNeedReturns');
my $item = GetItem($itemNum);
if ( $item->{'holdingbranch'} eq $branch ){
}
}
else {
+ $canreserve = 1 if CanBookBeReserved($borrowernumber,$biblioNum);
# Inserts a null into the 'itemnumber' field of 'reserves' table.
$itemNum = undef;
}
# Here we actually do the reserveration. Stage 3.
- AddReserve($branch, $borrowernumber, $biblioNum, 'a', [$biblioNum], $rank, $notes,
- $biblioData->{'title'}, $itemNum, $found);
+ AddReserve($branch, $borrowernumber, $biblioNum, 'a', [$biblioNum], $rank, $startdate, $notes,
+ $biblioData->{'title'}, $itemNum, $found) if ($canreserve);
}
print $query->redirect("/cgi-bin/koha/opac-user.pl#opac-user-holds");
my $biblioLoop = [];
my $numBibsAvailable = 0;
+my $itemdata_enumchron = 0;
my $itemLevelTypes = C4::Context->preference('item-level_itypes');
$template->param('item-level_itypes' => $itemLevelTypes);
my $biblioData = $biblioDataHash{$biblioNum};
if (! $biblioData) {
$template->param(message=>1, bad_biblionumber=>$biblioNum);
- &get_out($query, $cookie, $template->output);
+ &get_out($query, $cookie, $template->output);
}
$biblioLoopIter{biblionumber} = $biblioData->{biblionumber};
if (!$itemInfo->{'notforloan'} && !($itemInfo->{'itemnotforloan'} > 0)) {
$biblioLoopIter{forloan} = 1;
- }
+ }
}
- $biblioLoopIter{itemTypeDescription} =
- $itemTypes->{$biblioData->{itemtype}}{description};
-
+ $biblioLoopIter{itemTypeDescription} = $itemTypes->{$biblioData->{itemtype}}{description};
$biblioLoopIter{itemLoop} = [];
my $numCopiesAvailable = 0;
$itemLoopIter->{barcode} = $itemInfo->{barcode};
$itemLoopIter->{homeBranchName} = $branches->{$itemInfo->{homebranch}}{branchname};
$itemLoopIter->{callNumber} = $itemInfo->{itemcallnumber};
+ $itemLoopIter->{enumchron} = $itemInfo->{enumchron};
$itemLoopIter->{copynumber} = $itemInfo->{copynumber};
if ($itemLevelTypes) {
$itemLoopIter->{description} = $itemInfo->{description};
if ( defined $reservedate ) {
$itemLoopIter->{backgroundcolor} = 'reserved';
$itemLoopIter->{reservedate} = format_date($reservedate);
- $itemLoopIter->{ReservedForBorrowernumber} = $reservedfor;
- $itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
- $itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
- $itemLoopIter->{ExpectedAtLibrary} = $expectedAt;
+ $itemLoopIter->{ReservedForBorrowernumber} = $reservedfor;
+ $itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
+ $itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
+ $itemLoopIter->{ExpectedAtLibrary} = $expectedAt;
}
$itemLoopIter->{notforloan} = $itemInfo->{notforloan};
$policy_holdallowed = 0;
}
- if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed) {
+ if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed and CanItemBeReserved($borrowernumber,$itemNum)) {
$itemLoopIter->{available} = 1;
$numCopiesAvailable++;
}
$itemLoopIter->{waitingdate} = format_date($wait_hashref->{waitingdate});
}
$itemLoopIter->{imageurl} = getitemtypeimagelocation( 'opac', $itemTypes->{ $itemInfo->{itype} }{imageurl} );
-
+
+ # Show serial enumeration when needed
+ if ($itemLoopIter->{enumchron}) {
+ $itemdata_enumchron = 1;
+ }
+ $template->param( itemdata_enumchron => $itemdata_enumchron );
push @{$biblioLoopIter{itemLoop}}, $itemLoopIter;
}
if ($biblioLoopIter{already_reserved}) {
$biblioLoopIter{holdable} = undef;
}
+ if(not CanBookBeReserved($borrowernumber,$biblioNum)){
+ $biblioLoopIter{holdable} = undef;
+ }
push @$biblioLoop, \%biblioLoopIter;
}
-
if ( $numBibsAvailable == 0 ) {
$template->param( none_available => 1, message => 1 );
}
-
my $itemTableColspan = 5;
if (!$template->param('OPACItemHolds')) {
$itemTableColspan--;
}
$template->param(itemtable_colspan => $itemTableColspan);
-
-
# display infos
$template->param(bibitemloop => $biblioLoop);
-output_html_with_http_headers $query, $cookie, $template->output;
-
-
+# can set reserve date in future
+if (
+ C4::Context->preference( 'AllowHoldDateInFuture' ) &&
+ C4::Context->preference( 'OPACAllowHoldDateInFuture' )
+ ) {
+ $template->param(
+ reserve_in_future => 1,
+ DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+ );
+}
+output_html_with_http_headers $query, $cookie, $template->output;
-# Local Variables:
-# tab-width: 8
-# End: