Same as previously but for article requests.
Test plan:
Test article requests and make sure you do not need the requests for
patrons that
are attached to a group that is not part of your library's group
Signed-off-by: Signed-off-by: Jon McGowan <jon.mcgowan@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
=cut
+=head3 search_limited
+
+my $article_requests = Koha::ArticleRequests->search_limited( $params, $attributes );
+
+Search for article requests according to logged in patron restrictions
+
+=cut
+
+sub search_limited {
+ my ( $self, $params, $attributes ) = @_;
+
+ my $userenv = C4::Context->userenv;
+ my @restricted_branchcodes;
+ if ( $userenv ) {
+ my $logged_in_user = Koha::Patrons->find( $userenv->{number} );
+ @restricted_branchcodes = $logged_in_user->libraries_where_can_see_patrons;
+ }
+ # TODO This 'borrowernumber' relation name is confusing and needs to be renamed
+ $params->{'borrowernumber.branchcode'} = { -in => \@restricted_branchcodes } if @restricted_branchcodes;
+ $attributes->{join} = 'borrowernumber';
+ return $self->search( $params, $attributes );
+}
+
=head3 pending
=cut
sub pending {
my ( $self, $branchcode ) = @_;
my $params = { status => Koha::ArticleRequest::Status::Pending };
- $params->{branchcode} = $branchcode if $branchcode;
- return Koha::ArticleRequests->search( $params );
+ $params->{'me.branchcode'} = $branchcode if $branchcode;
+ return Koha::ArticleRequests->search_limited( $params );
}
=head3 processing
sub processing {
my ( $self, $branchcode ) = @_;
my $params = { status => Koha::ArticleRequest::Status::Processing };
- $params->{branchcode} = $branchcode if $branchcode;
- return Koha::ArticleRequests->search( $params );
+ $params->{'me.branchcode'} = $branchcode if $branchcode;
+ return Koha::ArticleRequests->search_limited( $params );
}
=head3 completed
sub completed {
my ( $self, $branchcode ) = @_;
my $params = { status => Koha::ArticleRequest::Status::Completed };
- $params->{branchcode} = $branchcode if $branchcode;
- return Koha::ArticleRequests->search( $params );
+ $params->{'me.branchcode'} = $branchcode if $branchcode;
+ return Koha::ArticleRequests->search_limited( $params );
}
=head3 canceled
sub canceled {
my ( $self, $branchcode ) = @_;
my $params = { status => Koha::ArticleRequest::Status::Canceled };
- $params->{branchcode} = $branchcode if $branchcode;
- return Koha::ArticleRequests->search( $params );
+ $params->{'me.branchcode'} = $branchcode if $branchcode;
+ return Koha::ArticleRequests->search_limited( $params );
}
=head3 _type
my $pendingsuggestions = CountSuggestion("ASKED");
my $pending_borrower_modifications = Koha::Patron::Modifications->pending_count( $branch );
my $pending_discharge_requests = Koha::Patron::Discharge::count({ pending => 1 });
-my $pending_article_requests = Koha::ArticleRequests->count(
+my $pending_article_requests = Koha::ArticleRequests->search_limited(
{
status => Koha::ArticleRequest::Status::Pending,
$branch ? ( branchcode => $branch ) : (),
}
-);
+)->count;
$template->param(
pendingcomments => $pendingcomments,
use POSIX qw(strftime);
-use Test::More tests => 54;
+use Test::More tests => 55;
use t::lib::TestBuilder;
use Koha::Biblio;
use Koha::Notice::Messages;
use Koha::Patron;
-use Koha::Library;
+
+use t::lib::TestBuilder;
BEGIN {
use_ok('Koha::ArticleRequest');
{
categorycode => $category->{categorycode},
branchcode => $branch->{branchcode},
+ flags => 1,# superlibrarian
}
)->store();
ok( $patron->id, 'Koha::Patron created' );
+my $patron_2 = $builder->build({ source => 'Borrower', value => { flags => 0 } });
+$patron_2 = Koha::Patrons->find( $patron_2->{borrowernumber} );
+
+my $nb_article_requests = Koha::ArticleRequests->count;
# store
Koha::Notice::Messages->delete;
is( $item->article_request_type($patron), 'no', 'Item article request type is no' );
$rule->delete();
+subtest 'search_limited' => sub {
+ plan tests => 4;
+ C4::Context->_new_userenv('xxx');
+ my $group_1 = Koha::Library::Group->new( { title => 'TEST Group 1' } )->store;
+ my $group_2 = Koha::Library::Group->new( { title => 'TEST Group 2' } )->store;
+ Koha::Library::Group->new({ parent_id => $group_1->id, branchcode => $patron->branchcode })->store();
+ Koha::Library::Group->new({ parent_id => $group_2->id, branchcode => $patron_2->branchcode })->store();
+ set_logged_in_user( $patron ); # Is superlibrarian
+ is( Koha::ArticleRequests->count, $nb_article_requests + 1, 'Koha::ArticleRequests should return all article requests' );
+ is( Koha::ArticleRequests->search_limited->count, $nb_article_requests + 1, 'Koha::ArticleRequests->search_limited should return all article requests for superlibrarian' );
+ set_logged_in_user( $patron_2 ); # Is restricted
+ is( Koha::ArticleRequests->count, $nb_article_requests + 1, 'Koha::ArticleRequests should return all article requests' );
+ is( Koha::ArticleRequests->search_limited->count, $nb_article_requests, 'Koha::ArticleRequests->search_limited should not return all article requests for restricted patron' );
+};
+
$schema->storage->txn_rollback();
+
+sub set_logged_in_user {
+ my ($patron) = @_;
+ C4::Context->set_userenv(
+ $patron->borrowernumber, $patron->userid,
+ $patron->cardnumber, 'firstname',
+ 'surname', $patron->library->branchcode,
+ 'Midway Public Library', $patron->flags,
+ '', ''
+ );
+}