@@ -, +, @@ subscriptions with routing lists --- 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(-) --- a/C4/Serials.pm +++ a/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); } --- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-advsearch.inc +++ a/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 %] --- a/serials/serials-search.pl +++ a/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') } ); --- a/t/db_dependent/Serials.t +++ a/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}) { --