From d6fe41657861666320383904b16165cc4820777a Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 8 Nov 2018 14:49:10 +0100 Subject: [PATCH] Bug 21774: Cloned item subfields disappear when editing an item Bug 10306 changed behavior on cloning item subfields by no longer splitting constructions like 'A | B' in item fields like ccode. If it is really recommended to clone item subfields, I am not so sure about. But this patch at least restores the possibility to do so while we discuss if we should ;) Test plan: [1] Run Items.t [2] Make an item subfield repeatable in framework. And test edit items. Signed-off-by: Marcel de Rooy Signed-off-by: Fridolin Somers Signed-off-by: Tomas Cohen Arazi Works as expected. Also fixes the display of collections on the items table (on editing items). Signed-off-by: Nick Clemens (cherry picked from commit 5f34dd06ec66b11a914e49eb611714ea4c72771d) Signed-off-by: Jesse Maseto --- C4/Items.pm | 4 +- t/db_dependent/Items.t | 87 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 3c5d9c3012..abd7520491 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1502,9 +1502,7 @@ sub Item2Marc { } keys %{ $itemrecord } }; my $framework = C4::Biblio::GetFrameworkCode( $biblionumber ); - my $itemmarc = C4::Biblio::TransformKohaToMarc( - $mungeditem, { no_split => 1}, - ); + my $itemmarc = C4::Biblio::TransformKohaToMarc( $mungeditem ); # Bug 21774: no_split parameter removed to allow cloned subfields my ( $itemtag, $itemsubfield ) = C4::Biblio::GetMarcFromKohaField( "items.itemnumber", $framework, ); diff --git a/t/db_dependent/Items.t b/t/db_dependent/Items.t index f8e8dc8fb5..9c553b7eb2 100755 --- a/t/db_dependent/Items.t +++ b/t/db_dependent/Items.t @@ -33,7 +33,7 @@ use Koha::Caches; use t::lib::Mocks; use t::lib::TestBuilder; -use Test::More tests => 12; +use Test::More tests => 14; use Test::Warn; @@ -840,6 +840,91 @@ subtest 'Test logging for ModItem' => sub { $schema->storage->txn_rollback; }; +subtest 'Check stockrotationitem relationship' => sub { + plan tests => 1; + + $schema->storage->txn_begin(); + + my $builder = t::lib::TestBuilder->new; + my $item = $builder->build({ source => 'Item' }); + + $builder->build({ + source => 'Stockrotationitem', + value => { itemnumber_id => $item->{itemnumber} } + }); + + my $sritem = Koha::Items->find($item->{itemnumber})->stockrotationitem; + isa_ok( $sritem, 'Koha::StockRotationItem', "Relationship works and correctly creates Koha::Object." ); + + $schema->storage->txn_rollback; +}; + +subtest 'Check add_to_rota method' => sub { + plan tests => 2; + + $schema->storage->txn_begin(); + + my $builder = t::lib::TestBuilder->new; + my $item = $builder->build({ source => 'Item' }); + my $rota = $builder->build({ source => 'Stockrotationrota' }); + my $srrota = Koha::StockRotationRotas->find($rota->{rota_id}); + + $builder->build({ + source => 'Stockrotationstage', + value => { rota_id => $rota->{rota_id} }, + }); + + my $sritem = Koha::Items->find($item->{itemnumber}); + $sritem->add_to_rota($rota->{rota_id}); + + is( + Koha::StockRotationItems->find($item->{itemnumber})->stage_id, + $srrota->stockrotationstages->next->stage_id, + "Adding to a rota a new sritem item being assigned to its first stage." + ); + + my $newrota = $builder->build({ source => 'Stockrotationrota' }); + + my $srnewrota = Koha::StockRotationRotas->find($newrota->{rota_id}); + + $builder->build({ + source => 'Stockrotationstage', + value => { rota_id => $newrota->{rota_id} }, + }); + + $sritem->add_to_rota($newrota->{rota_id}); + + is( + Koha::StockRotationItems->find($item->{itemnumber})->stage_id, + $srnewrota->stockrotationstages->next->stage_id, + "Moving an item results in that sritem being assigned to the new first stage." + ); + + $schema->storage->txn_rollback; +}; + +subtest 'Split subfields in Item2Marc (Bug 21774)' => sub { + plan tests => 3; + $schema->storage->txn_begin; + + my $builder = t::lib::TestBuilder->new; + my $biblio = $builder->build({ source => 'Biblio', value => { frameworkcode => q{} } }); + my $item = $builder->build({ source => 'Item', value => { biblionumber => $biblio->{biblionumber}, ccode => 'A|B' } }); + + Koha::MarcSubfieldStructures->search({ tagfield => '952', tagsubfield => '8' })->delete; # theoretical precaution + Koha::MarcSubfieldStructures->search({ kohafield => 'items.ccode' })->delete; + my $mapping = Koha::MarcSubfieldStructure->new({ frameworkcode => q{}, tagfield => '952', tagsubfield => '8', kohafield => 'items.ccode' })->store; + + # Start testing + my $marc = C4::Items::Item2Marc( $item, $biblio->{biblionumber} ); + my @subs = $marc->subfield( $mapping->tagfield, $mapping->tagsubfield ); + is( @subs, 2, 'Expect two subfields' ); + is( $subs[0], 'A', 'First subfield matches' ); + is( $subs[1], 'B', 'Second subfield matches' ); + + $schema->storage->txn_rollback; +}; + # Helper method to set up a Biblio. sub get_biblio { my ( $frameworkcode ) = @_; -- 2.39.5