@@ -, +, @@ --- Koha/Object/Mixin/AdditionalFields.pm | 47 +++++++++++++++++++ .../en/includes/additional-fields-entry.inc | 12 ++++- .../modules/serials/subscription-batchedit.tt | 19 ++------ serials/subscription-batchedit.pl | 42 ++++++----------- 4 files changed, 76 insertions(+), 44 deletions(-) --- a/Koha/Object/Mixin/AdditionalFields.pm +++ a/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 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc +++ a/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 %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt +++ a/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 %] @@ -141,20 +142,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 %] @@ -175,5 +164,5 @@ - + [% Asset.js("js/additional-fields-entry.js") | $raw %] [% INCLUDE 'intranet-bottom.inc' %] --- a/serials/subscription-batchedit.pl +++ a/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 $batchedit = $cgi->param('batchedit'); if ($batchedit) { @@ -65,9 +65,15 @@ if ($batchedit) { ); 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) { @@ -80,25 +86,7 @@ if ($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; } @@ -109,10 +97,10 @@ if ($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; --