From 24b542727785a7f59f130b83898c9421a95ec089 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 5 Nov 2024 15:11:48 +0100 Subject: [PATCH] Bug 37334: Fix logic for not available Several major changes here: * the push @not_availab_itemnumbers for lost, damaged, etc. was totally wrong * not for loan is only for positive values * restricted can be NULL Signed-off-by: Emmi Takkinen --- Koha/Items.pm | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Koha/Items.pm b/Koha/Items.pm index 00336552916..af9eb1072f6 100644 --- a/Koha/Items.pm +++ b/Koha/Items.pm @@ -292,21 +292,26 @@ sub filter_by_has_recalls { sub filter_by_available { my ($self) = @_; - my @all_itemnumbers = $self->get_column('itemnumber'); - my @item_types_notforloan = Koha::ItemTypes->search( { notforloan => { '!=' => 0 } } )->get_column('itemtype'); + my @all_itemnumbers = $self->get_column('itemnumber'); my @not_available_itemnumbers; push @not_available_itemnumbers, $self->filter_by_checked_out->get_column('itemnumber'); push @not_available_itemnumbers, $self->filter_by_in_transit->get_column('itemnumber'); - push @not_available_itemnumbers, $self->search( - { - itemlost => 0, withdrawn => 0, damaged => 0, notforloan => 0, - itype => { -not_in => \@item_types_notforloan }, restricted => 0, - } - )->get_column('itemnumber'); + push @not_available_itemnumbers, $self->filter_by_has_holds->get_column('itemnumber'); push @not_available_itemnumbers, $self->filter_by_has_recalls->get_column('itemnumber'); - return Koha::Items->search( { 'me.itemnumber' => [ array_minus @all_itemnumbers, @not_available_itemnumbers ] } ); + my @item_types_notforloan = Koha::ItemTypes->search( { notforloan => { '!=' => 0 } } )->get_column('itemtype'); + return Koha::Items->search( + { + 'me.itemnumber' => [ array_minus @all_itemnumbers, @not_available_itemnumbers ], + itemlost => 0, + withdrawn => 0, + damaged => 0, + notforloan => { '<=' => 0 }, + 'me.itype' => { -not_in => \@item_types_notforloan }, + restricted => [ { '!=' => 0 }, undef ], + } + ); } =head3 move_to_biblio @@ -601,7 +606,7 @@ sub search { if ( $status eq 'not_for_loan' ) { my @item_types_notforloan = Koha::ItemTypes->search( { notforloan => { '!=' => 0 } } )->get_column('itemtype'); - $self = $self->search( [ { notforloan => { '!=' => 0 } }, { 'me.itype' => \@item_types_notforloan } ] ); + $self = $self->search( [ { notforloan => { '<=' => 0 } }, { 'me.itype' => \@item_types_notforloan } ] ); } if ( $status eq 'on_hold' ) { $self = $self->filter_by_has_holds; @@ -615,7 +620,7 @@ sub search { } if ( $status eq 'restricted' ) { - $self = $self->search( { restricted => { '!=' => 0 } } ); + $self = $self->search( { restricted => [ { '!=' => 0 }, undef ] } ); } } -- 2.39.5