From 7300d76f4d9f15c1bececa734a7d8b2d58ffca3a Mon Sep 17 00:00:00 2001 From: danyonsewell Date: Wed, 20 Dec 2023 04:15:06 +0000 Subject: [PATCH] Bug 26567: Allow to limit subscription search to subscriptions with routing lists unit tests have now been written for the SearchSubscription subroutine. Test plan: 1. Apply this patch 2. Create two subscriptions, one with a routing list and one without 3. Navigate to Serials home and tick the checkbox labeled "Search routing lists only:" 4. Confirm that the only search result to appear is the subscription you added the routing list to Sponsored by: Bibliotheksservice-Zentrum Baden-Wuerttemberg --- C4/Serials.pm | 5 ++- .../prog/en/includes/serials-advsearch.inc | 5 +++ serials/serials-search.pl | 2 + t/db_dependent/Serials.t | 43 ++++++++++++++++++- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index ec88b0f3e63..2924fed711e 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -510,6 +510,7 @@ The valid search fields are: branch expiration_date closed + routinglist The expiration_date search field is special; it specifies the maximum subscription expiration date. @@ -553,6 +554,9 @@ sub SearchSubscriptions { LEFT JOIN biblioitems ON biblioitems.biblionumber = subscription.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id |; + if( $args->{routinglist} ) { + $query .= q| INNER JOIN (SELECT DISTINCT subscriptionid FROM subscriptionroutinglist) srl ON srl.subscriptionid = subscription.subscriptionid|; + } $query .= q| WHERE 1|; my @where_strs; my @where_args; @@ -609,7 +613,6 @@ sub SearchSubscriptions { push @where_strs, "subscription.closed = ?"; push @where_args, "$args->{closed}"; } - if(@where_strs){ $query .= ' AND ' . join(' AND ', @where_strs); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-advsearch.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-advsearch.inc index ec34b6f0732..84b9eed7cb1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-advsearch.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-advsearch.inc @@ -50,6 +50,11 @@ +
  • + + +
  • + [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_field_filters wrap_fieldset=0 %] diff --git a/serials/serials-search.pl b/serials/serials-search.pl index 80b20038145..1ebe3ccca35 100755 --- a/serials/serials-search.pl +++ b/serials/serials-search.pl @@ -52,6 +52,7 @@ my $location = $query->param('location_filter') || ''; my $expiration_date = $query->param('expiration_date_filter') || ''; my $routing = $query->param('routing') || C4::Context->preference("RoutingSerials"); my $searched = $query->param('searched') || 0; +my $routinglist = $query->param('routinglist'); my $mana = $query->param('mana') || 0; my @subscriptionids = $query->multi_param('subscriptionid'); my $op = $query->param('op'); @@ -116,6 +117,7 @@ if ($searched) { additional_fields => \@additional_field_filters, location => $location, expiration_date => $expiration_date, + routinglist => $routinglist, }, { results_limit => C4::Context->preference('SerialsSearchResultsLimit') } ); diff --git a/t/db_dependent/Serials.t b/t/db_dependent/Serials.t index 65c563d1649..87b8f4a8775 100755 --- a/t/db_dependent/Serials.t +++ b/t/db_dependent/Serials.t @@ -16,7 +16,7 @@ use Koha::DateUtils qw( dt_from_string output_pref ); use Koha::Acquisition::Booksellers; use t::lib::Mocks; use t::lib::TestBuilder; -use Test::More tests => 54; +use Test::More tests => 56; BEGIN { use_ok('C4::Serials', qw( updateClaim NewSubscription GetSubscription GetSubscriptionHistoryFromSubscriptionId SearchSubscriptions ModSubscription GetExpirationDate GetSerials GetSerialInformation NewIssue AddItem2Serial DelSubscription GetFullSubscription PrepareSerialsData GetSubscriptionsFromBiblionumber ModSubscriptionHistory GetSerials2 GetLatestSerials GetNextSeq GetSeq CountSubscriptionFromBiblionumber ModSerialStatus findSerialsByStatus HasSubscriptionStrictlyExpired HasSubscriptionExpired GetLateOrMissingIssues check_routing addroutingmember GetNextDate )); @@ -194,6 +194,47 @@ is( 'SearchSubscriptions returned only one subscription when results_limit is set to "1"' ); +# Set up fake data +my $subscriptionwithroutinglistid = NewSubscription( + undef, "", undef, undef, $budget_id, $biblionumber, + '2013-01-01', $frequency_id, undef, undef, undef, + undef, undef, undef, undef, undef, undef, + 1, $notes, undef, '2013-01-01', undef, $pattern_id, + undef, undef, 0, $internalnotes, 0, + undef, undef, 0, undef, '2013-12-31', 0 +); + +#creating fake members +my $patron = $builder->build_object( + { + class => 'Koha::Patrons', + } +); +my $patron2 = $builder->build_object( + { + class => 'Koha::Patrons', + } +); +my $patronid1 = $patron->borrowernumber; +my $patronid2 = $patron2->borrowernumber; + +# Add a fake routing list with fake members +addroutingmember($patronid1,$subscriptionwithroutinglistid); +addroutingmember($patronid2,$subscriptionwithroutinglistid); + +# Perform SearchSubscriptions +my $fake_subscription = GetSubscription($subscriptionwithroutinglistid); + +my @subscriptionswithroutinglist = SearchSubscriptions({ + issn => $fake_subscription->{issn}, + orderby => 'title', + routinglist => 1 +}); + +# Check the results +is(@subscriptionswithroutinglist, 1, 'SearchSubscriptions returned the expected number of subscriptions'); +is($subscriptionswithroutinglist[0]->{title}, $fake_subscription->{title}, 'SearchSubscriptions returned the correct subscription'); + my $frequency = GetSubscriptionFrequency($subscriptioninformation->{periodicity}); my $old_frequency; if (not $frequency->{unit}) { -- 2.30.2