Bug 35044: Update: Serial subscriptions batch edit

Test plan, k-t-d:

Preparation: Create additional fields for table 'subscription', visit:
/cgi-bin/koha/admin/additional-fields.pl?tablename=subscription

2 text fields, one repeatable, one not-repeatable
2 AV fields, one repeatable, one not-repeatable
2 MARC fields, one 'get' and one 'set', both non-repeatable, MARC field
942$c
Attempt to create a repeatable MARC field (get or set). Notice you're
unable to.

1) Add a new serial subscription, visit:
/cgi-bin/koha/serials/subscription-add.pl
2) Set the mandatory "Record" input (e.g. '112'). Click the 'Next' and
   press 'Ok' on the alert box.
3) Fill in all required fields and press "Test prediction pattern"
4) At the bottom, fill in all additional fields, click the '+New' and
   'Clear' links,  hit 'Save'
5) Notice the fields are shown, repeated fields are comma separated
6) Repeat steps 1-4 to create a second subscription
7) Visit serials home and hit "Search":
/cgi-bin/koha/serials/serials-home.pl
8) Check the checkboxes next to the 2 subscriptions and click "Edit
   selected serials"
9) Input some values in the additional fields section, click the '+New'
   and 'Clear' links,  hit 'Save'
10) Verify that both subscriptions now have the new values form the
    batch edit.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Pedro Amorim 2023-10-16 16:14:53 +00:00 committed by Katrin Fischer
parent 082a9e6858
commit 2fec74f6d1
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
4 changed files with 76 additions and 44 deletions

View File

@ -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

View File

@ -20,7 +20,11 @@
[% END %]
[% END %]
[% IF !field.repeatable %]
<option value=""></option>
[% IF batch_edit %]
<option value="">No change</option>
[% ELSE %]
<option value=""></option>
[% END %]
[% END %]
[% IF authorised_value_category == 'branches' %]
[% FOREACH branch IN Branches.all() %]
@ -108,7 +112,11 @@
[% IF !text_field_value_rendered %]
<li>
<label for="additional_field_[% field.id | html %]"> [% field.name | html %]: </label>
<input type="text" id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]" />
[% IF batch_edit %]
<input type="text" id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]" placeholder="No change" />
[% ELSE %]
<input type="text" id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]" />
[% END %]
[% UNLESS search_form == 1 %]
<a href="#" class="clear_attribute"><i class="fa fa-fw fa-trash-can"></i> Clear</a>
[% END %]

View File

@ -1,4 +1,5 @@
[% USE raw %]
[% USE Asset %]
[% USE AuthorisedValues %]
[% USE Branches %]
[% USE ItemTypes %]
@ -143,20 +144,8 @@
<label for="enddate">Expiration date: </label>
<input type="text" class="flatpickr" id="enddate" name="enddate" placeholder="No change"/>
</li>
[% FOREACH field IN additional_fields %]
<li>
<label for="field_[% field.id | html %]">[% field.name | html %]</label>
[% IF field.authorised_value_category %]
<select id="field_[% field.id | html %]" name="field_[% field.id | html %]">
<option value="">No change</option>
[% FOREACH av IN AuthorisedValues.Get(field.authorised_value_category) %]
<option value="[% av.authorised_value | html %]">[% av.lib | html %]</option>
[% END %]
</select>
[% ELSE %]
<input type="text" id="field_[% field.id | html %]" name="field_[% field.id | html %]" placeholder="No change"/>
[% END %]
</li>
[% IF available_additional_fields.count %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values batch_edit=1 %]
[% END %]
</ol>
</fieldset>
@ -178,5 +167,5 @@
</div> <!-- /.col-md-2.order-md-1 -->
</div> <!-- /.row -->
[% Asset.js("js/additional-fields-entry.js") | $raw %]
[% INCLUDE 'intranet-bottom.inc' %]

View File

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