From 78cc2c95cb27da727c54ec24301815a907307a69 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. --- Koha/Subscription.pm | 13 ++ .../prog/en/modules/serials/serials-search.tt | 29 +++- .../en/modules/serials/subscription-batchedit.tt | 153 +++++++++++++++++++++ serials/subscription-batchedit.pl | 107 ++++++++++++++ 4 files changed, 301 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/Subscription.pm b/Koha/Subscription.pm index 332a01839a..0398763787 100644 --- a/Koha/Subscription.pm +++ b/Koha/Subscription.pm @@ -22,6 +22,7 @@ use Modern::Perl; use Carp; use Koha::Database; +use Koha::Biblios; use base qw(Koha::Object); @@ -35,6 +36,18 @@ Koha::Subscription - Koha Subscription Object class =cut +=head3 biblio + +Returns the biblio linked to this subscription as a Koha::Biblio object + +=cut + +sub biblio { + my ($self) = @_; + + return Koha::Biblios->find($self->biblionumber); +} + =head3 type =cut 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 ceab7c5dcd..84482b9ea2 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,4 +1,5 @@ [% USE Branches %] +[% USE CGI %] [% INCLUDE 'doc-head-open.inc' %] [% USE KohaDates %] [% USE AuthorisedValues %] @@ -35,6 +36,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')); + }); }); //]]> @@ -48,9 +55,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 + | + +
+
+ @@ -68,6 +92,7 @@ + @@ -87,6 +112,7 @@ [% FOREACH subscription IN subscriptions %] [% UNLESS subscription.cannotdisplay %] +
ISSN Title Notes
[% IF ( subscription.issn ) %][% subscription.issn %] [% END %] @@ -187,6 +213,7 @@ [% END %]
+ [% 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