Koha/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt
Owen Leonard 281e125377 Bug 13913 - Renewal error message in OPAC is confusing
This patch adds some formatting to the error message a patron receives
when there are renewal failures in the OPAC.

This is pretty much the least which could be done to address this
problem. However, I don't think the issue can be fixed without
re-thinking how renewals are processed. Sending error messages back to
opac-user.pl via URL parameter isn't flexible enough.

To test, apply the patch and attempt to renew multiple items in the OPAC
which cannot be renewed for some reason, for instance because they have
been renewed too many times. The error messages should appear in a list
rather than strung together in one long block of text.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2017-06-05 11:48:34 -03:00

1057 lines
74 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[% USE Koha %]
[% USE KohaDates %]
[% USE Branches %]
[% USE ItemTypes %]
[% USE Price %]
[% SET borrower_club_enrollments = borrower.get_club_enrollments(1) %]
[% SET borrower_enrollable_clubs = borrower.get_enrollable_clubs(1,1) %]
[% INCLUDE 'doc-head-open.inc' %]
<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog &rsaquo; Your library home</title>
[% INCLUDE 'doc-head-close.inc' %]
[% BLOCK cssinclude %][% END %]
</head>
[% INCLUDE 'bodytag.inc' bodyid='opac-user' bodyclass='scrollto' %]
[% INCLUDE 'masthead.inc' %]
[% IF Koha.Preference('AmazonAssocTag') %]
[% AmazonAssocTag = '?tag=' _ Koha.Preference('AmazonAssocTag') %]
[% ELSE %]
[% AmazonAssocTag = '' %]
[% END %]
<div class="main">
<ul class="breadcrumb">
<li><a href="/cgi-bin/koha/opac-main.pl">Home</a> <span class="divider">&rsaquo;</span></li>
<li><a href="/cgi-bin/koha/opac-user.pl">[% INCLUDE 'patron-title.inc' category_type = BORROWER_INFO.category_type firstname = BORROWER_INFO.firstname surname = BORROWER_INFO.surname othernames = BORROWER_INFO.othernames cardnumber = BORROWER_INFO.cardnumber %]</a> <span class="divider">&rsaquo;</span></li>
<li><a href="#">Your summary</a></li>
</ul>
<div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<div id="navigation">
[% INCLUDE 'navigation.inc' IsPatronPage=1 %]
</div>
</div>
<div class="span10">
<div id="userdetails" class="maincontent">
[% IF adminWarning %]
<div id="adminwarning" class="dialog alert">
<p>
<strong><i class="fa fa-exclamation-triangle"> </i> Warning:</strong>
Using this account is not recommended because some parts of Koha will not function as expected. Instead, please log in with a different account.
<a class="btn btn-small" href="/cgi-bin/koha/opac-main.pl?logout.x=1">
<i class="fa fa-sign-out"> </i> Log out</a>
</p>
</div>
[% END %]
[% INCLUDE 'opac-note.inc' %]
<h2>Hello, [% INCLUDE 'patron-title.inc' category_type = BORROWER_INFO.category_type firstname = BORROWER_INFO.firstname surname = BORROWER_INFO.surname othernames = BORROWER_INFO.othernames cardnumber = BORROWER_INFO.cardnumber %]
</h2>
<p><a href="/cgi-bin/koha/opac-main.pl?logout.x=1">Click here if you're not [% BORROWER_INFO.title %] [% INCLUDE 'patron-title.inc' category_type = BORROWER_INFO.category_type firstname = BORROWER_INFO.firstname surname = BORROWER_INFO.surname othernames = BORROWER_INFO.othernames cardnumber = BORROWER_INFO.cardnumber %]</a></p>
[% IF ( patronupdate ) %]<div class="alert alert-info"><h3>Thank you!</h3><p>Your corrections have been submitted to the library, and a staff member will update your record as soon as possible.</p></div>[% END %]
[% IF failed_holds %]
<div class="alert alert-info">
<h3>Notice:</h3>
<p>One or more holds were not placed due to existing holds.</p>
</div>
[% END %]
[% IF ( BORROWER_INFO.warndeparture ) %]
<div class="alert" id="warndeparture">
<strong>Please note:</strong><span> Your card will expire on <span id="warndeparture_date">[% BORROWER_INFO.warndeparture | $KohaDates %]</span>. Please contact the library for more information.</span>
[% IF ( BORROWER_INFO.returnbeforeexpiry ) %]<span id="warndeparture_returnbeforeexpiry"> Also note that you must return all checked out items before your card expires.</span>[% END %]
</div>
[% END %]
[% IF ( BORROWER_INFO.warnexpired ) %]
<div class="alert" id="warnexpired">
<strong>Please note: </strong><span>Your account has expired as of [% BORROWER_INFO.warnexpired | $KohaDates %]. Please contact the library if you wish to renew your account.</span>
</div>
[% END %]
[% IF ( RENEW_ERROR ) %]
<div class="dialog alert">
<strong>Please note:</strong>
Your loan renewal failed because of the following reason(s):
<ul>
[% FOREACH error IN RENEW_ERROR.split('\|') %]
[% IF error == 'card_expired' %]
<li>Your account has expired. Please contact the library for more information.</li>
[% ELSIF error == 'too_many' %]
<li>You have renewed this item the maximum number of times allowed.</li>
[% ELSIF error == 'too_soon' %]
<li>It is too soon after the checkout date for this item to be renewed.</li>
[% ELSIF error == 'on_reserve' %]
<li>This item is on hold for another borrower.</li>
[% END %]
[% END %]
</ul>
</div>
[% END %]
[% IF ( patron_flagged ) %]
<div class="alert">
<ul>
[% IF ( userdebarred ) %]
[% IF ( discharge_available ) %]
<li id="discharged">
<strong>Please note:</strong> Your account is frozen because it has been discharged. <a href="/cgi-bin/koha/opac-discharge.pl?op=get">Get your discharge</a>
</li>
[% ELSE %]
<li id="userdebarred"><strong>Please note:</strong> Your account has been frozen.
[% IF ( BORROWER_INFO.debarredcomment ) %] Comment: <span id="userdebarred_comment">"[% BORROWER_INFO.debarredcomment %]"</span>[% END %]
[% IF ( BORROWER_INFO.userdebarreddate ) %] End date: <span id="userdebarred_date">[% BORROWER_INFO.userdebarreddate | $KohaDates %]</span>[% END %]
<em>Usually the reason for freezing an account is old overdues or damage fees. If your account shows to be clear, please contact the library.</em> <a href="/cgi-bin/koha/opac-account.pl">Go to your account page</a></li>
[% END %]
[% END %]
[% IF ( BORROWER_INFO.gonenoaddress ) %]
<li id="gonenoaddress"><strong>Please note:</strong> According to our records, we don't have up-to-date contact information. Please contact the library.
<a href="/cgi-bin/koha/opac-memberentry.pl">[% IF ( Koha.Preference('OPACPatronDetails') ) %]Update your contact information[% ELSE %]Go to your contact information[% END %]</a>
[% IF ( Koha.Preference('OPACPatronDetails') ) %]<em>(Please note: there may be a delay in restoring your account if you submit online.)</em>[% END %]
</li>
[% END %]
[% IF ( BORROWER_INFO.lost ) %]
<li id="lost"><strong>Please note: </strong> Your library card has been marked as lost or stolen. <em>If this is an error, please contact the library.</em></li>
[% END %]
[% IF ( renewal_blocked_fines.defined ) && ( OpacRenewalAllowed ) %]
<li id="renewal_blocked_fines"><strong>Please note: </strong>You cannot renew your books online. Reason: [% IF ( renewal_blocked_fines ) > 0 %]Your fines exceed <span id="renewal_blocked_fines_amount">[% renewal_blocked_fines | $Price %]</span>.[% ELSE %]You have fines.[% END %]
[% END %]
</ul>
</div>
[% END # / IF patron_flagged %]
<div class="alert alert-info" id="notesaved" style="display:none;"></div>
[% SET OPACMySummaryNote = Koha.Preference('OPACMySummaryNote') %]
[% IF OPACMySummaryNote %][% OPACMySummaryNote %][% END %]
<div id="opac-user-views" class="toptabs">
<ul>
<li><a href="#opac-user-checkouts">Checked out ([% issues_count %])</a></li>
[% IF relatives %]<li><a href="#opac-user-relative-issues">Relatives' checkouts</a></li>[% END %]
[% IF ( overdues_count ) %]<li><a href="#opac-user-overdues">Overdue ([% overdues_count %])</a></li>[% END %]
[% IF ( OPACFinesTab ) %]
[% IF ( BORROWER_INFO.amountoverfive ) %]<li><a href="#opac-user-fines">Fines ([% amountoutstanding | $Price %])</a></li>[% END %]
[% IF ( BORROWER_INFO.amountoverzero ) %]<li><a href="#opac-user-fines">Fines ([% amountoutstanding | $Price %])</a></li>[% END %]
[% IF ( BORROWER_INFO.amountlessthanzero ) %]<li><a href="#opac-user-fines">Credits ([% amountoutstanding | $Price %])</a></li>[% END %]
[% END %]
[% IF borrower_club_enrollments.count || borrower_enrollable_clubs.count %]
<li>
<a id="opac-user-clubs-tab-link" href="#opac-user-clubs">
Clubs ([% borrower_club_enrollments.count || 0 %]/[% borrower_enrollable_clubs.count || 0 %])
</a>
</li>
[% END %]
[% IF ( RESERVES.count ) %]<li><a href="#opac-user-holds">Holds ([% RESERVES.count %])</a></li>[% END %]
[% IF Koha.Preference('ArticleRequests') && borrower.article_requests_current %]<li><a href="#opac-user-article-requests">Article requests ([% borrower.article_requests_current.count %])</a></li>[% END %]
[% IF ( OverDriveCirculation ) %]
<li><a href="#opac-user-overdrive">OverDrive Account</a></li>
[% END %]
</ul>
<div id="opac-user-overdrive">
</div>
<div id="opac-user-checkouts">
[% IF ( issues_count ) %]
<form id="renewselected" action="/cgi-bin/koha/opac-renew.pl" method="post">
<input type="hidden" name="borrowernumber" value="[% borrowernumber %]">
<input type="hidden" name="from" value="opac_user" />
<table id="checkoutst" class="table table-bordered table-striped">
<caption>[% issues_count %] Item(s) checked out</caption>
<thead>
<tr>
[% IF ( JacketImages ) %]<th class="nosort">&nbsp;</th>[% END %]
<th class="anti-the">Title</th>
<th>Author</th>
<th class="title-string psort">Due</th>
[% UNLESS ( item_level_itypes ) %]
<th>Item type</th>
[% END %]
[% IF ( show_barcode ) %]
<th>Barcode</th>
[% END %]
<th>Call no.</th>
[% IF ( OpacRenewalAllowed && !( borrower.is_expired && borrower.category.effective_BlockExpiredPatronOpacActions ) ) %]
<th class="nosort">Renew</th>
[% END %]
[% IF ( OPACFinesTab ) %]
<th>Fines</th>
[% END %]
[% IF ( OPACMySummaryHTML ) %]
<th class="nosort">Links</th>
[% END %]
[% IF ( Koha.Preference('AllowCheckoutNotes') ) %]
<th class="nosort">Note</th>
[% END %]
</tr>
</thead>
<tbody>
[% FOREACH ISSUE IN ISSUES %]
[% IF ( ISSUE.overdue ) %]<tr class="overdue">[% ELSE %]<tr>[% END %]
[% IF ( JacketImages ) %]<td class="jacketcell">
[% IF ( OPACAmazonCoverImages ) %]
[% IF ( ISSUE.normalized_isbn ) %]
<a href="http://www.amazon.com/gp/reader/[% ISSUE.normalized_isbn %][% AmazonAssocTag %]#reader-link" title="View on Amazon.com"><img src="https://images-na.ssl-images-amazon.com/images/P/[% ISSUE.normalized_isbn %].01.THUMBZZZ.jpg" alt="View on Amazon.com" class="item-thumbnail"/></a>
[% ELSE %]
<a href="#"><span class="no-image">No cover image available</span></a>
[% END %]
[% END %]
[% IF ( GoogleJackets ) %]
[% IF ( ISSUE.normalized_isbn ) %]
<div style="display:block;" title="Click to view in Google Books" class="[% ISSUE.normalized_isbn %]" id="gbs-thumbnail[% loop.count %]"></div>
[% ELSE %]
<a href="http://books.google.com/books?q=[% ISSUE.title |url %]"><span class="no-image">No cover image available</span></a>
[% END %]
[% END %]
[% IF ( BakerTaylorEnabled ) %]
[% bt_id = ( ISSUE.normalized_upc || ISSUE.normalized_isbn ) %]
[% IF ( bt_id ) %]
<a href="https://[% BakerTaylorBookstoreURL |html %][% bt_id %]"><img alt="See Baker &amp; Taylor" src="[% BakerTaylorImageURL |html %][% bt_id %]" /></a>
[% ELSE %]
<span class="no-image">No cover image available</span><!-- BakerTaylor needs normalized_upc or normalized_isbn! -->
[% END %]
[% END %]
[% IF ( SyndeticsEnabled && SyndeticsCoverImages ) %]
[% IF ( using_https ) %]
<img src="https://secure.syndetics.com/index.aspx?isbn=[% ISSUE.normalized_isbn %]/SC.GIF&amp;client=[% SyndeticsClientCode %]&amp;type=xw10&amp;upc=[% ISSUE.normalized_upc %]&amp;oclc=[% ISSUE.normalized_oclc %]" alt="" class="item-thumbnail" />
[% ELSE %]
<img src="http://www.syndetics.com/index.aspx?isbn=[% ISSUE.normalized_isbn %]/SC.GIF&amp;client=[% SyndeticsClientCode %]&amp;type=xw10&amp;upc=[% ISSUE.normalized_upc %]&amp;oclc=[% ISSUE.normalized_oclc %]" alt="" class="item-thumbnail" />
[% END %]
[% END %]
</td>[% END # / IF JacketImages %]
<td class="title">
<a class="title" href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% ISSUE.biblionumber %]">[% ISSUE.title |html %] [% FOREACH subtitl IN ISSUE.subtitle %] [% subtitl.subfield %][% END %]</a>
[% IF ( ISSUE.enumchron ) %] [% ISSUE.enumchron %][% END %]
</td>
<td class="author">[% ISSUE.author %]</td>
[% IF ( ISSUE.overdue ) %]
<td class="date_due overdue">
<span title="[% ISSUE.date_due %]">
<span class="tdlabel">Date due:</span>
[% ISSUE.date_due_sql | $KohaDates as_due_date => 1 %]
</span>
</td>
[% ELSE %]
<td class="date_due">
<span title="[% ISSUE.date_due %]">
<span class="tdlabel">Date due:</span>
[% ISSUE.date_due_sql | $KohaDates as_due_date => 1 %]
</span>
</td>
[% END %]
[% UNLESS ( item_level_itypes ) %]
<td class="itype">
<span class="tdlabel">Item type:</span>
[% IF ( ISSUE.imageurl ) %]
<img src="[% ISSUE.imageurl %]" title="[% ISSUE.description %]" alt="[% ISSUE.description %]" />
[% END %] [% ISSUE.description %]
</td>
[% END %]
[% IF ( show_barcode ) %]
<td class="barcode">
<span class="tdlabel">Barcode:</span>
[% ISSUE.barcode %]
</td>
[% END %]
<td class="call_no">
<span class="tdlabel">Call no.:</span>
[% ISSUE.itemcallnumber %]
</td>
[% IF ( OpacRenewalAllowed && !( borrower.is_expired && borrower.category.effective_BlockExpiredPatronOpacActions ) ) %]
<td class="renew">
[% IF ISSUE.renewed %]<span class="blabel label-success">Renewed!</span><br />[% END %]
[% IF ( ISSUE.status ) %]
[% IF ( canrenew ) %]
<input type="checkbox" name="item" value="[% ISSUE.itemnumber %]"/> <a href="/cgi-bin/koha/opac-renew.pl?from=opac_user&amp;item=[% ISSUE.itemnumber %]&amp;borrowernumber=[% ISSUE.borrowernumber %]">Renew</a>
[% END %]
<span class="renewals">([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining)</span>
[% ELSIF ( ISSUE.on_reserve ) %]
Not renewable <span class="renewals">(on hold)</span>
[% ELSIF ( ISSUE.too_many ) %]
Not renewable
[% ELSIF ( ISSUE.norenew_overdue ) %]
Not allowed <span class="renewals">(overdue)</span>
[% ELSIF ( ISSUE.auto_too_late ) %]
No longer renewable
[% ELSIF ISSUE.auto_too_much_oweing %]
Automatic renewal failed, you have unpaid fines.
<span class="renewals">([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining)</span>
[% ELSIF ( ISSUE.auto_renew || ISSUE.auto_too_soon ) %]
Automatic renewal
<span class="renewals">([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining)</span>
[% ELSIF ( ISSUE.too_soon ) %]
No renewal before [% ISSUE.soonestrenewdate %]
<span class="renewals">([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining)</span>
[% END %]
</td>
[% END %]
[% IF ( OPACFinesTab ) %]
<td class="fines">
<span class="tdlabel">Fines:</span>
[% IF ( ISSUE.charges ) %]
Yes (Item overdue or lost)
[% ELSIF ( ISSUE.rentalfines ) %]
Yes (Rental fees)
[% ELSE %]
No
[% END %]
</td>
[% END %]
[% IF ( OPACMySummaryHTML ) %]
<td class="links">[% ISSUE.MySummaryHTML %]</td>
[% END %]
[% IF ( Koha.Preference('AllowCheckoutNotes') ) %]
<td class="note">
<input type="text" name="note" data-issue_id="[% ISSUE.issue_id %]" data-origvalue="[% ISSUE.note %]" value="[% ISSUE.note %]" readonly>
<a class="btn" name="js_submitnote" id="save_[% ISSUE.issue_id %]" style="display:none;">Submit note</a>
<a class="btn" name="nonjs_submitnote" href="/cgi-bin/koha/opac-issue-note.pl?issue_id=[% ISSUE.issue_id | url %]">Edit / Create note</a>
</td>
[% END %]
</tr>
[% END # /FOREACH ISSUES %]
</tbody>
</table>
[% IF ( canrenew && !userdebarred && OpacRenewalAllowed && !( borrower.is_expired && borrower.category.effective_BlockExpiredPatronOpacActions ) ) %]
<input type="submit" class="btn" value="Renew selected" />
[% END %]
</form>
[% IF ( canrenew && !userdebarred && OpacRenewalAllowed && !( borrower.is_expired && borrower.category.effective_BlockExpiredPatronOpacActions ) ) %]
<form id="renewall" action="/cgi-bin/koha/opac-renew.pl" method="post">
<input type="hidden" name="from" value="opac_user" />
<input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
[% FOREACH ISSUE IN ISSUES %]
<input type="hidden" name="item" value="[% ISSUE.itemnumber %]" />
[% END %]
<input type="submit" class="btn" value="Renew all" />
</form>
[% END %]
<p><a href="opac-ics.pl">Download as iCal/.ics file</a></p>
[% ELSE %]
<table class="table table-bordered table-striped">
<tr><td>You have nothing checked out</td></tr>
</table>
[% END # IF issues_count %]
</div> <!-- / .opac-user-checkouts -->
[% IF borrower_club_enrollments.count || borrower_enrollable_clubs.count %]
<div id="opac-user-clubs">
Loading...
</div>
[% END %]
[% IF ( OPACFinesTab ) %]
<!-- FINES BOX -->
[% IF BORROWER_INFO.amountoverfive %]
<div id="opac-user-fines"> <h3>Fines and charges</h3>
<table class="table table-bordered table-striped">
<thead><tr><th colspan="2">Amount</th></tr></thead>
<tbody>
<tr>
<td>You currently owe fines and charges amounting to:</td>
<td><a href="/cgi-bin/koha/opac-account.pl">[% amountoutstanding | $Price %]</a></td>
</tr>
</tbody>
</table>
</div>
[% END %]
[% IF BORROWER_INFO.amountoverzero %]
<div id="opac-user-fines"> <h3>Fines and charges</h3>
<table class="table table-bordered table-striped">
<thead><tr><th colspan="2">Amount</th></tr></thead>
<tbody>
<tr>
<td>You currently owe fines and charges amounting to:</td>
<td><a href="/cgi-bin/koha/opac-account.pl">[% amountoutstanding | $Price %]</a></td>
</tr>
</tbody>
</table>
</div>
[% END %]
[% IF BORROWER_INFO.amountlessthanzero %]
<div id="opac-user-fines"> <h3>Credits</h3>
<table class="table table-bordered table-striped">
<thead><tr><th colspan="2">Amount</th></tr></thead>
<tbody>
<tr>
<td>You have a credit of:</td><td><a href="/cgi-bin/koha/opac-account.pl">[% amountoutstanding | $Price %]</a></td>
</tr>
</tbody>
</table>
</div>
[% END %]
[% END # / OPACFinesTab %]
[% IF relatives %]
<div id="opac-user-relative-issues">
<table id="opac-user-relative-issues-table" class="table table-bordered table-striped">
<thead>
<tr>
<th class="anti-the">Title</th>
<th>Due</th>
<th>Barcode</th>
<th>Call no.</th>
<th class="psort">Relative</th>
</tr>
</thead>
<tbody>
[% FOREACH r IN relatives %]
[% FOREACH i IN r.issues %]
<tr>
<td>
<a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% i.item.biblio.biblionumber %]">
[% i.item.biblio.title %][% IF ( i.item.enumchron ) %] [% i.item.enumchron %][% END %]
</a>
</td>
<td>
[% i.date_due | $KohaDates %]
</td>
<td>
[% i.item.barcode %]
</td>
<td>
[% i.item.itemcallnumber %]
</td>
<td>
[% r.firstname %] [% r.surname %]
</td>
</tr>
[% END %]
[% END %]
</tbody>
</table>
</div>
[% END %]
[% IF ( overdues_count ) %]
<div id="opac-user-overdues">
<table id="overduest" class="table table-bordered table-striped">
<caption>Overdues <span class="count">([% overdues_count %] total)</span></caption>
<!-- OVERDUES TABLE ROWS -->
<thead>
<tr>
[% IF ( JacketImages ) %]<th class="nosort">&nbsp;</th>[% END %]
<th class="anti-the">Title</th>
[% UNLESS ( item_level_itypes ) %]<th>Item type</th> [% END %]
[% IF ( show_barcode ) %]<th>Barcode</th>[% END %]
<th>Call no.</th>
<th class="title-string psort">Due</th>
[% IF ( OpacRenewalAllowed ) %]
<th class="nosort">Renew</th>
[% END %]
[% IF ( OPACFinesTab ) %]
<th>Fines</th>
[% END %]
</tr>
</thead>
<tbody>
[% FOREACH OVERDUE IN OVERDUES %]
<tr>
[% IF ( JacketImages ) %]
<td class="jacketcell">
[% IF ( OPACAmazonCoverImages ) %]
[% IF ( OVERDUE.normalized_isbn ) %]
<a href="http://www.amazon.com/gp/reader/[% OVERDUE.normalized_isbn %][% AmazonAssocTag %]#reader-link" title="View on Amazon.com"><img src="https://images-na.ssl-images-amazon.com/images/P/[% OVERDUE.normalized_isbn %].01.THUMBZZZ.jpg" alt="View on Amazon.com" class="item-thumbnail" /></a>
[% ELSE %]
<a href="#"><span class="no-image">No cover image available</span></a>
[% END %]
[% END %]
[% IF ( GoogleJackets ) %]
[% IF ( OVERDUE.normalized_isbn ) %]
<div style="display:block;" title="Click to view in Google Books" class="[% OVERDUE.normalized_isbn %]" id="gbs-thumbnail[% loop.count %]"></div>
[% ELSE %]
<a href="http://books.google.com/books?q=[% OVERDUE.title |url %]"><span class="no-image">No cover image available</span></a>
[% END %]
[% END %]
[% IF ( BakerTaylorEnabled ) %]
[% bt_id = ( OVERDUE.normalized_upc || OVERDUE.normalized_isbn ) %]
[% IF ( bt_id ) %]
<a href="https://[% BakerTaylorBookstoreURL |html %][% bt_id %]"><img alt="See Baker &amp; Taylor" src="[% BakerTaylorImageURL |html %][% bt_id %]" /></a>
[% ELSE %]
<span class="no-image">No cover image available</span><!-- BakerTaylor needs normalized_upc or normalized_isbn! -->
[% END %]
[% END %]
[% IF ( SyndeticsCoverImages ) %]
[% IF ( using_https ) %]
<img src="https://secure.syndetics.com/index.aspx?isbn=[% OVERDUE.normalized_isbn %]/SC.GIF&amp;client=[% SyndeticsClientCode %]&amp;upc=[% OVERDUE.normalized_upc %]&amp;oclc=[% OVERDUE.normalized_oclc %]&amp;type=xw10" alt="" class="item-thumbnail" />
[% ELSE %]
<img src="http://www.syndetics.com/index.aspx?isbn=[% OVERDUE.normalized_isbn %]/SC.GIF&amp;client=[% SyndeticsClientCode %]&amp;upc=[% OVERDUE.normalized_upc %]&amp;oclc=[% OVERDUE.normalized_oclc %]&amp;type=xw10" alt="" class="item-thumbnail" />
[% END %]
[% END %]
</td>
[% END # /IF jacketcell %]
<td>
<a class="title" href="/cgi-bin/koha/opac-detail.pl?bib=[% OVERDUE.biblionumber %]">[% OVERDUE.title |html %] [% FOREACH subtitl IN OVERDUE.subtitle %] [% subtitl.subfield %][% END %]
</a>
<span class="item-details">[% OVERDUE.author %]</span></td>
[% UNLESS ( item_level_itypes ) %]
<td>
[% IF ( OVERDUE.imageurl ) %]
<img src="[% OVERDUE.imageurl %]" title="[% OVERDUE.description %]" alt="[% OVERDUE.description %]" />
[% END %] [% OVERDUE.description %]
</td>
[% END %]
[% IF ( show_barcode ) %]
<td>
<span class="tdlabel">Barcode:</span>
[% OVERDUE.barcode %]
</td>
[% END %]
<td>
<span class="tdlabel">Call no.:</span>
[% OVERDUE.itemcallnumber %]
</td>
<td>
<span title="[% OVERDUE.date_due %]">
<span class="tdlabel">Date due:</span>
[% OVERDUE.date_due_sql | $KohaDates as_due_date => 1 %]
</span>
</td>
[% IF ( OpacRenewalAllowed ) %]
<td>
[% IF ( OVERDUE.debarred ) %]
Account frozen
[% ELSIF ( OVERDUE.status ) %]
[% IF ( canrenew ) %]
<a href="/cgi-bin/koha/opac-renew.pl?from=opac_user&amp;item=[% OVERDUE.itemnumber %]&amp;bornum=[% OVERDUE.borrowernumber %]">Renew</a>
[% END %]
<span class="renewals">([% OVERDUE.renewsleft %] of [% OVERDUE.renewsallowed %] renewals remaining)</span>
[% ELSIF ( OVERDUE.norenew_overdue ) %]
Not allowed<span class="renewals">(overdue)</span>
[% ELSIF ( OVERDUE.onreserve ) %]
On hold
[% ELSE %]
No renewals left
[% END %]
</td>
[% END %]
[% IF ( OPACFinesTab ) %]
<td>
<span class="tdlabel">Fines:</span>
[% IF ( OVERDUE.charges ) %]
Yes
[% ELSE %]
No
[% END %]
</td>
[% END %]
</tr>
[% END %]
</tbody>
</table>
</div> <!-- / #opac-user-overdues -->
[% END # /overdues_count %]
[% IF ( RESERVES.count ) %]
<div id="opac-user-holds">
<table id="holdst" class="table table-bordered table-striped">
<caption>Holds <span class="count">([% RESERVES.count %] total)</span></caption>
<!-- RESERVES TABLE ROWS -->
<thead>
<tr>
<th class="anti-the">Title</th>
<th class="psort title-string">Placed on</th>
<th class="title-string">Expires on</th>
<th>Pick up location</th>
[% IF ( showpriority ) %]
<th>Priority</th>
[% END %]
<th>Status</th>
[% IF SuspendHoldsOpac %]
<th class="nosort" >Suspend</th>
[% END %]
<th class="nosort">Modify</th>
</tr>
</thead>
<tbody>
[% FOREACH RESERVE IN RESERVES %]
[% IF ( RESERVE.is_waiting ) %]
[% IF ( RESERVE.is_at_destination ) %]
[% IF ( RESERVE.is_found ) %]
<tr class="reserved">
[% ELSE %]
<tr>
[% END %]
[% ELSE %]
<tr class="transfered">
[% END %]
[% ELSE %]
<tr>
[% END %]
<td class="title">
<a class="title" href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% RESERVE.biblionumber %]">
[% RESERVE.biblio.title %]
[% FOREACH s IN RESERVE.biblio.subtitles %]
[% s %]
[% END %]
[% RESERVE.item.enumchron %]
</a>
[% RESERVE.biblio.author %]
</td>
<td class="reservedate">
<span title="[% RESERVE.reservedate %]">
<span class="tdlabel">Hold date:</span>
[% RESERVE.reservedate | $KohaDates %]
</span>
</td>
<td class="expirationdate">
[% IF ! RESERVE.found %]
[% IF ( RESERVE.expirationdate ) %]
<span title="[% RESERVE.expirationdate %]">
<span class="tdlabel">Expiration:</span>
[% RESERVE.expirationdate | $KohaDates %]
</span>
[% ELSE %]
<span title="0000-00-00">
<span class="tdlabel">Expiration:</span>
Never expires
</span>
[% END %]
[% ELSE %]
<span title="0000-00-00">-</span>
[% END %]
</td>
<td class="branch">
<span class="tdlabel">Pick up location:</span>
[% RESERVE.branch.branchname %]
</td>
[% IF ( showpriority ) %]
<td class="priority">
<span class="tdlabel">Priority:</span>
[% RESERVE.priority %]
</td>
[% END %]
<td class="status">
<span class="tdlabel">Status:</span>
[% IF ( RESERVE.is_waiting ) %]
[% IF ( RESERVE.is_at_destination ) %]
[% IF ( RESERVE.found ) %]
Item waiting at <b> [% RESERVE.branch.branchname %]</b>
[% IF ( RESERVE.waitingdate ) %]
since [% RESERVE.waitingdate | $KohaDates %]
[% IF RESERVE.expirationdate %]
until [% RESERVE.expirationdate | $KohaDates %]
[% END %]
[% END %]
<input type="hidden" name="pickup" value="[% RESERVE.branchcode %]" />
[% ELSE %]
Item waiting to be pulled from <b> [% Branches.GetName( RESERVE.branchcode ) %]</b>
[% END %]
[% ELSE %]
Item in transit to <b> [% Branches.GetName( RESERVE.branchcode ) %]</b> <input type="hidden" name="pickup" value="[% RESERVE.branchcode %]" />
[% END %]
[% ELSE %]
[% IF ( RESERVE.is_in_transit ) %]
[% SET transfer = RESERVE.item.get_transfer %]
Item in transit from <b> [% Branches.GetName( transfer.frombranch ) %]</b> since
[% transfer.datesent | $KohaDates %]
[% ELSIF ( RESERVE.suspend ) %]
Suspended [% IF ( RESERVE.suspend_until ) %] until [% RESERVE.suspend_until %] [% END %]
[% ELSE %]
[% IF RESERVE.itemtype %]
Pending for next available item of item type '[% ItemTypes.GetDescription( RESERVE.itemtype ) %]'
[% ELSE %]
Pending
[% END %]
[% END %]
[% END %]
</td>
[% IF SuspendHoldsOpac %]
<td>
[% IF ( RESERVE.is_cancelable ) %]
[% IF RESERVE.suspend %]
<form class="form-inline" action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
<input type="hidden" name="reserve_id" value="[% RESERVE.reserve_id %]" />
<button class="btn btn-link" type="submit" name="submit"><i class="icon-play"></i> Resume</button>
</form>
[% ELSE %]
[% IF AutoResumeSuspendedHolds %]
<a class="btn btn-link js-show" href="#suspendModal[% RESERVE.reserve_id %]" role="button" data-toggle="modal"><i class="icon-pause"></i> Suspend</a>
[% # hold suspend modal form %]
<div id="suspendModal[% RESERVE.reserve_id %]" class="modal-nojs" tabindex="-1" role="dialog" aria-labelledby="suspendModal[% RESERVE.reserve_id %]Label" aria-hidden="true">
<form class="form-inline" action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
<div class="modal-header">
<button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
[% IF RESERVE.suspend %]
<h3 id="suspendModal[% RESERVE.reserve_id %]Label">Resume your hold on <i>[% RESERVE.biblio.title %]</i></h3>
[% ELSE %]
<h3 id="suspendModal[% RESERVE.reserve_id %]Label">Suspend your hold on <i>[% RESERVE.biblio.title %]</i></h3>
[% END %]
</div>
<div class="modal-body">
<input type="hidden" name="reserve_id" value="[% RESERVE.reserve_id %]" />
<label for="suspend_until_[% RESERVE.reserve_id %]">Suspend until:</label>
<input name="suspend_until" id="suspend_until_[% RESERVE.reserve_id %]" class="suspend-until" size="10" />
[% INCLUDE 'date-format.inc' %]
<p class="js-show"><a href="#" onclick="document.getElementById('suspend_until_[% RESERVE.reserve_id %]').value='';return false;">Clear date to suspend indefinitely</a></p>
<button class="btn btn-mini js-hide" type="submit" name="submit">Suspend</button>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="submit" name="submit">Suspend</button>
<a href="#" data-dismiss="modal" aria-hidden="true" class="cancel">Cancel</a>
</div>
</form>
</div> <!-- /#suspendModal[% RESERVE.reserve_id %] -->
[% ELSE %]
<form class="form-inline" action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
<input type="hidden" name="reserve_id" value="[% RESERVE.reserve_id %]" />
<button class="btn btn-link" type="submit" name="submit"><i class="icon-pause"></i> Suspend</button>
</form>
[% END # / IF AutoResumeSuspendedHolds %]
[% END # / IF RESERVE.suspend %]
[% END # / IF ( RESERVE.is_cancelable )%]
</td>
[% END # / IF SuspendHoldsOpac %]
<td class="modify">
[% IF ( RESERVE.is_cancelable ) %]
<form action="/cgi-bin/koha/opac-modrequest.pl" method="post">
<input type="hidden" name="biblionumber" value="[% RESERVE.biblionumber %]" />
<input type="hidden" name="reserve_id" value="[% RESERVE.reserve_id %]" />
<button type="submit" name="submit" class="btn btn-mini btn-danger" onclick="return confirmDelete(MSG_CONFIRM_DELETE_HOLD);"><i class="icon-remove icon-white"></i> Cancel</button></form>
[% END %]
</td>
</tr>
[% END # /FOREACH RESERVES %]
</tbody>
</table>
[% IF SuspendHoldsOpac %]
<div>
<form class="form-inline" action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
<button type="submit" name="submit" class="btn" onclick="return confirmDelete(MSG_CONFIRM_SUSPEND_HOLDS);"><i class="icon-pause"></i> Suspend all holds</button>
<input type="hidden" name="suspend" value="1" />
[% IF AutoResumeSuspendedHolds %]
<label for="suspend_until"> until </label>
<input name="suspend_until" id="suspend_until" class="suspend-until" readonly="readonly" size="10" />
<a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('suspend_until').value='';return false;">Clear date to suspend indefinitely</a>
[% END %]
</form>
</div>
<br/>
<div>
<form action="/cgi-bin/koha/opac-modrequest-suspend.pl" method="post">
<button type="submit" name="submit" class="btn" onclick="return confirmDelete(MSG_CONFIRM_RESUME_HOLDS);"><i class="icon-play"></i> Resume all suspended holds</button>
<input type="hidden" name="suspend" value="0" />
</form>
</div>
[% END %]
</div> <!-- / #opac-user-holds -->
[% END # / #RESERVES.count %]
[% IF Koha.Preference('ArticleRequests') %]
<div id="opac-user-article-requests">
[% IF borrower.article_requests_current.count %]
<table id="article-requests-table" class="table table-bordered table-striped">
<caption>Article requests <span class="count">([% borrower.article_requests_current.count %] total)</span></caption>
<thead>
<tr>
<th class="anti-the article-request-record-title">Record title</th>
<th class="psort article-request-created-on">Placed on</th>
<th class="anti-the article-request-title">Title</th>
<th class="article-request-author">Author</th>
<th class="article-request-volume">Volume</th>
<th class="article-request-issue">Issue</th>
<th class="article-request-date">Date</th>
<th class="article-request-pages">Pages</th>
<th class="article-request-chapters">Chapters</th>
<th class="article-request-patron-notes">Notes</th>
<th class="article-request-status">Status</th>
<th class="article-request-branchcode">Pickup library</th>
<th class="nosort article-request-cancel">&nbsp;</th>
</tr>
</thead>
<tbody>
[% FOREACH ar IN borrower.article_requests_current %]
<td class="article-request-record-title">
<a class="article-request-title" href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% ar.biblionumber %]">
[% ar.biblio.title %]
[% ar.item.enumchron %]
</a>
[% ar.biblio.author %]
[% IF ar.itemnumber %] <i>(only [% ar.item.barcode %])</i>[% END %]
</td>
<td class="article-request-created_on">
[% ar.created_on | $KohaDates %]
</td>
<td class="article-request-title">
[% ar.title %]
</td>
<td class="article-request-author">
[% ar.author %]
</td>
<td class="article-request-volume">
[% ar.volume %]
</td>
<td class="article-request-issue">
[% ar.issue %]
</td>
<td class="article-request-date">
[% ar.date %]
</td>
<td class="article-request-pages">
[% ar.pages %]
</td>
<td class="article-request-chapters">
[% ar.chapters %]
</td>
<td class="article-request-patron-notes">
[% ar.patron_notes %]
</td>
<td class="article-request-status">
[% IF ar.status == 'PENDING' %]
Pending
[% ELSIF ar.status == 'PROCESSING' %]
Processing
[% ELSIF ar.status == 'COMPLETED' %]
Completed
[% ELSIF ar.status == 'CANCELED' %]
Canceled
[% END %]
</td>
<td class="article-request-branchcode">
[% ar.branch.branchname %]
</td>
<td class="article-request-cancel">
<span class="tdlabel">Cancel:</span>
<a class="btn btn-mini btn-danger" href="opac-article-request-cancel.pl?id=[% ar.id %]" onclick="return confirmDelete(MSG_CONFIRM_DELETE_HOLD);"><i class="icon-remove icon-white"></i> Cancel</a>
<!-- TODO: replace MSG_CONFIRM_DELETE_HOLD with correct message -->
</td>
</tr>
[% END %]
</tbody>
</table>
[% ELSE %]
<table class="table table-bordered table-striped">
<tr><td>You have no article requests currently.</td></tr>
</table>
[% END # IF article_requests_current.count %]
</div> <!-- / #opac-user-article-requests -->
[% END %]
</div> <!-- /#opac-user-views -->
</div> <!-- /#userdetails -->
</div> <!-- /.span10 -->
</div> <!-- /.row-fluid -->
</div> <!-- /.container-fluid -->
</div> <!-- /#main -->
[% IF ( OverDriveCirculation ) %]
[% INCLUDE 'overdrive-checkout.inc' %]
[% END %]
[% INCLUDE 'opac-bottom.inc' %]
[% BLOCK jsinclude %]
[% INCLUDE 'calendar.inc' %]
[% INCLUDE 'datatables.inc' %]
<script type="text/JavaScript">
//<![CDATA[
var MSG_CONFIRM_DELETE_HOLD = _("Are you sure you want to cancel this hold?");
var MSG_CONFIRM_SUSPEND_HOLDS = _("Are you sure you want to suspend all holds?");
var MSG_CONFIRM_RESUME_HOLDS = _("Are you sure you want to resume all suspended holds?");
$(document).ready(function(){
$('#opac-user-views').tabs();
$(".js-show").show();
$(".js-hide").hide();
$(".modal-nojs").addClass("modal").addClass("hide").removeClass("modal-nojs");
$(".suspend-until").prop("readonly",1);
var dTables = $("#checkoutst,#holdst,#overduest,#opac-user-relative-issues-table");
dTables.each(function(){
var thIndex = $(this).find("th.psort").index();
$(this).dataTable($.extend(true, {}, dataTablesDefaults, {
"aaSorting" : [[ thIndex, 'asc' ]],
"aoColumnDefs": [
{ "aTargets": [ "nosort" ],"bSortable": false,"bSearchable": false },
{ "sType": "anti-the", "aTargets" : [ "anti-the" ] },
{ "sType": "title-string", "aTargets" : [ "title-string" ] }
]
}));
});
[% IF ( GoogleJackets ) %]KOHA.Google.GetCoverFromIsbn();[% END %]
[% IF ( OpacRenewalAllowed && canrenew && !userdebarred ) %]
$("#renewselected").submit(function(){
valid = false;
$("input[type=checkbox]").each(function(){
if($(this).is(':checked')){
valid = true;
}
});
if(!valid){
alert(_("Nothing has been selected. Check the box for each item you want to renew"));
}
return valid;
});
$("body").on("click","#renewselected_link",function(e){
e.preventDefault();
$("#renewselected").submit();
});
$("body").on("click","#renewall_link",function(e){
e.preventDefault();
$("#renewall").submit();
});
[% IF ( canrenew && !userdebarred && OpacRenewalAllowed && !( borrower.is_expired && borrower.category.effective_BlockExpiredPatronOpacActions ) ) %]
$("#checkoutst caption").append("<div id=\"renewcontrols\"><a id=\"renewselected_link\" href=\"#\">"+_("Renew selected")+"</a> <a id=\"renewall_link\" href=\"#\">"+_("Renew all")+"</a></div>");
[% END %]
[% END %]
[% IF ( Koha.Preference('AllowCheckoutNotes') ) %]
/* If JS enabled, show button, otherwise show link to redirect to a page where note can be submitted */
$("a[name='nonjs_submitnote']").hide();
$("input[name='note']").prop('readonly', false);
$("input[name='note']").keypress(function(e){
/* prevent submitting of renewselected form */
if(e.which == 13)
e.preventDefault();
});
$("input[name='note']").keyup(function(e){
var $btn_save = $('#save_'+$(this).data('issue_id'));
var origvalue = $(this).data('origvalue');
var value = $(this).val();
if(origvalue != value) {
if(origvalue != "")
$btn_save.text(_("Submit changes"));
else
$btn_save.text(_("Submit note"));
$btn_save.show();
} else {
$btn_save.hide();
}
});
$("a[name='js_submitnote']").click(function(e){
var $self = $(this);
var title = $(this).parent().siblings('.title').html();
var $noteinput = $(this).siblings('input[name="note"]').first();
var ajaxData = {
'action': 'issuenote',
'issue_id': $noteinput.data('issue_id'),
'note': $noteinput.val(),
};
$.ajax({
url: '/cgi-bin/koha/svc/patron_notes/',
type: 'POST',
dataType: 'json',
data: ajaxData,
})
.done(function(data) {
var message = "";
if(data.status == 'saved') {
$("#notesaved").removeClass("alert-error");
$("#notesaved").addClass("alert-info");
$noteinput.data('origvalue', data.note);
$noteinput.val(data.note);
message = "<p>" + _("Your note about %s has been saved and sent to the library.").format(title) + "</p>";
message += "<p style=\"font-style:italic;\">" + data.note + "</p>";
$self.hide();
} else if(data.status == 'removed') {
$("#notesaved").removeClass("alert-error");
$("#notesaved").addClass("alert-info");
$noteinput.data('origvalue', "");
$noteinput.val("");
message = "<p>" + _("Your note about %s was removed.").format(title) + "</p>";
$self.hide();
} else {
$("#notesaved").removeClass("alert-info");
$("#notesaved").addClass("alert-error");
message = "<p>" + _("Your note about %s could not be saved.").format(title) + "</p>";
message += "<p style=\"font-weight:bold;\">" + _("Something went wrong. The note has not been saved") + "</p>";
}
$("#notesaved").html(message);
})
.fail(function(data) {
$("#notesaved").removeClass("alert-info");
$("#notesaved").addClass("alert-error");
var message = "<p style=\"font-weight:bold;\">" + _("Something went wrong. The note has not been saved") + "</p>";
$("#notesaved").html(message);
})
.always(function() {
$("#notesaved").show();
});
});
[% END %]
$( ".suspend-until" ).datepicker({ minDate: 1 }); // Require that "until date" be in the future
if ( $('#opac-user-clubs').length ) {
$('#opac-user-clubs-tab-link').on('click', function() {
$('#opac-user-clubs').text(_("Loading..."));
$('#opac-user-clubs').load('/cgi-bin/koha/clubs/clubs-tab.pl?borrowernumber=[% borrowernumber %]');
});
}
});
//]]>
</script>
[% IF Koha.Preference('OverDriveCirculation') %]
<script type="text/javascript" src="[% interface %]//[% theme %]/js/overdrive.js"></script>
<script type="text/JavaScript">
$(document).ready(function() {
[% IF ( overdrive_error ) %]
KOHA.OverDriveCirculation.display_error("#opac-user-overdrive", "[% overdrive_error.dquote %]");
[% END %]
[% IF ( overdrive_tab ) %]
$("#opac-user-views").tabs("select", "#opac-user-overdrive");
[% END %]
$("#opac-user-overdrive").each( function() {
KOHA.OverDriveCirculation.display_account_details(this);
} );
});
</script>
[% END %]
[% END %]