use strict;
use warnings;
-use C4::Branch; # GetBranches get_branchinfos_of
+use C4::Branch;
use CGI;
use List::MoreUtils qw/uniq/;
use Date::Calc qw/Date_to_Days/;
use C4::Dates qw/format_date/;
use C4::Members;
use C4::Search; # enabled_staff_search_views
+use Koha::DateUtils;
my $dbh = C4::Context->dbh;
my $sth;
my $input = new CGI;
-my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
+my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user(
{
template_name => "reserve/request.tmpl",
query => $input,
my $branches = GetBranches();
my $itemtypes = GetItemTypes();
-my $default = C4::Context->userenv->{branch};
-my @values;
-my %label_of;
-
-foreach my $branchcode (sort keys %{$branches} ) {
- push @values, $branchcode;
- $label_of{$branchcode} = $branches->{$branchcode}->{branchname};
+my $userbranch = '';
+if (C4::Context->userenv && C4::Context->userenv->{'branch'}) {
+ $userbranch = C4::Context->userenv->{'branch'};
}
-my $CGIbranch = CGI::scrolling_list(
- -name => 'pickup',
- -id => 'pickup',
- -values => \@values,
- -default => $default,
- -labels => \%label_of,
- -size => 1,
- -multiple => 0,
- );
+
# Select borrowers infos
my $findborrower = $input->param('findborrower');
$findborrower = '' unless defined $findborrower;
$findborrower =~ s|,| |g;
my $borrowernumber_hold = $input->param('borrowernumber') || '';
-my $borrowerslist;
my $messageborrower;
my $warnings;
my $messages;
my $borrowernumber = $input->param('borrowernumber');
my $biblionumber = $input->param('biblionumber');
ToggleLowestPriority( $borrowernumber, $biblionumber );
+} elsif ( $action eq 'toggleSuspend' ) {
+ my $borrowernumber = $input->param('borrowernumber');
+ my $biblionumber = $input->param('biblionumber');
+ my $suspend_until = $input->param('suspend_until');
+ ToggleSuspend( $borrowernumber, $biblionumber, $suspend_until );
}
if ($findborrower) {
- my ( $count, $borrowers ) =
- SearchMember($findborrower, 'cardnumber', 'web' );
-
- my @borrowers = @$borrowers;
+ my $borrowers = Search($findborrower, 'cardnumber');
- if ( !@borrowers ) {
+ if ($borrowers && @$borrowers) {
+ if ( @$borrowers == 1 ) {
+ $borrowernumber_hold = $borrowers->[0]->{'borrowernumber'};
+ }
+ else {
+ $template->param( borrower_list => sort_borrowerlist($borrowers));
+ }
+ } else {
$messageborrower = "'$findborrower'";
}
- elsif ( @borrowers == 1 ) {
- $borrowernumber_hold = $borrowers[0]->{'borrowernumber'};
- }
- else {
- $borrowerslist = \@borrowers;
- }
}
# If we have the borrowernumber because we've performed an action, then we
# don't want to try to place another reserve.
if ($borrowernumber_hold && !$action) {
- my $borrowerinfo = GetMemberDetails( $borrowernumber_hold );
+ my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
my $diffbranch;
my @getreservloop;
my $count_reserv = 0;
$template->param( messageborrower => $messageborrower );
-my $CGIselectborrower;
-if ($borrowerslist) {
- my @values;
- my %labels;
-
- foreach my $borrower (
- sort {
- $a->{surname}
- . $a->{firstname} cmp $b->{surname}
- . $b->{firstname}
- } @{$borrowerslist}
- )
- {
- push @values, $borrower->{borrowernumber};
-
- $labels{ $borrower->{borrowernumber} } = sprintf(
- '%s, %s ... (%s - %s) ... %s',
- $borrower->{surname} ||'', $borrower->{firstname} || '',
- $borrower->{cardnumber} || '', $borrower->{categorycode} || '',
- $borrower->{address} || '',
- );
- }
-
- $CGIselectborrower = CGI::scrolling_list(
- -name => 'borrowernumber',
- -values => \@values,
- -labels => \%labels,
- -size => 7,
- -multiple => 0,
- );
-}
-
-# FIXME launch another time GetMemberDetails perhaps until
-my $borrowerinfo = GetMemberDetails( $borrowernumber_hold );
+# FIXME launch another time GetMember perhaps until
+my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
my @biblionumbers = ();
my $biblionumbers = $input->param('biblionumbers');
push @biblionumbers, $input->param('biblionumber');
}
+my $itemdata_enumchron = 0;
my @biblioloop = ();
foreach my $biblionumber (@biblionumbers) {
my $dat = GetBiblioData($biblionumber);
unless ( CanBookBeReserved($borrowerinfo->{borrowernumber}, $biblionumber) ) {
- $warnings = 1;
+ $warnings = 1;
$maxreserves = 1;
}
+
+ my $alreadypossession;
+ if (not C4::Context->preference('AllowHoldsOnPatronsPossessions') and CheckIfIssuedToPatron($borrowerinfo->{borrowernumber},$biblionumber)) {
+ $warnings = 1;
+ $alreadypossession = 1;
+ }
+
# get existing reserves .....
my ( $count, $reserves ) = GetReservesFromBiblionumber($biblionumber,1);
my $totalcount = $count;
$template->param( alreadyreserved => $alreadyreserved,
messages => $messages,
warnings => $warnings,
- maxreserves=>$maxreserves
+ maxreserves=>$maxreserves,
+ alreadypossession => $alreadypossession,
);
if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){
@itemnumbers = @$items;
}
- else {
+ my @hostitems = get_hostitemnumbers_of($biblionumber);
+ if (@hostitems){
+ $template->param('hostitemsflag' => 1);
+ push(@itemnumbers, @hostitems);
+ }
+
+ if (!@itemnumbers) {
$template->param('noitems' => 1);
$biblioloopiter{noitems} = 1;
}
$biblioitem->{description} =
$itemtypes->{ $biblioitem->{itemtype} }{description};
+ if($biblioitem->{biblioitemnumber} ne $biblionumber){
+ $biblioitem->{hostitemsflag}=1;
+ }
$biblioloopiter{description} = $biblioitem->{description};
$biblioloopiter{itypename} = $biblioitem->{description};
$biblioloopiter{imageurl} =
$branches->{ $item->{holdingbranch} }{branchname};
}
+ if($item->{biblionumber} ne $biblionumber){
+ $item->{hostitemsflag}=1;
+ $item->{hosttitle} = GetBiblioData($item->{biblionumber})->{title};
+ }
+
# add information
$item->{itemcallnumber} = $item->{itemcallnumber};
# change the background color
my $issues= GetItemIssue($itemnumber);
if ( $issues->{'date_due'} ) {
- $item->{date_due} = format_date($issues->{'date_due'});
+ $item->{date_due} = format_sqldatetime($issues->{date_due});
$item->{backgroundcolor} = 'onloan';
}
# checking reserve
my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($itemnumber);
- my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0);
+ my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
if ( defined $reservedate ) {
$item->{backgroundcolor} = 'reserved';
# if independent branches is on we need to check if the person can reserve
# for branches they arent logged in to
- if ( C4::Context->preference("IndependantBranches") ) {
+ if ( C4::Context->preference("IndependentBranches") ) {
if (! C4::Context->preference("canreservefromotherbranches")){
# cant reserve items so need to check if item homebranch and userenv branch match if not we cant reserve
my $userenv = C4::Context->userenv;
$borrowerinfo->{'branchcode'} ne $item->{'homebranch'} ) ) {
$policy_holdallowed = 0;
}
-
- if (IsAvailableForItemLevelRequest($itemnumber) and
- not $item->{cantreserve} and
- CanItemBeReserved($borrowerinfo->{borrowernumber}, $itemnumber) ) {
- if ( $policy_holdallowed ) {
- $item->{available} = 1;
- $num_available++;
- }
- } elsif (C4::Context->preference( 'AllowHoldPolicyOverride' ) ) {
- $item->{override} = 1;
- $num_override++;
+
+ if (
+ $policy_holdallowed
+ && !$item->{cantreserve}
+ && IsAvailableForItemLevelRequest($itemnumber)
+ && CanItemBeReserved(
+ $borrowerinfo->{borrowernumber}, $itemnumber
+ )
+ )
+ {
+ $item->{available} = 1;
+ $num_available++;
}
- # If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules
- if (C4::Context->preference( 'AllowHoldPolicyOverride' ) && !$item->{available} ) {
+ elsif ( C4::Context->preference('AllowHoldPolicyOverride') ) {
+
+# If AllowHoldPolicyOverride is set, it should override EVERY restriction, not just branch item rules
$item->{override} = 1;
$num_override++;
}
while (my $wait_hashref = $sth2->fetchrow_hashref) {
$item->{waitingdate} = format_date($wait_hashref->{waitingdate});
}
+
+ # Show serial enumeration when needed
+ if ($item->{enumchron}) {
+ $itemdata_enumchron = 1;
+ }
+
push @{ $biblioitem->{itemloop} }, $item;
}
}
# get borrowers reserve info
- my $reserveborrowerinfo = GetMemberDetails( $res->{'borrowernumber'}, 0);
+ my $reserveborrowerinfo = GetMember( borrowernumber => $res->{'borrowernumber'} );
if (C4::Context->preference('HidePatronName')){
$reserve{'hidename'} = 1;
$reserve{'cardnumber'} = $reserveborrowerinfo->{'cardnumber'};
$reserve{'barcode'} = $res->{'barcode'};
$reserve{'priority'} = $res->{'priority'};
$reserve{'lowestPriority'} = $res->{'lowestPriority'};
- $reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'});
$reserve{'optionloop'} = \@optionloop;
+ $reserve{'suspend'} = $res->{'suspend'};
+ $reserve{'suspend_until'} = $res->{'suspend_until'};
+
+ if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) {
+ $reserve{'branchloop'} = [ GetBranchDetail($res->{'branchcode'}) ];
+ } else {
+ $reserve{'branchloop'} = GetBranchesLoop($res->{'branchcode'});
+ }
push( @reserveloop, \%reserve );
}
my $time = time();
$template->param(
- CGIbranch => $CGIbranch,
-
+ branchloop => GetBranchesLoop($userbranch),
time => $time,
fixedRank => $fixedRank,
);
$template->param(
optionloop => \@optionloop,
bibitemloop => \@bibitemloop,
+ itemdata_enumchron => $itemdata_enumchron,
date => $date,
biblionumber => $biblionumber,
findborrower => $findborrower,
borrower_branchcode => $borrowerinfo->{'branchcode'},
);
}
- $template->param(CGIselectborrower => $CGIselectborrower) if defined $CGIselectborrower;
$biblioloopiter{biblionumber} = $biblionumber;
$biblioloopiter{title} = $dat->{title};
$template->param( biblioloop => \@biblioloop );
$template->param( biblionumbers => $biblionumbers );
-$template->param( DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar() );
if ($multihold) {
$template->param( multi_hold => 1 );
$template->param( reserve_in_future => 1 );
}
+$template->param(
+ SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
+ AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
+);
+
# printout the page
output_html_with_http_headers $input, $cookie, $template->output;
+
+sub sort_borrowerlist {
+ my $borrowerslist = shift;
+ my $ref = [];
+ push @{$ref}, sort {
+ uc( $a->{surname} . $a->{firstname} ) cmp
+ uc( $b->{surname} . $b->{firstname} )
+ } @{$borrowerslist};
+ return $ref;
+}