From 807be60181173fc6b35bdf99f2996f7f0d13a13c Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
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..12f80ba 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