Bug 31179: Don't copy invisible subfields when duplicating items
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 19 Jul 2022 14:09:46 +0000 (16:09 +0200)
committerTomas Cohen Arazi <tomascohen@theke.io>
Wed, 20 Jul 2022 12:04:58 +0000 (09:04 -0300)
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 <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Koha/UI/Form/Builder/Item.pm
cataloguing/additem.pl
t/db_dependent/Koha/UI/Form/Builder/Item.t

index 5efe6ed..fde62ea 100644 (file)
@@ -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;
             }
index 7cf5c03..86aa0cf 100755 (executable)
@@ -626,6 +626,11 @@ my $subfields =
         ),
         prefill_with_default_values => 1,
         branch_limit => C4::Context->userenv->{"branch"},
+        (
+            $op eq 'dupeitem'
+            ? ( ignore_invisible_subfields => 1 )
+            : ()
+        ),
     }
 );
 
index 369f9b0..b5d2a1a 100755 (executable)
@@ -16,7 +16,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 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-");