[% USE Branches %]
[% USE Categories %]
[% USE ItemTypes %]
+[% USE AuthorisedValues %]
+[% USE Price %]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
[% UNLESS ( multi_hold ) %]
<title>Koha › Circulation › Holds › Confirm holds</title>
[% END %]
[% INCLUDE 'doc-head-close.inc' %]
-[% Asset.css("css/datatables.css") | $raw %]
</head>
<body id="circ_request" class="catalog">
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/catalogue/search.pl">Catalog</a> › Confirm holds</div>
[% END %]
- <div id="doc3" class="yui-t2">
+<div class="main container-fluid">
+ <div class="row">
+ [% IF ( multi_hold ) # No sidebar menu when placing multiple holds %]
+ <div class="col-md-10 col-md-offset-1">
+ [% ELSE %]
+ <div class="col-sm-10 col-sm-push-2">
+ [% END %]
+ <main>
- <div id="bd">
- <div id="yui-main">
- <div class="yui-b">
[% IF ( noitems ) %]
<div class="dialog alert">
[%IF (multi_hold) %]
[% UNLESS borrowers %]
<label for="patron">Patron: </label>
<div class="hint">Enter patron card number or partial name:</div>
- <input type="text" size="40" id="patron" class="focus" name="findborrower" />
+ <input type="text" size="40" id="patron" class="focus" name="findborrower" autocomplete="off" />
<input type="submit" value="Search" />
[% IF multi_hold %]
<input type="hidden" name="multi_hold" value="[% multi_hold | html %]"/>
<h3>Cannot place hold</h3>
<ul>
[% IF ( exceeded_maxreserves ) %]
- <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% maxreserves | html %] total holds.</li>
+ <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% maxreserves | html %] total holds.</li>
[% ELSIF ( exceeded_holds_per_record ) %]
- <li><strong>Too many holds for this record: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% max_holds_for_record | html %] hold(s) on this record.</li>
+ <li><strong>Too many holds for this record: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% max_holds_for_record | html %] hold(s) on this record.</li>
[% ELSIF ( alreadypossession ) %]
- <li> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>is already in possession</strong> of one item.</li>
+ <li> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>is already in possession</strong> of one item.</li>
[% ELSIF ( alreadyreserved ) %]
- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>already has a hold</strong> on this item.</li>
+ <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>already has a hold</strong> on this item.</li>
[% ELSIF ( ageRestricted ) %]
<li><strong>Age restricted</strong></li>
[% ELSIF ( none_available ) %]
<li> <strong>No items are available</strong> to be placed on hold.</li>
[% ELSIF ( maxreserves ) %]
- <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> has too many holds.</li>
+ <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> has too many holds.</li>
[% END %]
</ul>
[% ELSE %]
<h3>Cannot place hold on some items</h3>
[% IF ( exceeded_maxreserves ) %]
- <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can place [% new_reserves_allowed | html %] of the requested [% new_reserves_count | html %] holds for a maximum of [% maxreserves | html %] total holds.</li>
+ <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can place [% new_reserves_allowed | html %] of the requested [% new_reserves_count | html %] holds for a maximum of [% maxreserves | html %] total holds.</li>
[% ELSIF ( exceeded_holds_per_record ) %]
[% FOREACH biblioloo IN biblioloop %]
[% IF (biblioloo.tooManyHoldsForThisRecord) %]
- <li><strong>Too many holds for <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | html %]"> [% biblioloo.title | html %]</a>: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% max_holds_for_record | html %] hold(s) on this record.</li>
+ <li><strong>Too many holds for <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | uri %]"> [% biblioloo.title | html %]</a>: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] </a> can only place a maximum of [% max_holds_for_record | html %] hold(s) on this record.</li>
[% END %]
[% END %]
[% END %]
[% IF ( expiry || diffbranch || patron.is_debarred || ( amount_outstanding && Koha.Preference('maxoutstanding') && amount_outstanding > Koha.Preference('maxoutstanding') ) ) %]
<div class="dialog message"><ul>
[% IF ( expiry ) %]
- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Account has expired</strong></li>
+ <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Account has expired</strong></li>
[% END %]
[% IF patron.is_debarred %]
- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]#reldebarments">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Patron has restrictions</strong></li>
+ <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]#reldebarments">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Patron has restrictions</strong></li>
[% END %]
[% IF amount_outstanding && Koha.Preference('maxoutstanding') && amount_outstanding > Koha.Preference('maxoutstanding') %]
- <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Patron has outstanding fines: [% amount_outstanding | format('%.2f') %]</strong></li>
+ <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a>: <strong>Patron has outstanding fines: [% amount_outstanding | $Price %]</strong></li>
[% END %]
[% IF ( diffbranch ) %]
- <li> <strong>Pickup library is different. </strong>Patron: <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a> Patron's home library: ([% Branches.GetName(patron.branchcode) | html %] / [% patron.branchcode | html %] )</li>
+ <li> <strong>Pickup library is different. </strong>Patron: <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a> Patron's home library: ([% Branches.GetName(patron.branchcode) | html %] / [% patron.branchcode | html %] )</li>
[% END %]
</ul></div>
<ol> <li><span class="label">Patron:</span>
[% IF ( patron.borrowernumber ) %]
- <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %] ([% patron.cardnumber | html %])</a>
+ <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] ([% patron.cardnumber | html %])</a>
[% ELSE %]
Not defined yet
[% END %]
<li>
<label for="pickup">Pickup at:</label>
<select name="pickup" size="1" id="pickup">
- [% PROCESS options_for_libraries libraries => Branches.all({ search_params => { pickup_location => 1 } }) %]
+ [% PROCESS options_for_libraries libraries => Branches.all({ selected => pickup, search_params => { pickup_location => 1 } }) %]
</select>
</li>
<li>
<label for="to">Hold expires on date:</label>
- <input name="expiration_date" id="to" size="10" class="datepickerto" / type="text" >
+ <input name="expiration_date" id="to" size="10" class="datepickerto" type="text" />
<a href="#" id="clear-date-to" class="clear-date">Clear date</a>
</li>
<th>Barcode</th>
<th>Home library</th>
<th>Last location</th>
+ [% IF itemdata_ccode %]
+ <th>Collection</th>
+ [% END %]
<th>Call no.</th>
<th>Copy number</th>
[% IF itemdata_enumchron %]
<td>
[% IF itemloo.force_hold_level == 'record' # Patron has placed a record level hold previously for this record %]
<span class="error">
- <i class="fa fa-times fa-lg" alt="Cannot be put on hold"></i>
+ <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
Hold must be record level
</span>
[% ELSIF ( itemloo.available ) %]
<input type="radio" name="checkitem" value="[% itemloo.itemnumber | html %]" />
[% ELSIF ( itemloo.override ) %]
<input type="radio" name="checkitem" class="needsoverride" value="[% itemloo.itemnumber | html %]" />
- <i class="fa fa-exclamation-triangle fa-lg" style="color:gold" alt="Requires override of hold policy"/></i>
+ <i class="fa fa-exclamation-triangle fa-lg" style="color:gold" title="Requires override of hold policy"/></i>
[% ELSE %]
<span class="error">
- <i class="fa fa-times fa-lg" alt="Cannot be put on hold"></i>
+ <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
[% IF itemloo.not_holdable %]
[% IF itemloo.not_holdable == 'damaged' %]
Item damaged
Age restricted
[% ELSIF itemloo.not_holdable == 'tooManyHoldsForThisRecord' %]
Exceeded max holds per record
+ [% ELSIF itemloo.not_holdable == 'tooManyReservesToday' %]
+ Daily hold limit reached for patron
[% ELSIF itemloo.not_holdable == 'tooManyReserves' %]
Too many holds
[% ELSIF itemloo.not_holdable == 'notReservable' %]
Patron is from different library
[% ELSIF itemloo.not_holdable == 'itemAlreadyOnHold' %]
Patron already has hold for this item
+ [% ELSIF itemloo.not_holdable == 'cannotBeTransferred' %]
+ Cannot be transferred to pickup library
[% ELSE %]
[% itemloo.not_holdable | html %]
[% END %]
<td>
[% Branches.GetName( itemloo.holdingbranch ) | html %]
</td>
+ [% IF itemdata_ccode %]
+ <td>
+ [% IF ( itemloo.ccode ) %][% AuthorisedValues.GetByCode( 'CCODE', itemloo.ccode ) | html %][% END %]
+ </td>
+ [% END %]
<td>
[% itemloo.itemcallnumber | html %]
</td>
[% END %]
<td>
[% IF ( itemloo.onloan ) %]
- <span title="[% itemloo.date_due | html %]" class="checkedout">Due [% itemloo.date_due | $KohaDates as_due_date => 1 | html %]</span>
+ <span title="[% itemloo.date_due | html %]" class="checkedout">Due [% itemloo.date_due | $KohaDates as_due_date => 1 %]</span>
[% ELSE %]
<span title="0000-00-00">
[% IF ( itemloo.transfertwhen ) %]
Can't be cancelled when item is in transit
[% ELSE %]
[% IF ( itemloo.waitingdate ) %]Waiting[% ELSE %]On hold[% END %]
- [% IF ( itemloo.canreservefromotherbranches ) %]for <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% itemloo.ReservedFor.borrowernumber | html %]">[% itemloo.ReservedFor.firstname | html %] [% itemloo.ReservedFor.surname | html %]</a>[% END %] [% IF ( itemloo.waitingdate ) %]at[% ELSE %]expected at[% END %] [% Branches.GetName( itemloo.ExpectedAtLibrary ) | html %]
+ [% IF ( itemloo.canreservefromotherbranches ) %]for <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% itemloo.ReservedFor.borrowernumber | uri %]">[% itemloo.ReservedFor.firstname | html %] [% itemloo.ReservedFor.surname | html %]</a>[% END %] [% IF ( itemloo.waitingdate ) %]at[% ELSE %]expected at[% END %] [% Branches.GetName( itemloo.ExpectedAtLibrary ) | html %]
since
[% IF ( itemloo.waitingdate ) %][% itemloo.waitingdate | $KohaDates %][% ELSE %][% IF ( itemloo.reservedate ) %][% itemloo.reservedate | html %][% END %][% END %]. <a class="info" href="modrequest.pl?CancelBiblioNumber=[% itemloo.biblionumber | html %]&CancelBorrowerNumber=[% itemloo.ReservedFor.borrowernumber | html %]&CancelItemnumber=[% itemloo.itemnumber | html %]" onclick="return confirmDelete(MSG_CONFIRM_DELETE_HOLD);">Cancel hold</a>
</table>
[% IF ( bibitemloo.hiddencount ) %]
<form>
- <p class="hiddencount"><a href="request.pl?biblionumber=[% bibitemloo.biblionumber | html %]&borrowernumber=[% bibitemloo.borrowernumber | html %]&showallitems=1">Show all items ([% bibitemloo.hiddencount | html %] hidden)</a></p>
+ <p class="hiddencount"><a href="request.pl?biblionumber=[% bibitemloo.biblionumber | uri %]&borrowernumber=[% bibitemloo.borrowernumber | uri %]&showallitems=1">Show all items ([% bibitemloo.hiddencount | html %] hidden)</a></p>
</form>
[% END %] <!-- hiddencount -->
[% END %] <!-- bibitemloop -->
[% END %]
<td>
<ul>
- <li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | html %]">[% biblioloo.title | html %]</a></li>
+ <li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | uri %]">[% biblioloo.title | html %]</a></li>
[% IF ( biblioloo.publicationyear ) %]
<li><span class="label">Publication year:</span> [% biblioloo.publicationyear | html %]</li>
[% END %]
[% END %]
[% IF ( biblioloo.alreadyres ) %]
- <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | html %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>already has a hold</strong> on this item </li>
+ <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a> <strong>already has a hold</strong> on this item </li>
[% END %]
[% IF ( biblioloo.none_avail ) %]
<li> <strong>No items are available</strong> to be placed on hold</li>
[% IF ( biblioloo.reserveloop ) %]
[% IF ( multi_hold ) %]
<h3>
- <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblio.biblionumber | html %]">
+ <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | uri %]">
[% biblioloo.title | html %]
</a>
</h3>
[% SET branchcodes = [] %]
[% FOREACH h IN biblioloo.reserveloop %]
- [% branchcodes.push( h.branchcode ) | $raw %]
+ [% branchcodes.push( h.branchcode ) %]
[% END %]
[% branchcodes = branchcodes.unique %]
[% SET holds_by_branch = [] %]
[% FOREACH h IN biblioloo.reserveloop %]
[% IF h.branchcode == b %]
- [% holds_by_branch.push( h ) | $raw %]
+ [% holds_by_branch.push( h ) %]
[% END %]
[% END %]
<fieldset>
[% FOREACH h IN biblioloo.reserveloop %]
[% SET hold_itemtype = h.object.item.effective_itemtype || h.itemtype %]
- [% itemtypes.push( hold_itemtype ) | $raw %]
+ [% itemtypes.push( hold_itemtype ) %]
[% END %]
[% itemtypes = itemtypes.unique %]
[% FOREACH h IN biblioloo.reserveloop %]
[% SET hold_itemtype = h.object.item.effective_itemtype || h.itemtype %]
[% IF hold_itemtype == i %]
- [% holds_by_itemtype.push( h ) | $raw %]
+ [% holds_by_itemtype.push( h ) %]
[% END %]
[% END %]
[% SET branchcodes = [] %]
[% FOREACH h IN biblioloo.reserveloop %]
- [% branchcodes.push( h.branchcode ) | $raw %]
+ [% branchcodes.push( h.branchcode ) %]
[% END %]
[% branchcodes = branchcodes.unique %]
[% SET holds_by_branch = [] %]
[% FOREACH h IN biblioloo.reserveloop %]
[% IF h.branchcode == b %]
- [% holds_by_branch.push( h ) | $raw %]
+ [% holds_by_branch.push( h ) %]
[% END %]
[% END %]
[% SET itemtypes = [] %]
[% FOREACH h IN holds_by_branch %]
[% SET hold_itemtype = h.object.item.effective_itemtype || h.itemtype %]
- [% itemtypes.push( hold_itemtype ) | $raw %]
+ [% itemtypes.push( hold_itemtype ) %]
[% END %]
[% itemtypes = itemtypes.unique %]
[% FOREACH h IN holds_by_branch %]
[% SET hold_itemtype = h.object.item.effective_itemtype || h.itemtype %]
[% IF hold_itemtype == i %]
- [% holds_by_itemtype.push( h ) | $raw %]
+ [% holds_by_itemtype.push( h ) %]
[% END %]
[% END %]
[% INCLUDE holds_table.inc holds=holds_by_itemtype %]
</form>
[% END %]
[% END %]
-</div>
-</div>
-<div class="yui-b">
-[% UNLESS ( multi_hold ) %]
- [% INCLUDE 'biblio-view-menu.inc' %]
-[% END %]
+ </main>
+
+ [% IF ( multi_hold ) # No sidebar menu when placing multiple holds %]
+ </div> <!-- /.col-md-10.col-md-offset-1 -->
+ [% ELSE %]
+ </div> <!-- /.col-sm-10.col-sm-push-2 -->
+ <div class="col-sm-2 col-sm-pull-10">
+ <aside>
+ [% INCLUDE 'biblio-view-menu.inc' %]
+ </aside>
+ </div> <!-- /.col-sm-2.col-sm-pull-10 -->
+ [% END %]
+ </div> <!-- /.row -->
-</div>
-</div>
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'datatables.inc' %]
[% INCLUDE 'calendar.inc' %]
+ [% INCLUDE 'columns_settings.inc' %]
[% Asset.js("js/circ-patron-search-results.js") | $raw %]
<script>
+ var biblionumber = "[% biblionumber | $raw %]";
+ var borrowernumber = "[% patron.borrowernumber | $raw %]";
var MSG_CONFIRM_DELETE_HOLD = _("Are you sure you want to cancel this hold?");
var patron_homebranch = "[% Branches.GetName( patron.branchcode ) |replace("'", "\'") |replace('"', '\"') |replace('\n', '\\n') |replace('\r', '\\r') | html %]";
var override_items = {[% FOREACH bibitemloo IN bibitemloop %][% FOREACH itemloo IN bibitemloo.itemloop %][% IF ( itemloo.override ) %]
[% END %][% END %][% END %]
};
var MSG_NO_ITEMS_AVAILABLE = _("A hold cannot be requested on any of these items.");
+ columns_settings_borrowers_table = [% ColumnsSettings.GetColumns( 'circ', 'circulation', 'table_borrowers', 'json' ) | $raw %]
$(document).ready(function() {
function ToggleHoldsToPlace() {
ToggleHoldsToPlace();
});
+ [% IF Koha.Preference('UseBranchTransferLimits') %]
+ $("#pickup").on('change', function(){
+ var pickup = $("#pickup").val();
+ var url = "?pickup=" + pickup;
+ url += "&borrowernumber=" + borrowernumber;
+ url += "&biblionumber=" + biblionumber;
+ window.location.replace(url);
+ });
+ [% END %]
+
[% IF AutoResumeSuspendedHolds %]
$(".suspend_until_datepicker, .datepickerfrom, .datepickerto").datepicker("option", "minDate", 1);
[% END %]
}
});
var prev_rank_request;
- var priorities;
$("select[name=rank-request]").on("focus", function() {
prev_rank_request = $(this).val();
var row = $(this).parents("tr:first");
- priorities = row.parent().find("select[name=rank-request]").map( function() {
- return $(this).val();
- }).get();
}).change(function() {
var row = $(this).parents("tr:first");
var value = parseInt($(this).val());
- var rowsCount = row.parent().children('tr').length - 1;
- value = value > rowsCount ? rowsCount : value;
- var after = row.parent().find("tr:nth-child("+(value+1)+")");
-
- if (prev_rank_request > value) {
- row.insertBefore(after);
- } else {
- row.insertAfter(after);
+ var found_holds = $("select[name='rank-request'][disabled='disabled']").length ; //Count how many are found
+ if( !isNaN(value) ) { //If moved to 'del'
+ var after = row.parent().find("tr:nth-child("+(value+1+found_holds )+")"); //Go to the row 1 after the new value (and skip found holds)
+ if (prev_rank_request > value) {
+ row.insertBefore(after);
+ } else {
+ row.insertAfter(after);
+ }
}
- var next_priority = 0;
- row.parent().find("select[name=rank-request]").each(function () {
- $(this).val(priorities[next_priority]);
+ var next_priority = 1;
+ $("select[name=rank-request]").each(function () {
+ if( isNaN( $(this).val() ) ){ return true; } //Don't reset found or del holds
+ $(this).val(next_priority);
next_priority++;
});
});