From 2ff7f630c395bef7a803f9a61653ab58b8b50b3c 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) Cancel this hold 5) Edit the calendar for the given location, and make the pickup date a holiday 6) Repeat step 2 7) View waitingreserves.pl, the last pickup date for this new hold should now be the increased by one day Signed-off-by: Jonathan Druart --- C4/Reserves.pm | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index a9bcb52..42f17c6 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; @@ -352,7 +353,7 @@ sub GetReservesFromBiblionumber { =head2 GetReservesFromItemnumber - ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber); + ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $reserve ) = GetReservesFromItemnumber($itemnumber); TODO :: Description here @@ -362,7 +363,7 @@ sub GetReservesFromItemnumber { my ( $itemnumber, $all_dates ) = @_; my $dbh = C4::Context->dbh; my $query = " - SELECT reservedate,borrowernumber,branchcode,reserve_id + SELECT * FROM reserves WHERE itemnumber=? "; @@ -371,8 +372,10 @@ sub GetReservesFromItemnumber { } my $sth_res = $dbh->prepare($query); $sth_res->execute($itemnumber); - my ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = $sth_res->fetchrow_array; - return ( $reservedate, $borrowernumber, $branchcode, $reserve_id ); + + my $reserve = $sth_res->fetchrow_hashref(); + + return ( $reserve->{'reservedate'}, $reserve->{'borrowernumber'}, $reserve->{'branchcode'}, $reserve->{'reserve_id'}, $reserve ); } =head2 GetReservesFromBorrowernumber @@ -555,9 +558,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, undef, $reserve ) = GetReservesFromItemnumber( $item->{itemnumber} ); } + return unless $reserve->{waitingdate}; my $borrower = C4::Members::GetMember( 'borrowernumber' => $reserve->{borrowernumber} ); @@ -578,6 +582,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.10.4