diff --git a/Koha/Object/Mixin/AdditionalFields.pm b/Koha/Object/Mixin/AdditionalFields.pm index 77aff5bbc4..9f7a39728b 100644 --- a/Koha/Object/Mixin/AdditionalFields.pm +++ b/Koha/Object/Mixin/AdditionalFields.pm @@ -91,6 +91,53 @@ sub set_additional_fields { } } +=head3 add_additional_fields + +Similar to set_additional_fields, but instead of overwriting existing fields, only adds new ones + + $foo->add_additional_fields( + { + '2' => [ + 'first value for field 2', + 'second value for field 2' + ], + '1' => ['first value for field 1'] + }, + 'subscription' + ); + +=cut + +sub add_additional_fields { + my ( $self, $new_additional_fields, $tablename ) = @_; + + my @additional_fields; + + my $table_fields = Koha::AdditionalFields->search( { tablename => $tablename } ); + while ( my $field = $table_fields->next ) { + my $new_additional_field_values = $new_additional_fields->{ $field->id }; + + if ( $new_additional_field_values && scalar @{$new_additional_field_values} ) { + foreach my $value ( @{$new_additional_field_values} ) { + push @additional_fields, { + id => $field->id, + value => $value, + } if $value; + } + } else { + my $existing_additional_field_values = $self->additional_field_values->search( { field_id => $field->id } ); + while ( my $existing = $existing_additional_field_values->next ) { + push @additional_fields, { + id => $field->id, + value => $existing->value, + } if $existing && $existing->value; + } + } + } + + $self->set_additional_fields( \@additional_fields ); +} + =head3 get_additional_field_values_for_template Returns additional field values in the format expected by the .tt file diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc index dd3db99683..4c42e905d3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc @@ -20,7 +20,11 @@ [% END %] [% END %] [% IF !field.repeatable %] - + [% IF batch_edit %] + + [% ELSE %] + + [% END %] [% END %] [% IF authorised_value_category == 'branches' %] [% FOREACH branch IN Branches.all() %] @@ -108,7 +112,11 @@ [% IF !text_field_value_rendered %]
  • - + [% IF batch_edit %] + + [% ELSE %] + + [% END %] [% UNLESS search_form == 1 %] Clear [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt index f67dbffa6c..0d3ab11439 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt @@ -1,4 +1,5 @@ [% USE raw %] +[% USE Asset %] [% USE AuthorisedValues %] [% USE Branches %] [% USE ItemTypes %] @@ -143,20 +144,8 @@
  • - [% FOREACH field IN additional_fields %] -
  • - - [% IF field.authorised_value_category %] - - [% ELSE %] - - [% END %] -
  • + [% IF available_additional_fields.count %] + [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values batch_edit=1 %] [% END %] @@ -178,5 +167,5 @@ - + [% Asset.js("js/additional-fields-entry.js") | $raw %] [% INCLUDE 'intranet-bottom.inc' %] diff --git a/serials/subscription-batchedit.pl b/serials/subscription-batchedit.pl index cb2f65c098..bffeaf9733 100755 --- a/serials/subscription-batchedit.pl +++ b/serials/subscription-batchedit.pl @@ -49,7 +49,7 @@ foreach my $subscriptionid (@subscriptionids) { push @subscriptions, $subscription if $subscription; } -my @available_additional_fields = Koha::AdditionalFields->search( { tablename => 'subscription' } )->as_list; +my $available_additional_fields = Koha::AdditionalFields->search( { tablename => 'subscription' } ); my $op = $cgi->param('op') || q{}; if ( $op eq 'cud-batchedit' ) { @@ -66,9 +66,15 @@ if ( $op eq 'cud-batchedit' ) { $params{'enddate'} = dt_from_string( scalar $cgi->param('enddate') ) if $cgi->param('enddate'); my $field_values = {}; - foreach my $field (@available_additional_fields) { - my $value = $cgi->param( 'field_' . $field->id ); - $field_values->{ $field->id } = $value; + + while ( my $available_field = $available_additional_fields->next ) { + my @submitted_fields = $cgi->param( 'additional_field_' . $available_field->id ); + + my @submitted_fields_array; + foreach my $submitted_field (@submitted_fields) { + push @submitted_fields_array, $submitted_field if $submitted_field; + } + $field_values->{ $available_field->id } = \@submitted_fields_array; } foreach my $subscription (@subscriptions) { @@ -81,25 +87,7 @@ if ( $op eq 'cud-batchedit' ) { } } - my @additional_field_values; - foreach my $field (@available_additional_fields) { - my $value = $field_values->{ $field->id }; - if ( defined $value and $value ne '' ) { - push @additional_field_values, { - id => $field->id, - value => $value, - }; - } else { - my $existing = $subscription->additional_field_values->search( { field_id => $field->id } )->last; - if ( $existing && $existing->value ) { - push @additional_field_values, { - id => $field->id, - value => $existing->value, - }; - } - } - } - $subscription->set_additional_fields( \@additional_field_values ); + $subscription->add_additional_fields($field_values, 'subscription'); $subscription->store; } @@ -110,10 +98,10 @@ if ( $op eq 'cud-batchedit' ) { } $template->param( - subscriptions => \@subscriptions, - booksellers => [ Koha::Acquisition::Booksellers->search->as_list ], - additional_fields => \@available_additional_fields, - referrer => scalar $cgi->param('referrer'), + subscriptions => \@subscriptions, + booksellers => [ Koha::Acquisition::Booksellers->search->as_list ], + available_additional_fields => Koha::AdditionalFields->search( { tablename => 'subscription' } ), + referrer => scalar $cgi->param('referrer'), ); output_html_with_http_headers $cgi, $cookie, $template->output;