From e3154192cf99482c3e5263560b3a0dac0dad8af9 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 5 Nov 2024 15:11:48 +0100 Subject: [PATCH 04/13] 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 | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Koha/Items.pm b/Koha/Items.pm index e107d217f8..5d3a8d7532 100644 --- a/Koha/Items.pm +++ b/Koha/Items.pm @@ -290,20 +290,25 @@ 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 @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 ], + } + ); } @@ -594,7 +599,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; @@ -608,7 +613,7 @@ sub search { } if ( $status eq 'restricted' ) { - $self = $self->search( { restricted => { '!=' => 0 } } ); + $self = $self->search( { restricted => [ { '!=' => 0 }, undef ] } ); } } -- 2.34.1