From 5ff1e77f37b3b2b72a5de5721db71cb3c80ff444 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Fri, 4 Jun 2021 16:08:45 +1200 Subject: [PATCH] Bug 15516: (follow-up) Count group holds always --- C4/Reserves.pm | 8 ++++---- Koha/Holds.pm | 25 ++++++++++++++++++------- opac/opac-reserve.pl | 2 +- reserve/request.pl | 2 +- t/db_dependent/Koha/Holds.t | 8 ++++---- 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index d3db9a360e..d1954c938c 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -461,23 +461,23 @@ sub CanItemBeReserved { }; $search_params->{found} = undef if $params->{ignore_found_holds}; - my $holds = Koha::Holds->search($search_params); + my $holds_count = Koha::Holds->count_holds($search_params); if ( defined $holds_per_record && $holds_per_record ne '' ){ if ( $holds_per_record == 0 ) { return { status => "noReservesAllowed" }; } - if ( !$params->{ignore_hold_counts} && $holds->count() >= $holds_per_record ) { + if ( !$params->{ignore_hold_counts} && $holds_count >= $holds_per_record ) { return { status => "tooManyHoldsForThisRecord", limit => $holds_per_record }; } } - my $today_holds = Koha::Holds->search({ + my $today_holds_count = Koha::Holds->count_holds({ borrowernumber => $borrowernumber, reservedate => dt_from_string->date }); if (!$params->{ignore_hold_counts} && defined $holds_per_day && $holds_per_day ne '' - && $today_holds->count() >= $holds_per_day ) + && $today_holds_count >= $holds_per_day ) { return { status => 'tooManyReservesToday', limit => $holds_per_day }; } diff --git a/Koha/Holds.pm b/Koha/Holds.pm index ede1726f5f..f4a059acc1 100644 --- a/Koha/Holds.pm +++ b/Koha/Holds.pm @@ -139,18 +139,29 @@ sub get_items_that_can_fill { )->filter_by_for_hold(); } -=head3 count_grouped +=head3 count_holds - $holds->count_grouped(); + $holds->count_holds( $search_params ); -Return number of hold, where hold group is counted as one hold +This overwrites the default count(). + +Return the number of holds, where a hold group is counted as one hold. =cut -sub count_grouped { - my ($self) = @_; - my $holds_without_group_count = $self->search({ hold_group_id => undef })->count(); - my $hold_groups_count = $self->search({ hold_group_id => { '!=' => undef }}, { group_by => 'me.hold_group_id' })->count(); +sub count_holds { + my ( $self, $search_params ) = @_; + + $search_params = { + hold_group_id => undef, + }; + my $holds_without_group_count = $self->search( $search_params )->count(); + + $search_params = { + hold_group_id => { '!=', undef }, + }; + my $hold_groups_count = $self->search( $search_params, { group_by => 'me.hold_group_id' })->count(); + return $holds_without_group_count + $hold_groups_count; } diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl index 42a9089fa1..5e18b05988 100755 --- a/opac/opac-reserve.pl +++ b/opac/opac-reserve.pl @@ -193,7 +193,7 @@ foreach my $biblioNumber (@biblionumbers) { if ( $query->param('place_reserve') ) { my $reserve_cnt = 0; if ($maxreserves) { - $reserve_cnt = $patron->holds->count_grouped; + $reserve_cnt = $patron->holds->count_holds; } # List is composed of alternating biblio/item/branch diff --git a/reserve/request.pl b/reserve/request.pl index 6e33bc84e2..f6bc47c08c 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -202,7 +202,7 @@ if ($borrowernumber_hold && !$action) { # we check the reserves of the user, and if they can reserve a document # FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... - my $reserves_count = $patron->holds->count; + my $reserves_count = $patron->holds->count_holds; my $new_reserves_count = scalar( @biblionumbers ); diff --git a/t/db_dependent/Koha/Holds.t b/t/db_dependent/Koha/Holds.t index 1a7015fe20..fd55c24b71 100755 --- a/t/db_dependent/Koha/Holds.t +++ b/t/db_dependent/Koha/Holds.t @@ -500,7 +500,7 @@ subtest 'get_items_that_can_fill' => sub { }; -subtest 'count_grouped' => sub { +subtest 'count_holds' => sub { plan tests => 3; $schema->storage->txn_begin; @@ -517,7 +517,7 @@ subtest 'count_grouped' => sub { }, }); - is($patron->holds->count_grouped, 1, 'Test patron has 1 hold.'); + is($patron->holds->count_holds, 1, 'Test patron has 1 hold.'); my $hold_group = $builder->build_object({ class => 'Koha::HoldGroups', @@ -538,7 +538,7 @@ subtest 'count_grouped' => sub { } }); - is($patron->holds->count_grouped, 2, 'Test patron has 2 holds.'); + is($patron->holds->count_holds, 2, 'Test patron has 2 holds.'); my $hold_group2 = $builder->build_object({ class => 'Koha::HoldGroups', @@ -566,7 +566,7 @@ subtest 'count_grouped' => sub { } }); - is($patron->holds->count_grouped, 3, 'Test patron has 3 holds.'); + is($patron->holds->count_holds, 3, 'Test patron has 3 holds.'); $schema->storage->txn_rollback; }; -- 2.11.0