Koha/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt
Owen Leonard 5f586e3d96
Bug 16962: Remove the use of "onclick" from serial collection template
This patch removes the use of event attributes like "onclick" from the
serial collection template. Events are now defined in JavaScript.

To test, apply the patch and go to Serials

- Locate or create a subscription for which an item record is NOT
  created when receiving.
  - On the serial collection page for this subscription, test that the
    "Multi receiving" button works correctly.
  - For any subscription, test that the "Generate next" button works
    correctly.
  - In each tab, test that the "select all" and "clear all" links work
    correctly and affect only that tab.
  - On a subscription which has expired, test that the "Renew" button
    works correctly.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
2020-04-22 13:31:21 +01:00

403 lines
17 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE AuthorisedValues %]
[% USE Branches %]
[% USE KohaDates %]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Serials &rsaquo; Serial collection information for [% bibliotitle | html %]</title>
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body id="ser_serials-collection" class="ser">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'serials-search.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/serials/serials-home.pl">Serials</a> &rsaquo; Serial collection information for <i>[% bibliotitle | html %]</i></div>
<div class="main container-fluid">
<div class="row">
<div class="col-sm-10 col-sm-push-2">
<main>
[% INCLUDE 'modals/serials_multi_receiving.inc' %]
[% UNLESS ( popup ) %]
[% INCLUDE 'serials-toolbar.inc' %]
<h1>Serial collection information for <i>[% bibliotitle | html %]</i>
[% IF location %] ([% AuthorisedValues.GetByCode( 'LOC', location ) | html %]) [% END %]
[% IF ( callnumber ) %]callnumber: [% callnumber | html %][% END %]</h1>
[% END %]
[% IF ( delete ) %]
<div class="dialog alert">
<h3>You are about to delete [% serialnumber | html %] serial(s). Do you want to continue?</h3>
<form action="/cgi-bin/koha/serials/serials-collection.pl/#">
[% IF countitems > 0 %]
<h5>Number of items available: [% countitems | html %]</h5>
<p>
<label>Delete associated items? <input type="checkbox" name="delitems" value="Yes" />Yes</label>
</p>
[% END %]
<input type="hidden" name="op" value="delete_confirmed" />
<input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
<input type="hidden" name="subscriptionid" value="[% subscriptionid | html %]" />
[% FOREACH serialid IN serialsid %]
<input type="hidden" name="serialid" value="[% serialid | html %]" />
[% END %]
<button type="submit" class="approve"><i class="fa fa-fw fa-check"></i> Yes, delete</button>
</form>
<form action="/cgi-bin/koha/serials/serials-collection.pl">
<input type="hidden" name="subscriptionid" value="[% subscriptionid | html %]" />
<button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not delete</button>
</form>
</div>
[% END %]
[% IF ( error_delitem ) %]
<div class="dialog alert">
<p><strong>Error</strong>: one or more associated items could not be deleted at this time.</p>
</div>
[% END %]
[% IF ( subscriptions ) %]
<table>
[% IF ( subscriptions.size == 1 ) %]
<caption> Subscription summary</caption>
[% ELSE %]
<caption> Subscription summaries</caption>
[% END %]
<tr>
<th>Subscription num.</th>
<th>Frequency</th>
<th>Numbering pattern</th>
<th>Library</th>
<th>Call number</th>
<th>Notes</th>
<th>&nbsp;</th>
</tr>
[% FOREACH subscription IN subscriptions %]
<tr>
<td><a href="subscription-detail.pl?subscriptionid=[% subscription.subscriptionid | uri %]"># [% subscription.subscriptionid | html %]</a> </td>
<td>[% subscription.frequency.description | html %]</td>
<td>[% subscription.numberpattern.label | html %]</td>
<td>[% IF subscription.branchcode %][% Branches.GetName( subscription.branchcode ) | html %][% END %]</td>
<td> [% subscription.callnumber | html %]</td>
<td> [% subscription.notes | html | html_line_break %]
[% UNLESS subscription.closed %]
[% IF ( subscription.subscriptionexpired ) %]
<br /><span class="problem"> Subscription expired</span>
[% END %]
[% ELSE %]
<br /> Subscription closed
[% END %]
</td>
[% IF ( subscription.abouttoexpire ) || ( subscription.subscriptionexpired ) %]<td class="problem actions">[% ELSE %]<td class="actions">[% END %]
[% UNLESS subscription.closed %]
[% IF ( routing && CAN_user_serials_routing ) %]
[% IF ( subscription.hasRouting ) %]
<a class="btn btn-default btn-xs" href="/cgi-bin/koha/serials/routing.pl?subscriptionid=[% subscription.subscriptionid | html %]"><i class="fa fa-pencil"></i> Edit routing list</a>
[% ELSE %]
<a class="btn btn-default btn-xs" href="/cgi-bin/koha/serials/routing.pl?subscriptionid=[% subscription.subscriptionid | html %]&amp;op=new"><i class="fa fa-plus"></i> Create routing list</a>
[% END %]
[% END %]
[% IF ( subscription.abouttoexpire || subscription.subscriptionexpired) %]
<a class="btn btn-default btn-xs subscription_renew" data-subscriptionid="[% subscription.subscriptionid | html %]" href="/cgi-bin/koha/serials/subscription-renew.pl?subscriptionid=[% subscription.subscriptionid | html %]"><i class="fa fa-refresh"></i> Renew</a>
[% END %]
[% ELSE %]
&nbsp;
[% END %]
</td>
</tr>
[% END %]
[% IF ( subscr ) %]
[% IF ( subscriptioncount > 1 ) %]
<tr ><td colspan="8"> <a href="serials-collection.pl?biblionumber=[% biblionumber | uri %]">See any subscription attached to this biblio</a></td>
</tr>
[% END %]
[% END %]
</table>
[% END %]
[% IF ( years ) %]<form name="edition" action="serials-edit.pl" method="post">
<div id="subscription_years" class="toptabs numbered">
<ul>
[% FOREACH year IN years %]
[% IF ( year.year ) %]
[% IF year.year == 'manage' %]
<li><a href="#subscription-year-manage">Manage</a></li>
[% ELSE %]
<li><a href="#subscription-year-[% year.year | uri %]">[% year.year | html %]</a></li>
[% END %]
[% END %]
[% END %]
</ul>
[% FOREACH year IN years %]
<div id="subscription-year-[% year.year | html %]">
[% IF ( CAN_user_serials_receive_serials ) %]
<p>
<div class="btn-group"><input type="submit" value="Edit serials" class="btn btn-default btn-sm" /></div>
[% UNLESS subscription.closed %]
<div class="btn-group">
<input type="button" value="Generate next" data-subscriptionid="[% subscriptionidlist | html %]" class="btn btn-default btn-sm generatenext" />
</div>
[% IF ( subscriptions.size == 1 and !serialsadditems ) %]&nbsp;
<div class="btn-group"><input type="button" value="Multi receiving" href="#multi_receiving" class="btn btn-default btn-sm" data-toggle="modal"></div>
[% END %]
[% END %]
<input type="button" value="Delete selected issues" class="delete-issues btn btn-default btn-sm" data-subscriptionids="[% subscriptionidlist | html %]" />
</p>
[% END %]
<span class="checkall">
<a class="CheckAll" href="#" data-year="[% year.year | html %]">Select all</a>
</span> |
<span class="clearall">
<a class="CheckNone" href="#" data-year="[% year.year | html %]">Clear all</a>
</span>
<table class="subscription-year-table">
<thead>
<tr>
[% IF ( CAN_user_serials_receive_serials ) %]<th>Edit</th>[% END %]
[% IF ( subscriptions.size > 1 ) %]
<th># Subs</th>
[% END %]
<th class="title-string">Date published
</th>
<th class="title-string">Date published (text)
</th>
<th class="title-string">Date received
</th>
<th>Number
</th>
<th>Status
</th>
<th>Notes
</th>
<th>Library
</th>
[% IF ( routing ) %]<th>Routing</th>[% END %]
</tr>
</thead>
<tbody>
[% FOREACH serial IN year.serials %]
<tr>
[% IF ( CAN_user_serials_receive_serials ) %]
<td>
[% UNLESS CAN_user_serials_receive_serials %]
disabled
[% ELSE %]
[% IF ( serial.subscriptionexpired ) %]
<input type="checkbox" name="serialid" value="[% serial.serialid | html %]" disabled="disabled" />
[% ELSE %]
[% IF ( delete ) %]
[% IF serialsid.grep("${serial.serialid}").size %]
<input type="checkbox" class="checkboxed" name="serialid" value="[% serial.serialid | html %]" disabled checked />
[% ELSE %]
<input type="checkbox" class="checkboxed" name="serialid" value="[% serial.serialid | html %]" disabled />
[% END %]
[% ELSE %]
<input type="checkbox" class="checkboxed" name="serialid" value="[% serial.serialid | html %]" />
[% END %]
[% END %]
[% END %]
</td>
[% END %]
[% IF ( subscriptions.size > 1 ) %]
<td><a href="serials-collection.pl?subscriptionid=[% serial.subscriptionid | uri %]">[% serial.subscriptionid | html %]</a></td>
[% END %]
<td>
<span title="[% serial.publisheddate | html %]">
[% IF serial.publisheddate %]
[% serial.publisheddate | $KohaDates %]
[% ELSE %]
Unknown
[% END %]
</span>
</td>
<td>
[% IF serial.publisheddatetext %]
<span title="[% serial.publisheddatetext | html %]">
[% serial.publisheddatetext | html %]
</span>
[% END %]
</td>
<td>
<span title="[% serial.planneddate | html %]">
[% IF serial.planneddate %]
[% serial.planneddate | $KohaDates %]
[% ELSE %]
Unknown
[% END %]
</span>
</td>
<td>
[% IF ( matches = serial.serialseq.match('(.*)Spring(.*)') ) %]
[% matches.0 | html %]Spring[% matches.1 | html %]
[% ELSIF ( matches = serial.serialseq.match('(.*)Summer(.*)') ) %]
[% matches.0 | html %]Summer[% matches.1 | html %]
[% ELSIF ( matches = serial.serialseq.match('(.*)Fall(.*)') ) %]
[% matches.0 | html %]Fall[% matches.1 | html %]
[% ELSIF ( matches = serial.serialseq.match('(.*)Winter(.*)') ) %]
[% matches.0 | html %]Winter[% matches.1 | html %]
[% ELSIF ( matches = prediction.number.match('(.*)Spr(.*)') ) %]
[% matches.0 | html %]Spr[% matches.1 | html %]
[% ELSIF ( matches = prediction.number.match('(.*)Sum(.*)') ) %]
[% matches.0 | html %]Sum[% matches.1 | html %]
[% ELSIF ( matches = prediction.number.match('(.*)Fal(.*)') ) %]
[% matches.0 | html %]Fal[% matches.1 | html %]
[% ELSIF ( matches = prediction.number.match('(.*)Win(.*)') ) %]
[% matches.0 | html %]Win[% matches.1 | html %]
[% ELSE %]
[% serial.serialseq | html %]
[% END %]
</td>
<td>
[% IF ( serial.status1 ) %]Expected[% END %]
[% IF ( serial.status2 ) %]Arrived[% END %]
[% IF ( serial.status3 ) %]Late[% END %]
[% IF ( serial.status4 ) %]Missing[% END %]
[% IF ( serial.status41 ) %]Missing (never received)[% END %]
[% IF ( serial.status42 ) %]Missing (sold out)[% END %]
[% IF ( serial.status43 ) %]Missing (damaged)[% END %]
[% IF ( serial.status44 ) %]Missing (lost)[% END %]
[% IF ( serial.status5 ) %]Not issued[% END %]
[% IF ( serial.status6 ) %]Delete[% END %]
[% IF ( serial.status7 ) %]Claimed[% END %]
[% IF ( serial.status8 ) %]Stopped[% END %]
</td>
<td>
[% serial.notes | html %]
</td>
<td>
[% Branches.GetName( serial.branchcode ) | html %]
</td>
[% IF ( routing ) %]
<td class="actions">
<a href="/cgi-bin/koha/serials/routing-preview.pl?ok=1&amp;subscriptionid=[% serial.subscriptionid | uri %]&amp;issue=[% serial.serialseq.replace("'", "\\'") | uri %]%20([% serial.publisheddate | $KohaDates %])" class="btn btn-default btn-xs print_list"><i class="fa fa-print"></i> Print list</a>
</td>
[% END %]
</tr>
[% END %]
</tbody>
</table>
</div>
[% END %]
<input type="hidden" name="subscriptionid" value="[% subscriptionidlist | html %]" />
</div>
</form>
[% END %]
</main>
</div> <!-- /.col-sm-10.col-sm-push-2 -->
<div class="col-sm-2 col-sm-pull-10">
<aside>
[% INCLUDE 'serials-menu.inc' %]
</aside>
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
</div> <!-- /.row -->
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'datatables.inc' %]
<script>
var subscriptionid = "[% subscriptionid | html %]";
var MSG_CLOSE_SUBSCRIPTION = _("Are you sure you want to close this subscription?");
var MSG_REOPEN_SUBSCRIPTION = _("Are you sure you want to reopen this subscription?");
var CONFIRM_DELETE_SUBSCRIPTION = _("Are you sure you want to delete this subscription?");
</script>
[% Asset.js("js/serials-toolbar.js") | $raw %]
[% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %]
<script>
function deleteIssues(subscriptionid) {
var serialschecked = $("form[name='edition'] input[name='serialid']:checked");
if (serialschecked.length > 0) {
var location = 'serials-collection.pl?subscriptionid='+subscriptionid+'&op=delete_confirm';
for (i=0; i < serialschecked.length; i++) {
location += '&serialid=' + serialschecked[i].value;
}
document.location = location;
} else {
alert(_("No serials selected"));
}
}
function generateNext(subscriptionid) {
if(confirm(_("Do you really want to generate next serial?"))){
document.location = 'serials-collection.pl?op=gennext&subscriptionid='+subscriptionid;
}
}
$(document).ready(function() {
$('#subscription_years').tabs();
$(".subscription-year-table").dataTable($.extend(true, {}, dataTablesDefaults, {
"aoColumnDefs": [
{ "aTargets": [ 0,-1 ], "bSortable": false, "bSearchable": false },
{ "sType": "title-string", "aTargets" : [ "title-string" ] }
],
"aaSorting": [[0, 'desc']],
"sDom": 't',
"bAutoWidth": false,
"bPaginate": false,
"bInfo": false,
"bFilter": false,
} ));
$(".CheckAll").on("click", function(e){
e.preventDefault();
var years = $(this).data("year");
$("#subscription-year-" + years ).checkCheckboxes();
});
$(".CheckNone").on("click", function(e){
e.preventDefault();
var years = $(this).data("year");
$("#subscription-year-" + years ).unCheckCheckboxes();
});
$(".generatenext").on("click", function(e){
e.preventDefault();
var subscriptionid = $(this).data("subscriptionid");
generateNext( subscriptionid );
});
$(".subscription_renew").on("click", function(e){
e.preventDefault();
var subscriptionid = $(this).data("subscriptionid");
popup( subscriptionid );
});
$(".print_list").on("click", function(e){
e.preventDefault();
var url = $(this).attr("href");
window.open( url,'PrintSlip','width=500,height=500,toolbar=no,scrollbars=yes');
});
$('#multi_receiving').on('show', function () {
$(this).find(".modal-body").html($(".serials_multi_receiving")[0].outerHTML);
});
$("form[name='edition']").on('submit', function(e){
if ( $(this).find("input[name='serialid']:checked").size() == 0 ) {
e.preventDefault();
alert(_("You must select at least one serial to edit"));
return 0;
}
return 1;
});
$(".delete-issues").on("click", function(e){
e.preventDefault();
deleteIssues("[% subscriptionidlist | html %]");
});
});
</script>
[% END %]
[% INCLUDE 'intranet-bottom.inc' %]