From add251b10aed83217f340ca2f2926731aac5efa4 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Tue, 11 Apr 2017 18:07:47 +0200 Subject: [PATCH] Bug 18426: Allow to edit subscriptions in batch This adds a checkbox column in serials-search.pl tables that allow to edit selected subscriptions. The following fields can be modified: - Bookseller - Location - Library - Item type - Public note - Nonpublic note - "Create item when receiving" flag - Expiration date + the additional fields defined in serials/add_fields.pl Test plan: 1. Go to Serials module 2. If there is no additional fields defined, define some (at least one with an authorized value and one without) 3. Start a subscription search 4. Select some results using the checkboxes and click the "Edit" button above the table 5. Select values for some fields (not all) and click "Start batch edit" 6. Verify you are being redirected to the previous search results 7. Verify that the fields for which you selected a value were modified and that the others fields weren't 8. Repeat steps 4 to 7 but this time, modify the other fields. --- .../prog/en/modules/serials/serials-search.tt | 29 +++- .../en/modules/serials/subscription-batchedit.tt | 153 +++++++++++++++++++++ serials/subscription-batchedit.pl | 107 ++++++++++++++ 3 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt create mode 100755 serials/subscription-batchedit.pl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt index 48cf07df32..7ee6e709a2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt @@ -1,6 +1,7 @@ [% USE Asset %] [% USE AuthorisedValues %] [% USE Branches %] +[% USE CGI %] [% USE KohaDates %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] @@ -18,9 +19,26 @@ [% BLOCK subscriptions_table %] - + + + [% url_params = [] %] + [% FOREACH param IN CGI.params.pairs %] + [% escaped_value = BLOCK %][% param.value | uri %][% END %] + [% url_params.push(param.key _ '=' _ escaped_value) %] + [% END %] + + +
+ Select all + | + Clear all + | + +
+
+ @@ -38,6 +56,7 @@ + @@ -57,6 +76,7 @@ [% FOREACH subscription IN subscriptions %] [% UNLESS subscription.cannotdisplay %] +
ISSN Title Notes
[% IF ( subscription.issn ) %][% subscription.issn %] [% END %] @@ -157,6 +177,7 @@ [% END %]
+ [% END %]
@@ -397,6 +418,12 @@ $("#reopensub").click(function(){ return confirm(_("Are you sure you want to reopen this subscription?")); }); + + $('.select-all, .clear-all').on('click', function(e) { + e.preventDefault(); + var checkboxes = $(this).parents('form').find('input[type="checkbox"]'); + checkboxes.prop('checked', $(this).hasClass('select-all')); + }); }); [% 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 new file mode 100644 index 0000000000..d2ca0e2477 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-batchedit.tt @@ -0,0 +1,153 @@ +[% USE AuthorisedValues %] +[% USE Branches %] +[% USE ItemTypes %] +[% USE KohaDates %] +[% INCLUDE 'doc-head-open.inc' %] + Koha › Serials › Batch edit + [% INCLUDE 'doc-head-close.inc' %] + [% INCLUDE 'calendar.inc' %] + + + [% INCLUDE 'header.inc' %] + [% INCLUDE 'serials-search.inc' %] + + + +
+
+
+
+

Subscription batch edit

+ +
+

You are about to edit the following subscriptions:

+ + + + + + + + + + + + + + [% FOREACH subscription IN subscriptions %] + + + + + + + + + + [% END %] + +
ISSNTitleNotesLibraryLocationCall numberExpiration date
[% subscription.biblio.biblioitem.issn %][% subscription.biblio.title %] (#[% subscription.subscriptionid %])[% subscription.notes %] [% IF subscription.internalnotes %]([% subscription.internalnotes %])[% END %][% Branches.GetName(subscription.branchcode) %][% AuthorisedValues.GetByCode('LOC', subscription.location) %][% subscription.callnumber %][% subscription.enddate | $KohaDates %]
+
+ +
+ [% FOREACH subscription IN subscriptions %] + + [% END %] + [% IF referrer %] + + [% END %] +
+
    +
  1. + + +
  2. +
  3. + + +
  4. +
  5. + + +
  6. +
  7. + + +
  8. +
  9. + + +
  10. +
  11. + + +
  12. +
  13. + + + +
  14. +
  15. + + +
  16. + [% FOREACH field IN additional_fields %] +
  17. + + [% IF field.authorised_value_category %] + + [% ELSE %] + + [% END %] +
  18. + [% END %] +
+
+ +
+ +
+
+
+
+
+ [% INCLUDE 'serials-menu.inc' %] +
+
+ + [% INCLUDE 'intranet-bottom.inc' %] diff --git a/serials/subscription-batchedit.pl b/serials/subscription-batchedit.pl new file mode 100755 index 0000000000..865116ab51 --- /dev/null +++ b/serials/subscription-batchedit.pl @@ -0,0 +1,107 @@ +#!/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 . + +use Modern::Perl; + +use CGI qw( -utf8 ); + +use C4::Auth; +use C4::Output; +use Koha::Subscriptions; +use Koha::Acquisition::Booksellers; +use Koha::AdditionalField; +use Koha::DateUtils; + +my $cgi = new CGI; + +my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => 'serials/subscription-batchedit.tt', + query => $cgi, + type => 'intranet', + authnotrequired => 0, + 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 $additional_fields = Koha::AdditionalField->all({tablename => 'subscription'}); + +my $batchedit = $cgi->param('batchedit'); +if ($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'), + enddate => dt_from_string(scalar $cgi->param('enddate')), + ); + + my $field_values = {}; + foreach my $field (@$additional_fields) { + my $value = $cgi->param('field_' . $field->{id}); + $field_values->{$field->{id}} = $value; + } + + foreach my $subscription (@subscriptions) { + while (my ($key, $value) = each %params) { + if (defined $value and $value ne '') { + $subscription->$key($value); + } + } + + foreach my $field (@$additional_fields) { + my $value = $field_values->{$field->{id}}; + if (defined $value and $value ne '') { + $field->{values} //= {}; + $field->{values}->{$subscription->subscriptionid} = $value; + } + } + + $subscription->store; + } + + foreach my $field (@$additional_fields) { + if (defined $field->{values}) { + $field->insert_values(); + } + } + + 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() ], + additional_fields => $additional_fields, + referrer => scalar $cgi->param('referrer'), +); + +output_html_with_http_headers $cgi, $cookie, $template->output; -- 2.11.0