Bug 11518: Add new method to K::S::R::Item that will always return the correct itemtype

There are many disparate areas of Koha that deal with item level
itemtypes vs record level itemtypes. We can take advantage of
DBIx::Class to make smarter objects that automatically return the
correct value depending on the system preference.

Test Plan:
1) Apply this patch
2) Run t/db_dependent/Items.t

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
Kyle Hall 2014-01-10 08:03:59 -05:00 committed by Galen Charlton
parent 8f287eebc5
commit cef35259ee
3 changed files with 59 additions and 1 deletions

View file

@ -331,6 +331,10 @@ __PACKAGE__->many_to_many("sets", "oai_sets_biblios", "set");
# Created by DBIx::Class::Schema::Loader v0.07025 @ 2013-10-14 20:56:21 # Created by DBIx::Class::Schema::Loader v0.07025 @ 2013-10-14 20:56:21
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:0//8OGf7OteNnwT03g4QsA # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:0//8OGf7OteNnwT03g4QsA
__PACKAGE__->belongs_to(
"biblioitem",
"Koha::Schema::Result::Biblioitem",
{ "foreign.biblionumber" => "self.biblionumber" }
);
# You can replace this text with custom content, and it will be preserved on regeneration
1; 1;

View file

@ -618,4 +618,21 @@ __PACKAGE__->belongs_to(
{ "foreign.biblionumber" => "self.biblionumber" } { "foreign.biblionumber" => "self.biblionumber" }
); );
__PACKAGE__->belongs_to(
"biblioitem",
"Koha::Schema::Result::Biblioitem",
{ biblioitemnumber => "biblioitemnumber" },
);
use C4::Context;
sub itemtype {
my ( $self ) = @_;
if ( C4::Context->preference('item-level_itypes') ) {
return $self->itype();
} else {
return $self->biblioitem()->itemtype();
}
}
1; 1;

View file

@ -20,6 +20,7 @@ use Modern::Perl;
use MARC::Record; use MARC::Record;
use C4::Biblio; use C4::Biblio;
use Koha::Database;
use Test::More tests => 3; use Test::More tests => 3;
@ -142,6 +143,42 @@ subtest 'GetHiddenItemnumbers tests' => sub {
$dbh->rollback; $dbh->rollback;
}; };
subtest q{Test Koha::Database->schema()->resultset('Item')->itemtype()} => sub {
plan tests => 2;
# Start transaction
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
my $schema = Koha::Database->new()->schema();
my $biblio =
$schema->resultset('Biblio')->create(
{
title => "Test title",
biblioitems => [
{
itemtype => 'BIB_LEVEL',
items => [ { itype => "ITEM_LEVEL" } ]
}
]
}
);
my $biblioitem = $biblio->biblioitem();
my ( $item ) = $biblioitem->items();
C4::Context->set_preference( 'item-level_itypes', 0 );
ok( $item->itemtype() eq 'BIB_LEVEL', '$item->itemtype() returns biblioitem.itemtype when item-level_itypes is disabled' );
C4::Context->set_preference( 'item-level_itypes', 1 );
ok( $item->itemtype() eq 'ITEM_LEVEL', '$item->itemtype() returns items.itype when item-level_itypes is disabled' );
$dbh->rollback;
};
# Helper method to set up a Biblio. # Helper method to set up a Biblio.
sub get_biblio { sub get_biblio {
my $bib = MARC::Record->new(); my $bib = MARC::Record->new();