Bug 33496: Add 'host_items' param to Koha::Biblio->items
This patch adds an option to the $biblio->items method to allow
retrieving the items and analytic items for a record. This is intended
to allow fetching a single Items object, and related object, rather than
having to fetch the items, and the host items, and push them together
This is step towards being able to fetch items using API/DataTables directly
To test:
1 - prove -v t/db_dependent/Koha/Biblio.t
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 8ff2e962b2
)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
parent
fdc49e0fb3
commit
aac8c1e36e
2 changed files with 40 additions and 9 deletions
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue