Bug 24254: Add Koha::Items->filter_by_visible_in_opac

This patch adds a method based on the original idea from Nick, but on
Koha::Items.

The idea is to build a proper filter, based on the current rules for
hiding things, directly on the DBIC query. The caller takes care of
knowing if the filtering should apply (i.e. checking the patron category
exceptions) and then it would do something like:

    my @items;
    if ( <patron_category_does_not_have_exception> ) {
        @items = $biblio->items->filter_by_visible_in_opac(
            {
                rules => $rules
            }
        );
    }
    else {
        # still want to enforce 'hidelostitems'
        @items = $biblio->items->filter_by_visible_in_opac;
    }

To test:
1. Apply this patches
2. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/Items.t
=> SUCCESS: Tests pass!
3. Look at the use cases on the tests, read the code
=> SUCCESS: It all makes sense
4. Compare with Koha::Item->hidden_in_opac
=> SUCCESS: It all makes sense
5. Sign off :-D

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Tomás Cohen Arazi 2020-12-03 15:11:14 -03:00 committed by Jonathan Druart
parent ab6711572a
commit 2250cf0293

View file

@ -33,7 +33,7 @@ Koha::Items - Koha Item object set class
=head1 API
=head2 Class Methods
=head2 Class methods
=cut
@ -50,7 +50,35 @@ sub filter_by_for_loan {
return $self->search( { notforloan => [ 0, undef ] } );
}
=head3 type
=head3 filter_by_visible_in_opac
my $filered_items = $items->filter_by_visible_in_opac({ rules => $rules });
Returns a new resultset, containing those items that are not expected to be hidden in OPAC.
If no I<rules> are passed, it returns the whole resultset, with the only caveat that the
I<hidelostitems> system preference is honoured.
=cut
sub filter_by_visible_in_opac {
my ($self, $params) = @_;
my $rules = $params->{rules} // {};
my $search_params;
foreach my $field (keys %$rules){
$search_params->{$field}->{'-not_in'} = $rules->{$field};
}
$search_params->{itemlost}->{'<='} = 0
if C4::Context->preference('hidelostitems');
return $self->search( $search_params );
}
=head2 Internal methods
=head3 _type
=cut