From 160cc74124de449603517e513aba47c0f85f6209 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 19 Jul 2022 16:09:46 +0200 Subject: [PATCH] Bug 31179: Don't copy invisible subfields when duplicating items Duplicate item is intended to duplicate the visible cataloging fields of an item, however, currently it is duplicating the complete internal record of the item To recreate: 1 - find an item in Koha staff client, copy the barcode 2 - Issue this item to a patron 3 - Return to the record 4 - Edit items 5 - Click 'Actions->Duplicate' for the item in question 6 - Save the item 7 - Note in the items table above for that 'Total checkouts' 'Due date' etc. have not been copied to new item Signed-off-by: Nick Clemens Signed-off-by: Tomas Cohen Arazi --- Koha/UI/Form/Builder/Item.pm | 14 +++++++- cataloguing/additem.pl | 5 +++ t/db_dependent/Koha/UI/Form/Builder/Item.t | 37 +++++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/Koha/UI/Form/Builder/Item.pm b/Koha/UI/Form/Builder/Item.pm index 5efe6ed796..fde62ea4e1 100644 --- a/Koha/UI/Form/Builder/Item.pm +++ b/Koha/UI/Form/Builder/Item.pm @@ -455,6 +455,14 @@ Flag to add an empty option to the library list. =back +=item ignore_invisible_subfields + +Skip the subfields that are not visible on the editor. + +When duplicating an item we do not want to retrieve the subfields that are hidden. + +=back + =cut sub edit_form { @@ -469,6 +477,7 @@ sub edit_form { my $prefill_with_default_values = $params->{prefill_with_default_values}; my $branch_limit = $params->{branch_limit}; my $default_branches_empty = $params->{default_branches_empty}; + my $ignore_invisible_subfields = $params->{ignore_invisible_subfields} || 0; my $libraries = Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed; @@ -500,6 +509,10 @@ sub edit_form { if grep { $subfield->{kohafield} && $subfield->{kohafield} eq $_ } @$kohafields_to_ignore; + next + if $ignore_invisible_subfields + && ( $subfield->{hidden} > 4 || $subfield->{hidden} <= -4 ); + my $readonly; if ( @$subfields_to_allow && !grep { @@ -507,7 +520,6 @@ sub edit_form { } @$subfields_to_allow ) { - next if $ignore_not_allowed_subfields; $readonly = 1 if $restricted_edition; } diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 7cf5c03660..86aa0cf009 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -626,6 +626,11 @@ my $subfields = ), prefill_with_default_values => 1, branch_limit => C4::Context->userenv->{"branch"}, + ( + $op eq 'dupeitem' + ? ( ignore_invisible_subfields => 1 ) + : () + ), } ); diff --git a/t/db_dependent/Koha/UI/Form/Builder/Item.t b/t/db_dependent/Koha/UI/Form/Builder/Item.t index 369f9b0398..b5d2a1a7a5 100755 --- a/t/db_dependent/Koha/UI/Form/Builder/Item.t +++ b/t/db_dependent/Koha/UI/Form/Builder/Item.t @@ -16,7 +16,7 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 7; +use Test::More tests => 8; use Data::Dumper qw( Dumper ); use utf8; @@ -298,6 +298,41 @@ subtest 'subfields_to_allow & ignore_not_allowed_subfields' => sub { is( $subfield, undef, "subfield that is not in the allow list is not returned" ); }; +subtest 'ignore_invisible_subfields' => sub { + plan tests => 2; + + my $biblio = + $builder->build_sample_biblio( { value => { frameworkcode => '' } } ); + my $item = $builder->build_sample_item( + { + issues => 42, + } + ); + + # items.issues is mapped with 952$l + my $subfields = Koha::UI::Form::Builder::Item->new( + { + biblionumber => $biblio->biblionumber, + item => $item->unblessed, + } + )->edit_form; + ( my $subfield ) = grep { $_->{subfield} eq 'l' } @$subfields; + is( $subfield->{marc_value}->{value}, 42, 'items.issues copied' ); + + $subfields = Koha::UI::Form::Builder::Item->new( + { + biblionumber => $biblio->biblionumber, + item => $item->unblessed, + } + )->edit_form( + { + ignore_invisible_subfields => 1 + } + ); + ($subfield) = grep { $_->{subfield} eq 'l' } @$subfields; + is( $subfield->{marc_value}->{value}, + undef, 'items.issues not copied if ignore_invisible_subfields is passed' ); +}; $cache->clear_from_cache("MarcStructure-0-"); $cache->clear_from_cache("MarcStructure-1-"); -- 2.34.1