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. Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
d119336f19
commit
4e698f7b47
|
|
@ -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 %]
|
||||
<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>
|
||||
|
|
@ -38,6 +56,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>
|
||||
|
|
@ -57,6 +76,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 %]
|
||||
|
|
@ -157,6 +177,7 @@
|
|||
[% END %]
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
[% END %]
|
||||
|
||||
<div id="doc3" class="yui-t2">
|
||||
|
|
@ -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'));
|
||||
});
|
||||
});
|
||||
</script>
|
||||
[% END %]
|
||||
|
|
|
|||
|
|
@ -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' %]
|
||||
|
|
@ -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;
|
||||
Loading…
Reference in New Issue