Bug 11518: Add new method to K::S::R::Item that will always return the correct itemtype
authorKyle M Hall <kyle@bywatersolutions.com>
Fri, 10 Jan 2014 13:03:59 +0000 (08:03 -0500)
committerGalen Charlton <gmc@esilibrary.com>
Tue, 29 Apr 2014 15:04:55 +0000 (15:04 +0000)
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>
Koha/Schema/Result/Biblio.pm
Koha/Schema/Result/Item.pm
t/db_dependent/Items.t

index 2a8c28e..5f2e399 100644 (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
 # 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;
index 4e46ac7..656de69 100644 (file)
@@ -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;
index 5ec8d34..a4bdd1c 100755 (executable)
@@ -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();