Bugzilla – Attachment 62120 Details for
Bug 18426
Subscriptions batch editing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 18426: Allow to edit subscriptions in batch
Bug-18426-Allow-to-edit-subscriptions-in-batch.patch (text/plain), 17.21 KB, created by
Julian Maurice
on 2017-04-13 07:14:24 UTC
(
hide
)
Description:
Bug 18426: Allow to edit subscriptions in batch
Filename:
MIME Type:
Creator:
Julian Maurice
Created:
2017-04-13 07:14:24 UTC
Size:
17.21 KB
patch
obsolete
>From 78cc2c95cb27da727c54ec24301815a907307a69 Mon Sep 17 00:00:00 2001 >From: Julian Maurice <julian.maurice@biblibre.com> >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')); >+ }); > }); > //]]> > </script> >@@ -48,9 +55,26 @@ > > > [% BLOCK subscriptions_table %] >- <table id="osrlt"> >+ <form method="post"> >+ >+ [% url_params = [] %] >+ [% FOREACH param IN CGI.params.pairs %] >+ [% escaped_value = BLOCK %][% param.value | uri %][% END %] >+ [% url_params.push(param.key _ '=' _ escaped_value) %] >+ [% END %] >+ <input type="hidden" name="referrer" value="/cgi-bin/koha/serials/serials-search.pl?[% url_params.join('&') %]"/> >+ >+ <div class="actions"> >+ <a class="select-all" href="#"><i class="fa fa-check"></i> Select all</a> >+ | >+ <a class="clear-all" href="#"><i class="fa fa-remove"></i> Clear all</a> >+ | >+ <button class="btn btn-default btn-xs" type="submit" formaction="/cgi-bin/koha/serials/subscription-batchedit.pl"><i class="fa fa-pencil"></i> Edit</button> >+ </div> >+ <table> > <thead> > <tr> >+ <th></th> > <th>ISSN</th> > <th class="anti-the">Title</th> > <th>Notes</th> >@@ -68,6 +92,7 @@ > </thead> > <tfoot> > <tr> >+ <td></td> > <td><input type="text" class="dt-filter" data-column_num="0" placeholder="Search ISSN" /></td> > <td><input type="text" class="dt-filter" data-column_num="1" placeholder="Search title" /></td> > <td><input type="text" class="dt-filter" data-column_num="2" placeholder="Search notes" /></td> >@@ -87,6 +112,7 @@ > [% FOREACH subscription IN subscriptions %] > [% UNLESS subscription.cannotdisplay %] > <tr> >+ <td><input type="checkbox" name="subscriptionid" value="[% subscription.subscriptionid %]"/></td> > <td> > [% IF ( subscription.issn ) %][% subscription.issn %] > [% END %] >@@ -187,6 +213,7 @@ > [% END %] > </tbody> > </table> >+ </form> > [% END %] > > <div id="doc3" class="yui-t2"> >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' %] >+ <title>Koha › Serials › Batch edit</title> >+ [% INCLUDE 'doc-head-close.inc' %] >+ [% INCLUDE 'calendar.inc' %] >+</head> >+<body id="ser_subscription-batchedit" class="ser"> >+ [% INCLUDE 'header.inc' %] >+ [% INCLUDE 'serials-search.inc' %] >+ >+ <div id="breadcrumbs"> >+ <a href="/cgi-bin/koha/mainpage.pl">Home</a> >+ › >+ <a href="/cgi-bin/koha/serials/serials-home.pl">Serials</a> >+ › >+ Batch edit >+ </div> >+ >+ <div id="doc3" class="yui-t2"> >+ <div id="bd"> >+ <div id="yui-main"> >+ <div class="yui-b"> >+ <h1>Subscription batch edit</h1> >+ >+ <div> >+ <p>You are about to edit the following subscriptions:</p> >+ <table> >+ <thead> >+ <tr> >+ <th>ISSN</th> >+ <th>Title</th> >+ <th>Notes</th> >+ <th>Library</th> >+ <th>Location</th> >+ <th>Call number</th> >+ <th>Expiration date</th> >+ </tr> >+ </thead> >+ <tbody> >+ [% FOREACH subscription IN subscriptions %] >+ <tr> >+ <td>[% subscription.biblio.biblioitem.issn %]</td> >+ <td><a href="/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=[% subscription.subscriptionid %]">[% subscription.biblio.title %] (#[% subscription.subscriptionid %])</a></td> >+ <td>[% subscription.notes %] [% IF subscription.internalnotes %]([% subscription.internalnotes %])[% END %]</td> >+ <td>[% Branches.GetName(subscription.branchcode) %]</td> >+ <td>[% AuthorisedValues.GetByCode('LOC', subscription.location) %]</td> >+ <td>[% subscription.callnumber %]</td> >+ <td>[% subscription.enddate | $KohaDates %]</td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> >+ </div> >+ >+ <form method="post"> >+ [% FOREACH subscription IN subscriptions %] >+ <input type="hidden" name="subscriptionid" value="[% subscription.subscriptionid %]"/> >+ [% END %] >+ [% IF referrer %] >+ <input type="hidden" name="referrer" value="[% referrer %]"/> >+ [% END %] >+ <fieldset class="rows"> >+ <ol> >+ <li> >+ <label for="booksellerid">Bookseller</label> >+ <select id="booksellerid" name="booksellerid"> >+ <option value="">No change</option> >+ [% FOREACH bookseller IN booksellers %] >+ <option value="[% bookseller.id %]">[% bookseller.name %]</option> >+ [% END %] >+ </select> >+ </li> >+ <li> >+ <label for="location">Location</label> >+ <select id="location" name="location"> >+ <option value="">No change</option> >+ [% FOREACH av IN AuthorisedValues.Get('LOC') %] >+ <option value="[% av.authorised_value | html %]">[% av.lib %]</option> >+ [% END %] >+ </select> >+ </li> >+ <li> >+ <label for="branchcode">Library</label> >+ <select id="branchcode" name="branchcode"> >+ <option value="">No change</option> >+ [% FOREACH branch IN Branches.all %] >+ <option value="[% branch.branchcode | html %]">[% branch.branchname %]</option> >+ [% END %] >+ </select> >+ </li> >+ <li> >+ <label for="itemtype">Item type</label> >+ <select id="itemtype" name="itemtype"> >+ <option value="">No change</option> >+ [% FOREACH itemtype IN ItemTypes.Get() %] >+ <option value="[% itemtype.itemtype %]">[% itemtype.description %]</option> >+ [% END %] >+ </select> >+ </li> >+ <li> >+ <label for="notes">Public note</label> >+ <textarea id="notes" name="notes" placeholder="No change"></textarea> >+ </li> >+ <li> >+ <label for="internalnotes">Nonpublic note</label> >+ <textarea id="internalnotes" name="internalnotes" placeholder="No change"></textarea> >+ </li> >+ <li> >+ <label for="serialsadditems">Create item when receiving</label> >+ <select id="serialsadditems" name="serialsadditems"> >+ <option value="">No change</option> >+ <option value="0">No</option> >+ <option value="1">Yes</option> >+ </select> >+ >+ </li> >+ <li> >+ <label for="enddate">Expiration date</label> >+ <input type="date" class="datepicker" id="enddate" name="enddate" placeholder="No change"/> >+ </li> >+ [% FOREACH field IN additional_fields %] >+ <li> >+ <label for="field_[% field.id %]">[% field.name %]</label> >+ [% IF field.authorised_value_category %] >+ <select id="field_[% field.id %]" name="field_[% field.id %]"> >+ <option value="">No change</option> >+ [% FOREACH av IN AuthorisedValues.Get(field.authorised_value_category) %] >+ <option value="[% av.authorised_value %]">[% av.lib %]</option> >+ [% END %] >+ </select> >+ [% ELSE %] >+ <input id="field_[% field.id %]" name="field_[% field.id %]" placeholder="No change"/> >+ [% END %] >+ </li> >+ [% END %] >+ </ol> >+ </fieldset> >+ >+ <fieldset class="action"> >+ <button type="submit" name="batchedit" value="1">Start batch edit</button> >+ </fieldset> >+ </form> >+ </div> >+ </div> >+ <div class="yui-b"> >+ [% INCLUDE 'serials-menu.inc' %] >+ </div> >+ </div> >+ >+ [% 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 <http://www.gnu.org/licenses>. >+ >+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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 18426
:
62119
|
62120
|
64198
|
74393
|
74394
|
74395
|
74396
|
74458
|
74536
|
74537
|
74676
|
74677
|
74678
|
74679
|
74680
|
74681