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 <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Jonathan Druart 2022-07-19 16:09:46 +02:00 committed by Tomas Cohen Arazi
parent 47c8605487
commit b90787d5c8
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
3 changed files with 54 additions and 2 deletions

View 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;
}

View File

@ -626,6 +626,11 @@ my $subfields =
),
prefill_with_default_values => 1,
branch_limit => C4::Context->userenv->{"branch"},
(
$op eq 'dupeitem'
? ( ignore_invisible_subfields => 1 )
: ()
),
}
);

View File

@ -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-");