From 7ea24b0690036a17d42958e30ead166c936eb42d Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 30 Sep 2014 15:07:50 -0400 Subject: [PATCH] Bug 12892 - Holds Waiting: not showing from check out screen When a patron has holds waiting to be pick up, they used to show in the check out screen. These notifications are no longer showing in 3.16. Test Plan: 1) Apply this patch 2) Create a hold, set to waiting 3) Browse to circulation.pl for that patron 4) Note you see the list of waiting holds 5) Switch you logged in branch to a different branch 6) Note the "Waiting at" line is no longer emphasized. Signed-off-by: Nick Clemens --- Koha/Biblio.pm | 52 +++++++++++ Koha/Biblios.pm | 62 +++++++++++++ Koha/Branch.pm | 52 +++++++++++ Koha/Branches.pm | 62 +++++++++++++ Koha/Hold.pm | 96 ++++++++++++++++++++ Koha/Holds.pm | 72 +++++++++++++++ Koha/Item.pm | 64 +++++++++++++ Koha/Items.pm | 62 +++++++++++++ circ/circulation.pl | 7 +- .../prog/en/modules/circ/circulation.tt | 36 +++++--- t/db_dependent/Reserves.t | 7 ++- 11 files changed, 555 insertions(+), 17 deletions(-) create mode 100644 Koha/Biblio.pm create mode 100644 Koha/Biblios.pm create mode 100644 Koha/Branch.pm create mode 100644 Koha/Branches.pm create mode 100644 Koha/Hold.pm create mode 100644 Koha/Holds.pm create mode 100644 Koha/Item.pm create mode 100644 Koha/Items.pm diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm new file mode 100644 index 0000000..9c467d7 --- /dev/null +++ b/Koha/Biblio.pm @@ -0,0 +1,52 @@ +package Koha::Biblio; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::Biblio - Koha Biblio Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Biblio'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Biblios.pm b/Koha/Biblios.pm new file mode 100644 index 0000000..18b4719 --- /dev/null +++ b/Koha/Biblios.pm @@ -0,0 +1,62 @@ +package Koha::Biblios; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use Koha::Biblio; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Reserve - Koha Reserve Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Biblio'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Biblio'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Branch.pm b/Koha/Branch.pm new file mode 100644 index 0000000..8031778 --- /dev/null +++ b/Koha/Branch.pm @@ -0,0 +1,52 @@ +package Koha::Branch; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::Branch - Koha Item Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Branch'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Branches.pm b/Koha/Branches.pm new file mode 100644 index 0000000..244ed3c --- /dev/null +++ b/Koha/Branches.pm @@ -0,0 +1,62 @@ +package Koha::Branches; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use Koha::Branch; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Reserve - Koha Reserve Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Branch'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Branch'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Hold.pm b/Koha/Hold.pm new file mode 100644 index 0000000..f00c2f8 --- /dev/null +++ b/Koha/Hold.pm @@ -0,0 +1,96 @@ +package Koha::Hold; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Branches; +use Koha::Biblios; +use Koha::Items; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::Branch - Koha Item Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 biblio + +Returns the related Koha::Biblio object for this hold + +=cut + +sub biblio { + my ($self) = @_; + + $self->{_biblio} ||= Koha::Biblios->new()->find( $self->biblionumber() ); + + return $self->{_biblio}; +} + +=head3 item + +Returns the related Koha::item object for this Hold + +=cut + +sub item { + my ($self) = @_; + + $self->{_item} ||= Koha::Items->new()->find( $self->itemnumber() ); + + return $self->{_item}; +} + +=head3 branch + +Returns the related Koha::branch object for this Hold + +=cut + +sub branch { + my ($self) = @_; + + $self->{_branch} ||= Koha::Branches->new()->find( $self->branchcode() ); + + return $self->{_branch}; +} + +=head3 type + +=cut + +sub type { + return 'Reserve'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Holds.pm b/Koha/Holds.pm new file mode 100644 index 0000000..ace2e4f --- /dev/null +++ b/Koha/Holds.pm @@ -0,0 +1,72 @@ +package Koha::Holds; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use Koha::Hold; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Reserve - Koha Reserve Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 waiting + +=cut + +sub waiting { + my ( $self ) = @_; + + return $self->search( { found => 'W' } ); +} + +=head3 type + +=cut + +sub type { + return 'Reserve'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Hold'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Item.pm b/Koha/Item.pm new file mode 100644 index 0000000..41eb3bd --- /dev/null +++ b/Koha/Item.pm @@ -0,0 +1,64 @@ +package Koha::Item; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::Item - Koha Item Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 effective_itemtype + +Returns the itemtype for the item based on whether item level itemtypes are set or not. + +=cut + +sub effective_itemtype { + my ( $self ) = @_; + + return $self->_result()->effective_itemtype(); +} + +=head3 type + +=cut + +sub type { + return 'Item'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/Koha/Items.pm b/Koha/Items.pm new file mode 100644 index 0000000..bc7d43b --- /dev/null +++ b/Koha/Items.pm @@ -0,0 +1,62 @@ +package Koha::Items; + +# Copyright ByWater Solutions 2014 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use Carp; + +use Koha::Database; + +use Koha::Item; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Reserve - Koha Reserve Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Item'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Item'; +} + +=head1 AUTHOR + +Kyle M Hall + +=cut + +1; diff --git a/circ/circulation.pl b/circ/circulation.pl index 8f79f71..2e4bd89 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -37,6 +37,7 @@ use C4::Biblio; use C4::Search; use MARC::Record; use C4::Reserves; +use Koha::Holds; use C4::Context; use CGI::Session; use C4::Members::Attributes qw(GetBorrowerAttributes); @@ -367,9 +368,11 @@ if ($borrowernumber) { # BUILD HTML # show all reserves of this borrower, and the position of the reservation .... if ($borrowernumber) { + my $holds = Koha::Holds->new()->search( { borrowernumber => $borrowernumber } ); $template->param( - holds_count => Koha::Database->new()->schema()->resultset('Reserve') - ->count( { borrowernumber => $borrowernumber } ) ); + holds_count => $holds->count(), + WaitingHolds => scalar $holds->waiting(), + ); $template->param( adultborrower => 1 ) if ( $borrower->{'category_type'} eq 'A' ); } 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 fc61059..8915848 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -605,20 +605,28 @@ No patron matched [% message %] - [% IF ( WaitingReserveLoop ) %] -
-

Holds waiting:

- [% FOREACH WaitingReserveLoo IN WaitingReserveLoop %] -
    -
  • [% WaitingReserveLoo.title |html %] ([% WaitingReserveLoo.itemtype %]), [% IF ( WaitingReserveLoo.author ) %]by [% WaitingReserveLoo.author %][% END %] [% IF ( WaitingReserveLoo.itemcallnumber ) %][[% WaitingReserveLoo.itemcallnumber %]] [% END %]Hold placed on [% WaitingReserveLoo.reservedate %]. - [% IF ( WaitingReserveLoo.waitingat ) %] -
    [% IF ( WaitingReserveLoo.waitinghere ) %][% ELSE %][% END %]Waiting at [% WaitingReserveLoo.waitingat %] - [% END %] -
  • -
- [% END %] -
- [% END %] + [% IF ( WaitingHolds ) %] +
+

Holds waiting:

+ [% FOREACH w IN WaitingHolds %] +
    +
  • + [% w.biblio.title | html %] + ([% w.item.effective_itemtype %]), + [% IF ( w.biblio.author ) %] by [% w.biblio.author | html %] [% END %] + [% IF ( w.item.itemcallnumber ) %] [[% w.item.itemcallnumber %]] [% END %] + Hold placed on [% w.reservedate | $KohaDates %]. + +
    + [% IF ( w.branch.branchcode == Branches.GetLoggedInBranchcode() ) %][% ELSE %][% END %] + Waiting at [% w.branch.branchname | html %] + +
  • +
+ [% END %] +
+ [% END %] + [% IF ( notes ) %]

Notes:

diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t index 3ee2832..896c678 100755 --- a/t/db_dependent/Reserves.t +++ b/t/db_dependent/Reserves.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 50; +use Test::More tests => 52; use MARC::Record; use DateTime::Duration; @@ -27,6 +27,7 @@ use C4::Biblio; use C4::Items; use C4::Members; use C4::Circulation; +use Koha::Holds; use t::lib::Mocks; use Koha::DateUtils; @@ -238,6 +239,10 @@ is($reserves[0]{priority}, 0, 'Item is correctly waiting'); is($reserves[1]{priority}, 1, 'Item is correctly priority 1'); is($reserves[2]{priority}, 2, 'Item is correctly priority 2'); +@reserves = Koha::Holds->new()->Waiting({ borrowernumber => $requesters{'RPL'} }); +is( @reserves, 1, 'GetWaiting got only the waiting reserve' ); +is( $reserves[0]->borrowernumber(), $requesters{'RPL'}, 'GetWaiting got the reserve for the correct borrower' ); + $dbh->do("DELETE FROM reserves WHERE biblionumber=?",undef,($bibnum2)); AddReserve('RPL', $requesters{'RPL'}, $bibnum2, -- 1.7.2.5