Koha/serials/subscription-batchedit.pl
Chris Cormack 5a07a04fdb
Bug 37183: Batch edit serial subscriptions sets expiration date to today
Test plan:

Add some serials:
1) Add a new serial, visit:
   /cgi-bin/koha/serials/subscription-add.pl
2) Put a biblionumber in the 'record' field, e.g. '112'.
   Press 'next' and click 'ok' on the alert box.
3) Fill all the required fields and click 'test prediction'.
4) Fill the Subscription end date (= Expiration Date).
5) Click 'save subscription'.
6) Repeat steps 1-5 to create a second serial.

Batch edit serials:
1) Visit serials and hit the 'Search' button:
   /cgi-bin/koha/serials/serials-home.pl
2) Click the 2 checkboxes for the 2 serials we created
   previously and click the new link that pops up
   'Edit selected serials'.
3) Click 'Save' without changing anything.
4) Go back to either of the serials, notice the value
   for Expiration date is changed to TODAY
   (the date of the batch edit).

Apply the patch and retest the batch editing (before
retesting, change the expiration dates of the two
serials back to the original expiration date).

Note that the expiration date now only changes if you
enter a date in the 'Expiration date' field.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
2024-07-01 18:55:40 +02:00

119 lines
4.2 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2017 BibLibre
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use CGI qw( -utf8 );
use C4::Auth qw( get_template_and_user );
use C4::Output qw( output_html_with_http_headers );
use C4::Serials qw( can_edit_subscription );
use Koha::Subscriptions;
use Koha::Acquisition::Booksellers;
use Koha::AdditionalFields;
use Koha::DateUtils qw( dt_from_string );
my $cgi = CGI->new;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => 'serials/subscription-batchedit.tt',
query => $cgi,
type => 'intranet',
flagsrequired => { serials => 'edit_subscription' },
}
);
my @subscriptionids = $cgi->multi_param('subscriptionid');
my @subscriptions;
foreach my $subscriptionid (@subscriptionids) {
my $subscription = Koha::Subscriptions->find($subscriptionid);
push @subscriptions, $subscription if $subscription;
}
my @available_additional_fields = Koha::AdditionalFields->search( { tablename => 'subscription' } )->as_list;
my $op = $cgi->param('op') || q{};
if ( $op eq 'cud-batchedit' ) {
my %params = (
aqbooksellerid => scalar $cgi->param('booksellerid'),
location => scalar $cgi->param('location'),
branchcode => scalar $cgi->param('branchcode'),
itemtype => scalar $cgi->param('itemtype'),
notes => scalar $cgi->param('notes'),
internalnotes => scalar $cgi->param('internalnotes'),
serialsadditems => scalar $cgi->param('serialsadditems'),
);
# If we convert a blank string we get todays date, we should only convert enddate if it is not blank
$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;
}
foreach my $subscription (@subscriptions) {
next
unless C4::Serials::can_edit_subscription( $subscription->unblessed )
; # This should be moved to Koha::Subscription->can_edit
while ( my ( $key, $value ) = each %params ) {
if ( defined $value and $value ne '' ) {
$subscription->$key($value);
}
}
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->store;
}
my $redirect_url = $cgi->param('referrer') // '/cgi-bin/koha/serials/serials-home.pl';
print $cgi->redirect($redirect_url);
exit;
}
$template->param(
subscriptions => \@subscriptions,
booksellers => [ Koha::Acquisition::Booksellers->search->as_list ],
additional_fields => \@available_additional_fields,
referrer => scalar $cgi->param('referrer'),
);
output_html_with_http_headers $cgi, $cookie, $template->output;