From cf11bdd6d28b1513aedea3ad52c1ce78b04d02d5 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 | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index b91044e..1d47ed8 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; @@ -174,7 +175,8 @@ sub AddReserve { my $maxpickupdate = GetMaxPickupDate({ waitingdate => $waitingdate, itemnumber => $checkitem, - borrowernumber => $borrowernumber + borrowernumber => $borrowernumber. + branchcode => $branch, }); #eval { @@ -346,7 +348,7 @@ sub GetReservesFromItemnumber { my ( $itemnumber, $all_dates ) = @_; my $dbh = C4::Context->dbh; my $query = " - SELECT reservedate,borrowernumber,branchcode + SELECT * FROM reserves WHERE itemnumber=? "; @@ -355,8 +357,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 @@ -528,9 +532,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} ); @@ -551,6 +556,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