From cef35259ee120f37d19962208c0afc092348f5b2 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 10 Jan 2014 08:03:59 -0500 Subject: [PATCH] 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 Signed-off-by: Galen Charlton --- Koha/Schema/Result/Biblio.pm | 6 +++++- Koha/Schema/Result/Item.pm | 17 +++++++++++++++++ t/db_dependent/Items.t | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/Koha/Schema/Result/Biblio.pm b/Koha/Schema/Result/Biblio.pm index 2a8c28ea3b..5f2e39930c 100644 --- a/Koha/Schema/Result/Biblio.pm +++ b/Koha/Schema/Result/Biblio.pm @@ -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 # 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; diff --git a/Koha/Schema/Result/Item.pm b/Koha/Schema/Result/Item.pm index 4e46ac7b5f..656de69512 100644 --- a/Koha/Schema/Result/Item.pm +++ b/Koha/Schema/Result/Item.pm @@ -618,4 +618,21 @@ __PACKAGE__->belongs_to( { "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; diff --git a/t/db_dependent/Items.t b/t/db_dependent/Items.t index 5ec8d3452f..a4bdd1cf5f 100755 --- a/t/db_dependent/Items.t +++ b/t/db_dependent/Items.t @@ -20,6 +20,7 @@ use Modern::Perl; use MARC::Record; use C4::Biblio; +use Koha::Database; use Test::More tests => 3; @@ -142,6 +143,42 @@ subtest 'GetHiddenItemnumbers tests' => sub { $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. sub get_biblio { my $bib = MARC::Record->new(); -- 2.39.5