diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index f8d6fcdff4..a01c6e8797 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -486,11 +486,17 @@ Returns the related Koha::Items object for this biblio =cut sub items { - my ($self) = @_; + my ($self,$params) = @_; my $items_rs = $self->_result->items; - return Koha::Items->_new_from_dbic( $items_rs ); + return Koha::Items->_new_from_dbic( $items_rs ) unless $params->{host_items}; + + my $host_itemnumbers = $self->_host_itemnumbers(); + my $params = { -or => [biblionumber => $self->id] }; + push @{$params->{'-or'}}, itemnumber => { -in => $host_itemnumbers } if $host_itemnumbers; + + return Koha::Items->search($params); } =head3 host_items @@ -507,12 +513,25 @@ sub host_items { return Koha::Items->new->empty unless C4::Context->preference('EasyAnalyticalRecords'); + my $host_itemnumbers = $self->_host_itemnumbers; + + return Koha::Items->search( { itemnumber => { -in => $host_itemnumbers } } ); +} + +=head3 _host_itemnumbers + +my $host_itemnumber = $biblio->_host_itemnumbers(); + +Return the itemnumbers for analytical items on this record + +=cut + +sub _host_itemnumbers { + my ($self) = @_; + my $marcflavour = C4::Context->preference("marcflavour"); my $analyticfield = '773'; - if ( $marcflavour eq 'MARC21' ) { - $analyticfield = '773'; - } - elsif ( $marcflavour eq 'UNIMARC' ) { + if ( $marcflavour eq 'UNIMARC' ) { $analyticfield = '461'; } my $marc_record = $self->metadata->record; @@ -520,10 +539,10 @@ sub host_items { foreach my $field ( $marc_record->field($analyticfield) ) { push @itemnumbers, $field->subfield('9'); } - - return Koha::Items->search( { itemnumber => { -in => \@itemnumbers } } ); + return \@itemnumbers; } + =head3 itemtype my $itemtype = $biblio->itemtype(); diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t index 9f8754aa91..38164b6494 100755 --- a/t/db_dependent/Koha/Biblio.t +++ b/t/db_dependent/Koha/Biblio.t @@ -811,7 +811,7 @@ subtest 'get_marc_notes() UNIMARC tests' => sub { }; subtest 'host_items() tests' => sub { - plan tests => 6; + plan tests => 7; $schema->storage->txn_begin; @@ -847,6 +847,18 @@ subtest 'host_items() tests' => sub { is( ref($host_items), 'Koha::Items' ); is( $host_items->count, 0 ); + subtest 'test host_items param in items()' => sub { + plan tests => 4; + + my $items = $biblio->items; + is( $items->count, 1, "Without host_items param we only get the items on the biblio"); + $items = $biblio->items({ host_items => 1 }); + is( $items->count, 3, "With param host_items we get the biblio items plus analytics"); + is( ref($items), 'Koha::Items', "We correctly get an Items object"); + is_deeply( [ $items->get_column('itemnumber') ], + [ $item_1->itemnumber, $host_item_1->itemnumber, $host_item_2->itemnumber ] ); + }; + $schema->storage->txn_rollback; };