Koha/koha-tmpl/opac-tmpl/bootstrap/en/modules/sco/sco-main.tt
Owen Leonard 569f3915d7
Bug 21565: (follow-up) Make confirmation buttons more detailed
This patch updates the confirmation buttons to be more specific about
what each one does. My concern was that it wasn't clear that "No" meant
"No receipt" and not "Cancel logging out."

The patch also updates the modal confirmation code so that the modal
body is removed if no message is passed for it.

To test, apply the patch and repeat the previous test plan. When you
click "Finish" you should have the options "Print receipt and end
session" and "End session."

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
2020-05-04 08:47:18 +01:00

501 lines
32 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE Koha %]
[% USE KohaDates %]
[% USE AudioAlerts %]
[% USE To %]
[% USE Price %]
[% INCLUDE 'doc-head-open.inc' %]
<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle | html %][% ELSE %]Koha [% END %] &rsaquo; Self checkout </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Koha [% Version | html %]" /> <!-- leave this for stats -->
[% IF ( Koha.Preference('OpacFavicon') ) %]
<link rel="shortcut icon" href="[% Koha.Preference('OpacFavicon') | url %]" type="image/x-icon" />
[% ELSE %]
<link rel="shortcut icon" href="[% interface | html %]/[% theme | html %]/images/favicon.ico" type="image/x-icon" />
[% END %]
[% Asset.css("lib/bootstrap/css/bootstrap.min.css") | $raw %]
[% Asset.css("lib/jquery/jquery-ui-1.12.1.css") | $raw %]
[% Asset.css("lib/font-awesome/css/font-awesome.min.css") | $raw %]
[% Asset.css("css/sco.css") | $raw %]
[% IF ( Koha.Preference('OPACUserCSS') ) %]<style>[% Koha.Preference('OPACUserCSS') | $raw %]</style>[% END %]
[% IF ( Koha.Preference('SCOUserCSS') ) %]<style>[% Koha.Preference('SCOUserCSS') | $raw %]</style>[% END %]
<!--[if lt IE 9]>
<script src="[% interface | html %]/[% theme | html %]/lib/respond.min.js"></script>
<![endif]-->
<script>
function _(s) { return s } // dummy function for gettext
</script>
[% Asset.js("lib/modernizr.min.js") | $raw %]
</head>
<body id="sco_main" class="sco" onload="dofocus();" onunload="mungeHistory();">
[% INCLUDE 'masthead-sco.inc' %]
<div class="main">
<div class="container-fluid">
<div class="row-fluid">
[% IF ( display_patron_image ) %]
<div class="span10">
[% ELSE %]
<div class="span12">
[% END %]
<div id="masthead"><h1>[% LibraryName | html %] Self checkout system</h1></div>
[% IF ( impossible ) %]<!-- We tried to issue, but failed. -->
<div class="alert">
<span class="sco-alert-warning noissue"></span>
<h3>Item cannot be checked out.</h3>
<p>Sorry, this item cannot be checked out at this station.</p>
[% IF ( title ) %]
<p>Title: <em>[% title | html %]</em> </p>
[% END %]
<p>
[% IF ( circ_error_UNKNOWN_BARCODE ) %]
The system does not recognize this barcode.
[% ELSIF ( circ_error_max_loans_allowed ) %]
You have checked out too many items and can't check out any more.
[% ELSIF ( circ_error_ISSUED_TO_ANOTHER ) %]
This item is checked out to someone else.
[% ELSIF ( circ_error_NO_MORE_RENEWALS ) %]
You cannot renew this item again.
[% ELSIF ( circ_error_NOT_FOR_LOAN ) %]
This item is not for loan.
[% ELSIF ( circ_error_DEBT ) %]
You owe the library [% DEBT | $Price %] and cannot check out.
[% ELSIF ( circ_error_WTHDRAWN ) %]
This item has been withdrawn from the collection.
[% ELSIF ( circ_error_RESTRICTED ) %]
This item is restricted.
[% ELSIF ( circ_error_RESERVED ) %]
This item is on hold for another patron.
[% ELSIF ( circ_error_ITEMNOTSAMEBRANCH ) %]
This item belongs to another branch.
[% ELSIF ( circ_error_EXPIRED ) %]
Your account has expired.
[% ELSIF ( circ_error_DEBARRED ) %]
Your account has been suspended.
[% ELSIF ( circ_error_CARD_LOST ) %]
This card has been declared lost.
[% ELSIF ( circ_error_GNA ) %]
Your contact information seems to be incomplete.
[% ELSIF ( circ_error_INVALID_DATE ) %]
Due date is not valid.
[% END %]
Please see a member of the library staff.
</p>
[% IF ( returnitem && Koha.Preference('SCOAllowCheckin') ) %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="errorForm" class="inline" method="post">
<input type="hidden" name="op" value="returnbook" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% barcode | html %]" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<button type="submit" name="returnbook" class="btn"><i class="fa fa-undo" aria-hidden="true"></i> Return this item</button>
</form>
[% END %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="errorForm" class="inline" method="post">
<input type="hidden" name="op" value="" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% barcode | html %]" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<input type="submit" name= "confirm" value="Return to account summary" class="btn back focus" />
</form>
</div> <!-- / .alert -->
[% END # / IF ( impossible %]
[% IF ( confirm ) %]<!-- We need to confirm the issue.. -->
<div class="alert"><h3>Please confirm the checkout:</h3>
<span class="sco-alert-warning confirm"></span>
[% IF ( confirm_renew_issue ) %]
<p>This item is already checked out to you.</p>
[% END %]
[% IF ( renew && Koha.Preference('SCOAllowCheckin') ) %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="confirmForm" class="inline" method="post">
<input type="hidden" name="op" value="returnbook" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% barcode | html %]" />
<input type="hidden" name="confirmed" value="" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<button type="submit" name="returnbook" class="btn"><i class="fa fa-undo" aria-hidden="true"></i> Return this item</button>
</form>
[% END %]
[% UNLESS ( renew ) %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="confirmForm" class="inline" method="post">
<input type="hidden" name="op" value="renew" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% barcode | html %]" />
<input type="hidden" name="confirmed" value="1" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<button type="submit" name="confirm" class="btn"><i class="fa fa-refresh" aria-hidden="true"></i> Renew item</button>
</form>
[% ELSE %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="confirmForm" class="inline" method="post">
<input type="hidden" name="op" value="renew" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% barcode | html %]" />
<input type="hidden" name="confirmed" value="1" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<button type="submit" class="btn"><i class="fa fa-refresh" aria-hidden="true"></i> Renew item</button>
</form>
[% END %]
<form action="/cgi-bin/koha/sco/sco-main.pl" name="confirmForm" class="inline" method="post">
<input type="hidden" name="op" value="" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
<button type="submit" class="btn"><i class="fa fa-cancel" aria-hidden="true"></i> Cancel</button>
</form>
</div>
[% END # / IF confirm %]
[% IF ( nopermission ) %]
<!-- This is what is displayed if user doesn't have permission -->
<div class="alert">
<span class="sco-alert-warning nopermission"></span>
<h3>Access denied</h3>
<p>Sorry, this self-checkout station has lost authentication. Please contact the administrator to resolve this problem.</p>
</div>
[% END %]
[% IF ( different_ip ) %]
<!-- This is what is displayed if user doesn't have permission -->
<div class="alert">
<span class="sco-alert-warning sessionlost"></span>
<h3>Session lost</h3>
<p>You are accessing self-checkout from a different IP address! please log in again.</p>
</div>
[% END %]
[% IF ( invalid_username_or_password ) %]
<!-- This is what is displayed if user doesn't have permission -->
<div class="alert">
<span class="sco-alert-warning notfound"></span>
<h3>Record not found</h3>
<p>Your userid was not found in the database. Please try again.</p>
</div>
[% END %]
[% IF ( issued ) %]
<span class="sco-alert-success issue"></span>
<div class="alert alert-info">
<p>Item checked out</p>
</div>
[% ELSIF ( renewed ) %]
<span class="sco-alert-success renew"></span>
<div class="alert alert-info">
<p>Item renewed</p>
</div>
[% ELSIF ( returned == 0 ) %]
<span class="sco-alert-warning return"></span>
<div class="alert alert-info">
<p>Item not checked in: please see circulation staff for assistance</p>
</div>
[% ELSIF ( returned == 1 ) %]
<span class="sco-alert-success return"></span>
<div class="alert alert-info">
<p>Item checked in</p>
</div>
[% END %]
[% UNLESS ( hide_main ) %]
[% IF ( patronid ) %]
[% IF ( validuser ) %]
<div class="alert alert-info">You are logged in as [% borrowername | html %].</div>
[% INCLUDE 'opac-note.inc' %]
[% IF patron_has_hold_fee %]
<div class="alert">A hold fee was charged to your account for collecting this item.</div>
[% END %]
[% END %]
[% IF ( nouser ) %]
<div class="alert">
<h4>Sorry</h4>
<p>The userid <strong>[% patronid | html %]</strong> was not found in the database. Please try again.</p>
</div>
[% END %]
[% END # / IF patronid %]
[% IF ( validuser ) %]
<div id="newcheckout" class="sco_entry">
<form id="scan_form" name="scan_form" method="post" action="/cgi-bin/koha/sco/sco-main.pl" onsubmit="return checkout_confirm('[% patronid | html %]');">
<fieldset>
<legend>Check out[% IF ( Koha.Preference('SCOAllowCheckin') ) %], return[% END %] or renew an item: </legend>
<div class="input-append">
<label for="barcode">Scan a new item or enter its barcode:</label>
<input id="barcode" name="barcode" size="20" type="text" class="focus" autocomplete="off" />
<button type="submit" class="btn">Submit</button>
</div>
<input type="hidden" name="op" value="checkout" />
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
</fieldset>
</form>
<div>
<form method="post" action="#" id="logout_form">
<button type="submit" class="btn"><i class="fa fa-check" aria-hidden="true"></i> Finish</button>
</form>
</div>
</div> <!-- / #newcheckout -->
</div> <!-- / .span12/12 -->
[% IF ( display_patron_image ) %]
<div class="span2">
<img src="/cgi-bin/koha/sco/sco-patron-image.pl?borrowernumber=[% borrowernumber | uri %]&csrf_token=[% csrf_token | uri %]" alt="" />
</div>
[% END %]
</div> <!-- / .row-fluid -->
</div> <!-- / .container-fluid -->
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<div class="tabbable">
<ul class="nav nav-tabs">
<li class="active"><a href="#checkouts-tab" data-toggle="tab">Checkouts ([% issues_count | html %])</a></li>
<li>
<a href="#holds-tab" data-toggle="tab">
[% IF waiting_holds_count %]
<i class="fa fa-exclamation" aria-hidden="true"></i>
[% END %]
Holds ([% HOLDS.count | html %])
</a>
</li>
<li><a href="#account-tab" data-toggle="tab">Charges ([% total | $Price %])</a></li>
</ul>
<div class="tab-content">
<div id="checkouts-tab" class="tab-pane active">
<div id="borrowerdetails">
[% IF ( issues_count ) %]
<table id="loanTable" class="table table-bordered table-striped">
<caption>Checkouts for [% borrowername | html %] <span class="count">([% issues_count | html %] total)</span></caption>
<!-- ISSUES TABLE ROWS -->
<thead>
<tr>
<th class="noshow">Checked out on</th>
<th class="anti-the">Title</th>
<th>Call no.</th>
<th class="title-string">Due</th>
<th class="nosort">Renew</th>
[% UNLESS ( nofines ) %]
<th>Fines</th>
[% END %]
</tr>
</thead>
<tbody>
[% FOREACH ISSUE IN ISSUES %]
<tr>
<td>[% ISSUE.issuedate | html %]</td>
<td>
[% UNLESS ( noitemlinks ) %]
<a href="/cgi-bin/koha/opac-detail.pl?bib=[% ISSUE. biblionumber | uri %]">[% ISSUE.title | html %]</a>
[% ELSE %]
<strong>[% ISSUE.title | html %]</strong>
[% END %]
[% IF ( newissues.match(ISSUE.barcode)) %]
<span class="label label-info">NEW</span>
[% END %]
<span class="item-details">[% ISSUE.author | html %]</span>
([% ISSUE.barcode | html %])
</td>
<td>[% ISSUE.itemcallnumber | html %]</td>
[% IF ( ISSUE.overdue ) %]
<td class="overdue"><span title="[% ISSUE.date_due | html %]">[% ISSUE.date_due | $KohaDates as_due_date => 1 %]</span></td>
[% ELSE %]
<td><span title="[% ISSUE.date_due | html %]">[% ISSUE.date_due | $KohaDates as_due_date => 1 %]</span></td>
[% END %]
<td>
<form action="/cgi-bin/koha/sco/sco-main.pl" method="post">
<input type="hidden" name="patronid" value="[% patronid | html %]" />
<input type="hidden" name="barcode" value="[% ISSUE.barcode | html %]" />
<input type="hidden" name="newissues" value="[% newissues | html %]" />
[% IF ISSUE.can_be_renewed %]
<input type="hidden" name="op" value="checkout" />
<input type="hidden" name="confirmed" value="1" />
[% UNLESS ( ISSUE.renew ) %]
<input type="submit" value="Renew item" name="confirm " class="btn renew" />
[% ELSE %]
<input type="submit" value="Renew item" class="btn renew" />
[% END %]
[% ELSE %]
[% IF ISSUE.renew_error == 'auto_renew' OR ISSUE.renew_error == 'auto_too_soon' %]
<span>This item has been scheduled for automatic renewal and cannot be renewed</span>
[% ELSIF ISSUE.renew_error == 'onsite_checkout' %]
<span>This is a on-site checkout, it cannot be renewed.</span>
[% ELSE %]
<span>No renewals allowed</span>
[% END %]
[% IF Koha.Preference('SCOAllowCheckin') %]
<input type="submit" value="Check in item" name="confirm" class="btn return" />
<input type="hidden" name="op" value="returnbook" />
<input type="hidden" name="confirmed" value="" />
[% END %]
[% END %]
</form>
</td>
[% UNLESS ( nofines ) %]
<td>
[% IF ( ISSUE.charges ) %]Yes[% ELSE %]No[% END %]
</td>
[% END %]
</tr>
[% END # / FOREACH ISSUE %]
</tbody>
</table>
[% ELSE %]
<h3>You currently have nothing checked out.</h3>
[% END # / IF issues_count %]
</div> <!-- / #borrowerdetails -->
</div>
<div id="holds-tab" class="tab-pane">
[% IF HOLDS.count > 0 %]
[% PROCESS 'holds-table.inc' HOLDS = HOLDS, SuspendHoldsOpac = SuspendHoldsOpac, showpriority = showpriority, AutoResumeSuspendedHolds = AutoResumeSuspendedHolds, onlyinfo = 'true' %]
[% ELSE %]
<h3>You currently have no pending holds.</h3>
[% END %]
</div>
<div id="account-tab" class="tab-pane">
[% PROCESS 'account-table.inc' %]
</div>
</div>
</div>
[% ELSE # IF validuser %]
<div class="sco_entry" >
<form id="mainform" action="/cgi-bin/koha/sco/sco-main.pl" name="mainform" method="post">
<fieldset class="checkout brief">
[% IF ( Koha.Preference('SelfCheckoutByLogin') ) %]
<legend>Log in to your account</legend>
<label for="patronlogin">Login:</label>
<input type="text" id="patronlogin" class="focus" size="20" name="patronlogin" />
<label for="patronpw">Password:</label>
<input type="password" id="patronpw" size="20" name="patronpw" />
<fieldset class="action">
<button type="submit" class="btn">Log in</button>
</fieldset>
[% ELSE %]
<div class="input-append">
<label for="patronid">Please enter your card number:</label>
<input type="text" id="patronid" class="focus" size="20" name="patronid" autocomplete="off" />
<button type="submit" class="btn">Submit</button>
</div>
[% END %]
[% FOREACH INPUT IN INPUTS %]
<input type="hidden" name="[% INPUT.name | html %]" value="[% INPUT.value | html %]">
[% END %]
<input type="hidden" name="op" value="login" />
</fieldset>
</form>
</div> <!-- / .sco_entry -->
[% END # / IF validuser %]
[% END # / UNLESS ( hide_main %]
[% IF ( Koha.Preference('SCOMainUserBlock' ) ) %]<div id="scomainuserblock">[% Koha.Preference('SCOMainUserBlock' ) | $raw %]</div>[% END %]
</div> <!-- / .span12 -->
</div> <!-- / .row-fluid -->
</div> <!-- / .container-fluid -->
</div> <!-- / .main -->
<span id="audio-alert"></span>
[% INCLUDE 'opac-bottom.inc' %]
[% BLOCK jsinclude %]
[% INCLUDE 'datatables.inc' %]
<script>
//<![CDATA[
function mungeHistory() {
// prevent back button from allowing form resubmission
if (history && history.pushState) {
history.replaceState(null, document.title, window.location.href);
}
}
var mainTimeout;
function sco_init() {
mainTimeout = setTimeout(function() {
location.href = '/cgi-bin/koha/sco/sco-main.pl?op=logout';
}, [% SelfCheckTimeout | html %]);
}
function dofocus() { // named function req'd for body onload event by some FF and IE7 security models
// alert("dofocus called");
$(".focus:last").select();
}
var slip_re = /slip/;
function printx_window(print_type) {
var handler = print_type.match(slip_re) ? "printslip" : "moremember";
return false;
}
function checkout_confirm(patronid) {
var barcode = $("#barcode").val();
// alert("checkout_confirm('" + patronid + "') called for barcode '" + barcode + "'");
if (! barcode) { dofocus(); return false; } // no barcode
if (barcode == "__KOHA_NEW_CIRC__") { // magic barcode
window.location.href='/cgi-bin/koha/sco/sco-main.pl?op=logout';
return false;
}
return true;
}
[% IF Koha.Preference('AudioAlerts') %]
var AUDIO_ALERTS = JSON.parse( "[% To.json(AudioAlerts.AudioAlerts) | $raw %]" );
$( document ).ready(function() {
if ( AUDIO_ALERTS ) {
for ( var k in AUDIO_ALERTS ) {
var alert = AUDIO_ALERTS[k];
if ( $( alert.selector ).length ) {
playSound( alert.sound );
break;
}
}
}
});
function playSound( sound ) {
if ( ( sound.indexOf('http://') == 0 || sound.indexOf('https://') == 0 ) ) {
document.getElementById("audio-alert").innerHTML = '<audio src="' + sound + '" autoplay="autoplay" autobuffer="autobuffer"></audio>';
}
}
[% END %]
$(document).ready(function() {
dofocus();
[% IF ( patronid ) %]sco_init();[% END %]
$("#loanTable").dataTable($.extend(true, {}, dataTablesDefaults, {
"order": [ 0 ],
"columnDefs": [
{ "targets": [ "nosort" ], "sortable": false, "searchable": false },
{ "targets": [ "noshow" ], "visible": false, "searchable": false },
{ "type": "anti-the", "targets" : [ "anti-the" ] },
{ "type": "title-string", "targets" : [ "title-string" ] }
]
}));
$("#logout_form").submit(function(e){
e.preventDefault(e);
clearTimeout(mainTimeout);
[% IF Koha.Preference('SelfCheckReceiptPrompt') %]
var confirmStart = Date.now();
confirmModal("", _("Would you like to print a receipt?"), _("Print receipt and end session"), _("End session"), function(result) {
if ( result && (Date.now() - confirmStart) < [% SelfCheckTimeout | html %] ) {
var win = window.open("/cgi-bin/koha/sco/printslip.pl?borrowernumber=[% borrowernumber | html %]&amp;print=qslip");
win.print();
location.href = '/cgi-bin/koha/sco/sco-main.pl?op=logout';
} else {
location.href = '/cgi-bin/koha/sco/sco-main.pl?op=logout';
}
})
[% ELSE %]
location.href = '/cgi-bin/koha/sco/sco-main.pl?op=logout';
[% END %]
return true;
});
});
//]]>
</script>
[% IF ( Koha.Preference('SCOUserJS') ) %]<script>[% Koha.Preference('SCOUserJS') | $raw %]</script>[% END %]
[% END %]