Commit e85d6e12 authored by Marcel de Rooy's avatar Marcel de Rooy Committed by Wm. Nick Clemens

Bug 17530: (QA follow-up) Move may_article_request to ItemType

As requested by QA, we should move may_article_request out of Biblio.

For reasons of performance removed the wrapper layer of may_article_request
in opac-search. No need to look up all item types. For readability kept
the routine in the detail scripts.

Note for running ArticleRequests.t: A possible failure on the subtest
'search_limited' is addressed on bug 20866. So you can ignore that one.
As long as the subtest for may_article_request passes.

Test plan:
See previous patches.
Signed-off-by: 's avatarMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: 's avatarChris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Wm. Nick Clemens's avatarNick Clemens <nick@bywatersolutions.com>
parent 8d53a150
......@@ -169,32 +169,6 @@ sub can_be_transferred {
return 0;
}
=head3 may_article_request
Returns true if it is likely possible to make an article request for
a given item type (or the default item type from biblioitems).
# As class method:
my $boolean = Koha::Biblio->may_article_request({ itemtype => 'BK' });
# As instance method:
my $boolean = Koha::Biblios->find($biblionumber)->may_article_request;
=cut
sub may_article_request {
my ( $class_or_self, $params ) = @_;
return q{} if !C4::Context->preference('ArticleRequests');
my $itemtype = ref($class_or_self)
? $class_or_self->itemtype
: $params->{itemtype};
my $category = $params->{categorycode};
my $guess = Koha::IssuingRules->guess_article_requestable_itemtypes({
$category ? ( categorycode => $category ) : (),
});
return ( $guess->{ $itemtype // q{} } || $guess->{ '*' } ) ? 1 : q{};
}
=head3 article_request_type
my $type = $biblio->article_request_type( $borrower );
......
......@@ -22,6 +22,7 @@ use Carp;
use C4::Koha;
use C4::Languages;
use Koha::Database;
use Koha::IssuingRules;
use Koha::Localizations;
use base qw(Koha::Object);
......@@ -106,6 +107,26 @@ sub can_be_deleted {
return $nb_items + $nb_biblioitems == 0 ? 1 : 0;
}
=head3 may_article_request
Returns true if it is likely possible to make an article request for
this item type.
Optional parameter: categorycode (for patron).
=cut
sub may_article_request {
my ( $self, $params ) = @_;
return q{} if !C4::Context->preference('ArticleRequests');
my $itemtype = $self->itemtype;
my $category = $params->{categorycode};
my $guess = Koha::IssuingRules->guess_article_requestable_itemtypes({
$category ? ( categorycode => $category ) : (),
});
return ( $guess->{ $itemtype // q{} } || $guess->{ '*' } ) ? 1 : q{};
}
=head3 type
=cut
......
......@@ -220,7 +220,7 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
if( C4::Context->preference('ArticleRequests') ) {
my $artreqpossible = $patron
? $biblio->can_article_request( $patron )
: $biblio->may_article_request;
: Koha::ItemTypes->find($biblio->itemtype)->may_article_request;
$template->param( artreqpossible => $artreqpossible );
}
......
......@@ -60,6 +60,7 @@ use List::MoreUtils qw( any uniq );
use Koha::Biblios;
use Koha::IssuingRules;
use Koha::Items;
use Koha::ItemTypes;
use Koha::Patrons;
use Koha::RecordProcessor;
......@@ -352,7 +353,7 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){
if( C4::Context->preference('ArticleRequests') ) {
my $artreqpossible = $patron
? $biblio->can_article_request( $patron )
: $biblio->may_article_request;
: Koha::ItemTypes->find($biblio->itemtype)->may_article_request;
$template->param( artreqpossible => $artreqpossible );
}
......
......@@ -760,7 +760,7 @@ if( C4::Context->preference('ArticleRequests') ) {
my $patron = $borrowernumber ? Koha::Patrons->find($borrowernumber) : undef;
my $artreqpossible = $patron
? $biblio->can_article_request( $patron )
: $biblio->may_article_request;
: Koha::ItemTypes->find($biblio->itemtype)->may_article_request;
$template->param( artreqpossible => $artreqpossible );
}
......
......@@ -642,10 +642,10 @@ for (my $i=0;$i<@servers;$i++) {
}
$hits = 0 unless @newresults;
my $categorycode; # needed for may_article_request
if( $borrowernumber && C4::Context->preference('ArticleRequests') ) {
my $patron = Koha::Patrons->find( $borrowernumber );
$categorycode = $patron ? $patron->categorycode : undef;
my $art_req_itypes;
if( C4::Context->preference('ArticleRequests') ) {
my $patron = $borrowernumber ? Koha::Patrons->find( $borrowernumber ) : undef;
$art_req_itypes = Koha::IssuingRules->guess_article_requestable_itemtypes({ $patron ? ( categorycode => $patron->categorycode ) : () });
}
foreach my $res (@newresults) {
......@@ -705,10 +705,7 @@ for (my $i=0;$i<@servers;$i++) {
}
# BZ17530: 'Intelligent' guess if result can be article requested
$res->{artreqpossible} = Koha::Biblio->may_article_request({
categorycode => $categorycode,
itemtype => $res->{itemtype},
});
$res->{artreqpossible} = ( $art_req_itypes->{ $res->{itemtype} // q{} } || $art_req_itypes->{ '*' } ) ? 1 : q{};
}
if ($results_hashref->{$server}->{"hits"}){
......
......@@ -221,7 +221,7 @@ subtest 'search_limited' => sub {
};
subtest 'may_article_request' => sub {
plan tests => 6;
plan tests => 3;
# mocking
t::lib::Mocks::mock_preference('ArticleRequests', 1);
......@@ -231,18 +231,10 @@ subtest 'may_article_request' => sub {
'PT' => { 'BK' => 1 },
});
# tests for class method call
is( Koha::Biblio->may_article_request({ itemtype => 'CR' }), 1, 'SER/* should be true' );
is( Koha::Biblio->may_article_request({ itemtype => 'CR', categorycode => 'S' }), 1, 'SER/S should be true' );
is( Koha::Biblio->may_article_request({ itemtype => 'CR', categorycode => 'PT' }), '', 'SER/PT should be false' );
# tests for instance method call
my $builder = t::lib::TestBuilder->new;
my $biblio = $builder->build_object({ class => 'Koha::Biblios' });
my $biblioitem = $builder->build_object({ class => 'Koha::Biblioitems', value => { biblionumber => $biblio->biblionumber, itemtype => 'BK' }});
is( $biblio->may_article_request, '', 'BK/* false' );
is( $biblio->may_article_request({ categorycode => 'S' }), 1, 'BK/S true' );
is( $biblio->may_article_request({ categorycode => 'PT' }), 1, 'BK/PT true' );
my $itemtype = Koha::ItemTypes->find('CR') // Koha::ItemType->new({ itemtype => 'CR' })->store;
is( $itemtype->may_article_request, 1, 'SER/* should be true' );
is( $itemtype->may_article_request({ categorycode => 'S' }), 1, 'SER/S should be true' );
is( $itemtype->may_article_request({ categorycode => 'PT' }), '', 'SER/PT should be false' );
# Cleanup
$cache->clear_from_cache( Koha::IssuingRules::GUESSED_ITEMTYPES_KEY );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment