From a929c91b243b20287299ac0f88fee0f127b0c2ad Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 25 Feb 2013 13:18:07 -0500 Subject: [PATCH] Bug 8367: Skip to next open day if max pickup date is a holiday Test plan: 1) Note your ReservesMaxPickUpDelay setting. 2) Create and trap a hold 3) View waitingreserves.pl, note the last pickup date, and the pickup location 4) Edit the calendar for the given location, and make the pickup date a holiday 4) View waitingreserves.pl, the last pickup date should now be the increased by one day --- C4/Reserves.pm | 22 +++++++++++++++++----- 1 files changed, 17 insertions(+), 5 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index c209f10..167e3b9 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -30,6 +30,7 @@ use C4::Members; use C4::Items; use C4::Circulation; use C4::Accounts; +use C4::Calendar; # for _koha_notify_reserve use C4::Members::Messaging; @@ -343,7 +344,7 @@ sub GetReservesFromItemnumber { my ( $itemnumber, $all_dates ) = @_; my $dbh = C4::Context->dbh; my $query = " - SELECT reservedate,borrowernumber,branchcode + SELECT * FROM reserves WHERE itemnumber=? "; @@ -352,8 +353,10 @@ sub GetReservesFromItemnumber { } my $sth_res = $dbh->prepare($query); $sth_res->execute($itemnumber); - my ( $reservedate, $borrowernumber,$branchcode ) = $sth_res->fetchrow_array; - return ( $reservedate, $borrowernumber, $branchcode ); + + my $reserve = $sth_res->fetchrow_hashref(); + + return ( $reserve->{'reservedate'}, $reserve->{'borrowernumber'}, $reserve->{'branchcode'}, $reserve ); } =head2 GetReservesFromBorrowernumber @@ -525,9 +528,10 @@ sub GetMaxPickupDate { $item = C4::Items::GetItem( $reserve->{itemnumber} ); } - unless ( defined $reserve ) { - my $reserve = GetReservesFromItemnumber( $item->{itemnumber} ); + unless ( defined $reserve && defined $reserve->{'branchcode'} ) { + ( undef, undef, undef, $reserve ) = GetReservesFromItemnumber( $item->{itemnumber} ); } + return unless $reserve->{waitingdate}; my $borrower = C4::Members::GetMember( 'borrowernumber' => $reserve->{borrowernumber} ); @@ -548,6 +552,14 @@ sub GetMaxPickupDate { $date->add( days => $holdspickupdelay ); + my $calendar = C4::Calendar->new( branchcode => $reserve->{'branchcode'} ); + my $is_holiday = $calendar->isHoliday( $date->day(), $date->month(), $date->year() ); + + while ( $is_holiday ) { + $date->add( days => 1 ); + $is_holiday = $calendar->isHoliday( $date->day(), $date->month(), $date->year() ); + } + return $date; } -- 1.7.2.5