From b62dab5fa8f4df5499b6110e7a7a6adac87dff24 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 8 Oct 2014 12:04:35 -0400 Subject: [PATCH] [SIGNED-OFF] Bug 13030 - Show waiting hold expiration date for waiting holds on circulation.pl Content-Type: text/plain; charset="utf-8" We should show the date a waiting hold is set to expire for each hold in the list of waiting holds in circulation.pl Test Plan: 1) Apply this patch 2) Find a waiting hold for a patron, browser to circulation.pl for that patron 3) Set system preference ReservesMaxPickUpDelay to 5 4) Refresh circulation.pl, note the waiting holds now display a "waiting until" part with the waiting date plus 5 days 5) Set system preference ReservesMaxPickUpDelay to 0 ( or empty string ) 6) Refresh circulation.pl, note the waiting hols no longer have a "waiting until" line. Signed-off-by: Owen Leonard Followed test plan successfully. Automated tests successful. --- Koha/Hold.pm | 25 +++++++++ .../prog/en/modules/circ/circulation.tt | 2 +- t/Hold.t | 54 ++++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100755 t/Hold.t diff --git a/Koha/Hold.pm b/Koha/Hold.pm index f00c2f8..c28177a 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -21,9 +21,11 @@ use Modern::Perl; use Carp; +use C4::Context qw(preference); use Koha::Branches; use Koha::Biblios; use Koha::Items; +use Koha::DateUtils qw(dt_from_string); use base qw(Koha::Object); @@ -37,6 +39,29 @@ Koha::Branch - Koha Item Object class =cut +=head3 waiting_expires_on + +Returns a DateTime for the date a waiting holds expires on. +Returns undef if the system peference ReservesMaxPickUpDelay is not set. +Returns undef if the hold is not waiting ( found = 'W' ). + +=cut + +sub waiting_expires_on { + my ($self) = @_; + + return unless $self->found() eq 'W'; + + my $ReservesMaxPickUpDelay = C4::Context->preference('ReservesMaxPickUpDelay'); + return unless $ReservesMaxPickUpDelay; + + my $dt = dt_from_string( $self->waitingdate() ); + + $dt->add( days => $ReservesMaxPickUpDelay ); + + return $dt; +} + =head3 biblio Returns the related Koha::Biblio object for this hold diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 00351e8..cbdd4a2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -625,7 +625,7 @@ No patron matched [% message %]
[% IF ( w.branch.branchcode == Branches.GetLoggedInBranchcode() ) %][% ELSE %][% END %] - Waiting at [% w.branch.branchname | html %] + Waiting at [% w.branch.branchname | html %] [% IF w.waiting_expires_on %] until [% w.waiting_expires_on | $KohaDates %] [% END %] diff --git a/t/Hold.t b/t/Hold.t new file mode 100755 index 0000000..6594c56 --- /dev/null +++ b/t/Hold.t @@ -0,0 +1,54 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Test::MockModule; +use Test::More tests => 5; +use t::lib::Mocks; + +my $module = new Test::MockModule('C4::Context'); +$module->mock( + '_new_dbh', + sub { + my $dbh = DBI->connect( 'DBI:Mock:', '', '' ) + || die "Cannot create handle: $DBI::errstr\n"; + return $dbh; + } +); + +use_ok('Koha::Hold'); + +my $hold = Koha::Hold->new({ found => 'W', waitingdate => '2000-01-01'}); + +t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', undef); +my $dt = $hold->waiting_expires_on(); +is( $dt, undef, "Koha::Hold->waiting_expires_on returns undef if ReservesMaxPickUpDelay is not set"); + +t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 5); +$dt = $hold->waiting_expires_on(); +is( $dt->ymd, "2000-01-06", "Koha::Hold->waiting_expires_on returns DateTime of waitingdate + ReservesMaxPickUpDelay if set"); + +$hold->found('T'); +$dt = $hold->waiting_expires_on(); +is( $dt, undef, "Koha::Hold->waiting_expires_on returns undef if found is not 'W' ( Set to 'T' )"); + +$hold->found(q{}); +$dt = $hold->waiting_expires_on(); +is( $dt, undef, "Koha::Hold->waiting_expires_on returns undef if found is not 'W' ( Set to empty string )"); + +1; -- 1.7.9.5