1 <!-- TMPL_INCLUDE NAME="doc-head-open.inc" --><!-- TMPL_VAR NAME="LibraryNameTitle" DEFAULT="Koha Online" --> Catalog › Placing hold <!-- TMPL_VAR NAME="title" escape="html" --> for <!-- TMPL_LOOP NAME="USER_INFO" --><!-- TMPL_VAR NAME="firstname" --> <!-- TMPL_VAR NAME="surname" --><!-- /TMPL_LOOP -->
2 <!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
3 <!-- TMPL_INCLUDE NAME="calendar.inc" -->
4 <script type="text/javascript">
6 var MSG_NO_COPY_SELECTED = _("Expecting a specific copy selection.");
8 function prefixOf (s, tok) {
9 var index = s.indexOf(tok);
10 return s.substring(0, index);
12 function suffixOf (s, tok) {
13 var index = s.indexOf(tok);
14 return s.substring(index + 1);
17 $(document).ready(function() {
18 var copiesRowId = null;
19 var wasSpecific = false;
20 var lastCopiesRowId = null;
21 $(".checkitem").parent().click(function(e){
22 if(e.target.tagName.toLowerCase() == 'td'){
23 $(this).find("input.checkitem").each( function() {
24 $(this).attr('checked', !$(this).attr('checked'));
28 // Hides all 'specific copy' table rows on load.
29 $(".copiesrow").hide();
31 $("#place_on_hdr").show();
32 $(".place_on_type").show();
34 // Replace non-JS single-selection with multi-selection capability.
35 $(".reserve_mode").val("multi");
36 $(".confirm_nonjs").remove();
37 $(".confirmjs_hold").each(function(){
38 var bib = $(this).attr("title");
39 var html = "<input type =\"checkbox\" class=\"confirmjs\" checked=\"checked\"";
40 html += "value=\"" + bib + "\"/>";
43 $(".confirmjs_nohold").each(function(){
44 var bib = $(this).attr("title");
45 var html = "<input type =\"checkbox\" class=\"confirmjs\" disabled=\"disabled\"";
46 html += "value=\"" + bib + "\"/>";
50 // Make sure a specific item was selected where specified
51 // before moving on to a new item.
52 function changeSelection (newCopiesRowId, isSpecific) {
53 if (copiesRowId && ((copiesRowId != newCopiesRowId) || (wasSpecific != isSpecific))) {
54 var biblioNum = suffixOf(copiesRowId, "_");
56 // If the 'specific copy' radio button was checked
57 if (wasSpecific && (copiesRowId != newCopiesRowId)) {
58 // Find the selected copy
59 var item = $(".checkitem_" + biblioNum + ":checked");
60 if ($(item).size() == 0) {
61 alert(MSG_NO_COPY_SELECTED);
66 copiesRowId = newCopiesRowId;
67 wasSpecific = isSpecific;
71 // When 'specific copy' radio button is clicked
72 $(".selectspecific").click(function() {
74 // Make sure all other specific copy table rows are hidden
75 biblioNum = suffixOf($(this).attr("id"), "_");
76 newCopiesRowId = "#copiesrow_" + biblioNum;
78 if (!changeSelection(newCopiesRowId, true)) {
81 $(".copiesrow:not(" + newCopiesRowId + ")").hide();
83 // Show the specific copy table for this radio button.
84 $(newCopiesRowId).show();
88 // When 'first available' radion button is clicked
89 $(".selectany").click(function() {
90 // Make sure all other specific copy table rows are hidden
91 biblioNum = suffixOf($(this).attr("id"), "_");
92 newCopiesRowId = "#copiesrow_" + biblioNum;
94 if (!changeSelection(newCopiesRowId, false)) {
98 // Hide the copies table row
99 $(".copiesrow").hide();
102 // When 'Place Hold' button is clicked
103 $(".placehold").click(function(){
104 var biblionumbers = "";
107 if ($(".confirmjs:checked").size() == 0) {
108 alert(MSG_NO_RECORD_SELECTED);
112 // Find the items with the 'Hold' box checked
114 $(".confirmjs:checked").each(function() {
115 var biblioNum = $(this).val();
116 biblionumbers += biblioNum + "/";
117 selections += biblioNum + "/";
119 // If the 'specific copy' radio button is checked
120 if ($("#reqspecific_" + biblioNum + ":checked").size() > 0) {
121 // Find the selected copy
122 var item = $(".checkitem_" + biblioNum + ":checked");
123 if ($(item).size() == 0) {
127 selections += $(item).val();
132 // Add the pickup location
133 var branchSel = $("#branch_" + biblioNum);
134 if (branchSel.size() > 0) {
135 selections += $(branchSel).val();
142 alert(MSG_NO_COPY_SELECTED);
146 $("#selections").val(selections);
147 $("#biblionumbers").val(biblionumbers);
157 <body id="opac-holds">
158 <div id="doc3" class="yui-t7">
159 <!--TMPL_INCLUDE NAME="masthead.inc" -->
162 <div id="holds" class="container">
163 <!-- TMPL_IF NAME="message" -->
164 <!-- TMPL_IF NAME="GNA" -->
165 <div id="gna" class="dialog alert">
166 <p><strong>Sorry</strong>, you cannot place holds because the library doesn't have up-to-date <a href="/cgi-bin/koha/opac-userupdate.pl">contact information</a> on file.</p>
167 <p>Please contact your librarian, or use the <a href="/cgi-bin/koha/opac-userupdate.pl">online update form</a> to submit current information (<em>Please note:</em> there may be a delay in restoring your account if you submit online)</p>
170 <!-- TMPL_IF NAME="lost" -->
171 <div id="lost" class="dialog alert">
172 <p><strong>Sorry</strong>, you cannot place holds because your library card has been marked as lost or stolen.</p>
173 <p>If this is an error, please take your card to the circulation desk at your local library and the error will be corrected.</p>
176 <!-- TMPL_IF NAME="debarred" -->
177 <div id="debarred" class="dialog alert">
178 <p><strong>Sorry</strong>, you cannot place holds because your account has been frozen.</p>
179 <p>Usually the reason for freezing an account is old overdues or damage fees. If <a href="/cgi-bin/koha/opac-user.pl">your account page</a> shows your account to be clear, please consult a librarian.</p>
182 <!-- TMPL_IF NAME="too_much_oweing" -->
183 <div class="dialog alert">
184 Sorry, you cannot place holds because you owe <!-- TMPL_VAR NAME="too_much_oweing" -->.
187 <!-- TMPL_IF NAME="too_many_reserves" -->
188 <div class="dialog alert">Sorry, you cannot place more than <!-- TMPL_VAR NAME="too_many_reserves" --> holds.
191 <!-- TMPL_IF NAME="bad_biblionumber" -->
192 <div class="dialog alert">ERROR: No biblio record found for biblionumber <!-- TMPL_VAR NAME="bad_biblionumber" -->.</div>
194 <!-- TMPL_IF NAME="no_items_selected" -->
195 <div class="dialog alert">
196 You must select at least one item.
199 <!-- TMPL_IF NAME="no_branch_selected" -->
200 <div class="dialog alert">
201 You must select a library for pickup.
204 <!-- TMPL_IF NAME="no_biblionumber" -->
205 <div class="dialog alert">ERROR: No biblionumber received.</div>
207 <!-- TMPL_IF NAME="bad_data" -->
208 <div class="dialog alert">ERROR: Internal error: incomplete hold request.</div>
211 <!-- TMPL_IF NAME="none_available" -->
212 <div class="dialog alert"><strong>Sorry</strong>, none of these items can be placed on hold.
215 <!-- /TMPL_IF --><!-- NAME="message" -->
217 <!-- TMPL_UNLESS NAME="message" --><!-- TMPL_UNLESS NAME="none_available" --><h3>Confirm holds for:
218 <!-- TMPL_LOOP NAME="USER_INFO" -->
219 <!-- TMPL_VAR NAME="firstname" --> <!-- TMPL_VAR NAME="surname" --> (<!-- TMPL_VAR NAME="cardnumber" -->)
221 </h3><!-- /TMPL_UNLESS -->
223 <form action="/cgi-bin/koha/opac-reserve.pl" method="post">
224 <input type="hidden" name="place_reserve" value="1"/>
226 <!-- These values are set dynamically by js -->
227 <input type="hidden" name="biblionumbers" id="biblionumbers"/>
228 <input type="hidden" name="selecteditems" id="selections"/>
230 <table id="bibitemloop">
231 <!-- TMPL_UNLESS NAME="none_available" --><tr>
234 <!-- TMPL_UNLESS NAME="item_level_itypes" -->
236 <!-- /TMPL_UNLESS -->
237 <!-- TMPL_IF NAME="showpriority" -->
240 <!-- TMPL_IF NAME="reserve_in_future" -->
241 <th>Hold Starts on Date</th>
243 <th>Hold Not Needed After</th>
244 <!-- TMPL_IF NAME="OPACItemHolds" -->
245 <th id="place_on_hdr" style="display:none">Place On</th>
247 <!-- TMPL_UNLESS NAME="singleBranchMode" -->
248 <!-- TMPL_IF NAME="choose_branch"-->
249 <th>Pickup Location</th>
251 <!-- /TMPL_UNLESS -->
252 </tr><!-- TMPL_ELSE --><tr><th colspan="5">Title</th></tr><!-- /TMPL_UNLESS -->
254 <!-- TMPL_LOOP name="bibitemloop" -->
256 <!-- TMPL_IF NAME="holdable" -->
258 <input class="reserve_mode" name="reserve_mode" type="hidden" value="single"/>
259 <input class="single_bib" name="single_bib" type="hidden" value="<!-- TMPL_VAR NAME="biblionumber" -->"/>
260 <span class="confirmjs_hold" title="<!-- TMPL_VAR NAME="biblionumber" -->"></span>
261 <span class="confirm_nonjs">
262 <input type="radio" class="confirmbox checkitem <!-- TMPL_VAR NAME="checkitem_bib" -->"
263 name="<!-- TMPL_VAR NAME="checkitem_bib" -->" checked="checked"
264 id="<!-- TMPL_VAR NAME="checkitem_bib" -->"
266 <label class="confirm_label" for="<!-- TMPL_VAR NAME="checkitem_bib" -->">Next available copy</label>
270 <!-- TMPL_UNLESS NAME="none_available" --><td> </td><!-- /TMPL_UNLESS -->
272 <!-- TMPL_IF NAME="holdable" --><td><!-- TMPL_ELSE --><td colspan="5"><!-- /TMPL_IF -->
273 <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"><!-- TMPL_VAR NAME="title" escape="html" --><!-- TMPL_IF NAME="subtitle" --> <!-- TMPL_LOOP NAME="subtitle" --><!--TMPL VAR Name="subfield"--><!--/TMPL_LOOP--><!-- /TMPL_IF --></a>
274 <!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF -->
276 <!-- TMPL_UNLESS NAME="holdable" -->
278 <!-- TMPL_IF NAME="already_reserved" -->
279 <div class="bibmessage">You have already requested this title.</div>
281 <!-- TMPL_UNLESS NAME="bib_available" -->
282 <div class="bibmessage">No available items.</div>
284 <div class="bibmessage">This title cannot be requested.</div>
285 <!-- /TMPL_UNLESS -->
289 <!-- /TMPL_UNLESS -->
292 <!-- TMPL_IF NAME="holdable" --><!-- TMPL_UNLESS NAME="item_level_itypes" -->
294 <!-- TMPL_IF NAME="imageurl" --><img src="<!-- TMPL_VAR NAME="imageurl" -->" alt="" /><!-- /TMPL_IF -->
295 <!-- TMPL_VAR NAME="description" -->
297 <!-- /TMPL_UNLESS --><!-- /TMPL_IF -->
298 <!-- TMPL_IF NAME="holdable" -->
299 <!-- TMPL_IF NAME="showpriority" -->
301 <!-- TMPL_VAR name="rank" --> out of <!-- TMPL_VAR NAME="reservecount" -->
302 </td><!-- /TMPL_IF --><!-- /TMPL_IF -->
303 <!-- TMPL_IF NAME="reserve_in_future" -->
304 <!-- TMPL_IF NAME="holdable" --><td>
305 <input name="reserve_date_<!-- TMPL_VAR NAME="biblionumber" -->" id="reserve_date_<!-- TMPL_VAR NAME="biblionumber" -->" size="10">
306 <script language="JavaScript" type="text/javascript">
308 $("#reserve_date_<!-- TMPL_VAR NAME="biblionumber" -->").attr( 'readonly', 'readonly' );
310 var cal_img = document.createElement('img');
311 cal_img.src = "<!-- TMPL_VAR NAME="themelang" -->/lib/calendar/cal.gif";
312 cal_img.alt = "Show Calendar";
313 cal_img.border = "0";
314 cal_img.id = "CalendarReserveDate<!-- TMPL_VAR NAME="biblionumber" -->";
315 cal_img.style.cursor = "pointer";
316 document.getElementById("reserve_date_<!-- TMPL_VAR NAME="biblionumber" -->").parentNode.appendChild( cal_img );
318 function validate<!-- TMPL_VAR NAME="biblionumber" -->(date) {
319 var today = new Date();
320 if ( (date > today) ||
321 ( date.getDate() == today.getDate() &&
322 date.getMonth() == today.getMonth() &&
323 date.getFullYear() == today.getFullYear() ) ) {
331 inputField : "reserve_date_<!-- TMPL_VAR NAME="biblionumber" -->",
332 ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
333 button : "CalendarReserveDate<!-- TMPL_VAR NAME="biblionumber" -->",
334 disableFunc : validate<!-- TMPL_VAR NAME="biblionumber" -->,
335 dateStatusFunc : validate<!-- TMPL_VAR NAME="biblionumber" -->
340 </td><!-- /TMPL_IF -->
343 <!-- TMPL_IF NAME="holdable" --><td>
344 <input name="expiration_date_<!-- TMPL_VAR NAME="biblionumber" -->" id="expiration_date_<!-- TMPL_VAR NAME="biblionumber" -->" size="10" readonly="readonly" />
345 <img src="<!-- TMPL_VAR NAME="themelang" -->/lib/calendar/cal.gif" alt="Show Calendar" border="0" id="CalendarExpirationDate_<!-- TMPL_VAR NAME="biblionumber" -->" style="cursor: pointer;" />
346 <script language="JavaScript" type="text/javascript">
348 function validate1(date) {
349 var today = new Date();
350 if ( (date > today) ||
351 ( date.getDate() == today.getDate() &&
352 date.getMonth() == today.getMonth() &&
353 date.getFullYear() == today.getFullYear() ) ) {
361 inputField : "expiration_date_<!-- TMPL_VAR NAME="biblionumber" -->",
362 ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->",
363 button : "CalendarExpirationDate_<!-- TMPL_VAR NAME="biblionumber" -->",
364 disableFunc : validate1,
365 dateStatusFunc : validate1
370 <p style="margin:.3em 2em;">
371 <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('expiration_date_<!-- TMPL_VAR NAME="biblionumber" -->').value='';return false;">Clear Date</a></p>
372 </td><!-- /TMPL_IF -->
374 <!-- TMPL_IF NAME="holdable" --><!-- TMPL_IF NAME="OPACItemHolds" -->
375 <td class="place_on_type" style="display:none">
379 <!-- TMPL_UNLESS NAME="holdable" -->
380 <input type="radio" name="reqtype_<!-- TMPL_VAR NAME="biblionumber" -->"
381 id="reqany_<!-- TMPL_VAR NAME="biblionumber" -->"
387 <input type="radio" name="reqtype_<!-- TMPL_VAR NAME="biblionumber" -->"
388 id="reqany_<!-- TMPL_VAR NAME="biblionumber" -->"
393 <!-- /TMPL_UNLESS -->
394 <label for="reqany_<!-- TMPL_VAR NAME="biblionumber" -->">Next available copy</label>
399 <!-- TMPL_UNLESS NAME="holdable" -->
400 <input type="radio" name="reqtype_<!-- TMPL_VAR NAME="biblionumber" -->"
401 id="reqspecific_<!-- TMPL_VAR NAME="biblionumber" -->"
402 class="selectspecific"
407 <input type="radio" name="reqtype_<!-- TMPL_VAR NAME="biblionumber" -->"
408 id="reqspecific_<!-- TMPL_VAR NAME="biblionumber" -->"
409 class="selectspecific"
412 <!-- /TMPL_UNLESS -->
413 <label for="reqspecific_<!-- TMPL_VAR NAME="biblionumber"-->">A specific copy</label>
418 <!-- /TMPL_IF --><!-- /TMPL_IF -->
420 <!-- TMPL_UNLESS NAME="singleBranchMode" -->
421 <!-- TMPL_IF NAME="holdable" -->
422 <!-- TMPL_IF NAME="choose_branch" -->
424 <select name="branch" id="branch_<!-- TMPL_VAR NAME="biblionumber" -->"
425 <!-- TMPL_UNLESS NAME="holdable" -->disabled="disabled"<!-- /TMPL_UNLESS --> >
426 <!-- TMPL_LOOP NAME="branchChoicesLoop" -->
427 <!-- TMPL_IF name="selected" -->
428 <option value="<!-- TMPL_VAR NAME="value" -->" selected="selected"><!-- TMPL_VAR NAME="branchname" --></option>
430 <option value="<!-- TMPL_VAR NAME="value" -->"><!-- TMPL_VAR NAME="branchname" --></option>
437 <!-- /TMPL_UNLESS -->
440 <!-- TMPL_IF NAME="OPACItemHolds" -->
441 <!-- TMPL_IF NAME="holdable" -->
442 <tr class="copiesrow" id="copiesrow_<!-- TMPL_VAR NAME="biblionumber"-->">
445 <td colspan="<!-- TMPL_VAR NAME="itemtable_colspan" -->">
447 <caption>Select a specific copy:</caption>
450 <!-- TMPL_IF NAME="item_level_itypes" -->
454 <!-- TMPL_UNLESS NAME="singleBranchMode" -->
455 <th>Home Library</th>
456 <th>Last Location</th>
457 <!-- /TMPL_UNLESS -->
459 <!-- TMPL_IF NAME="itemdata_enumchron" -->
465 <!-- TMPL_LOOP name="itemLoop" -->
466 <tr class="<!-- TMPL_VAR NAME="backgroundcolor" -->">
468 <!-- TMPL_IF NAME="available" -->
469 <input type="radio" class="checkitem checkitem_<!-- TMPL_VAR NAME="biblionumber" -->" name="checkitem_<!-- TMPL_VAR NAME="biblionumber" -->"
470 value="<!-- TMPL_VAR NAME="itemnumber" -->" />
472 <input disabled="disabled" type="radio" class="checkitem" name="checkitem" value="<!-- TMPL_VAR NAME="itemnumber" -->" />
473 <img src="/opac-tmpl/<!-- TMPL_VAR NAME="theme" -->/famfamfam/silk/cross.png" alt="Cannot be put on hold" title="Cannot be put on hold" />
474 <!-- /TMPL_IF --> <!-- TMPL_IF NAME="copynumber" --><!-- TMPL_VAR NAME="copynumber" --><!-- /TMPL_IF -->
476 <!-- TMPL_IF NAME="item_level_itypes" -->
478 <!-- TMPL_UNLESS NAME="noItemTypeImages" -->
479 <!-- TMPL_IF NAME="imageurl" --><img src="<!-- TMPL_VAR NAME="imageurl" -->" alt="" /><!-- /TMPL_IF -->
480 <!-- /TMPL_UNLESS -->
481 <!-- TMPL_VAR NAME="description" -->
484 <td><!-- TMPL_VAR NAME="barcode" --></td>
485 <!-- TMPL_UNLESS NAME="singleBranchMode" -->
486 <td><!-- TMPL_VAR NAME="homeBranchName" --></td>
487 <td><!-- TMPL_VAR NAME="holdingBranchName" --></td>
488 <!-- /TMPL_UNLESS -->
489 <td><!-- TMPL_VAR NAME="callNumber" --></td>
490 <!-- TMPL_IF NAME="itemdata_enumchron" --><!-- test -->
491 <td><!-- TMPL_VAR NAME="enumchron" --></td>
494 <!-- TMPL_IF NAME="date_due" -->
495 <span class="checkedout">Due <!-- TMPL_VAR NAME="date_due" --></span>
496 <!-- TMPL_ELSIF NAME="transfertwhen" -->
497 <span class="intransit">In transit from <!-- TMPL_VAR NAME="transfertfrom" -->,
498 to <!-- TMPL_VAR NAME="transfertto" -->, since <!-- TMPL_VAR NAME="transfertwhen" --></span>
500 <!-- TMPL_IF Name="message" -->
501 <span class="lost">Unavailable (lost or missing)</span>
503 <!-- TMPL_IF Name="notforloan" -->
504 <span class="notforloan">Not for loan (<!-- TMPL_VAR NAME="notforloanvalue" -->)</span>
506 <!-- TMPL_IF NAME="reservedate"-->
507 <span class="waiting"><!-- TMPL_IF NAME="waitingdate" -->Waiting<!-- TMPL_ELSE -->On hold<!-- /TMPL_IF --> for patron
508 <!-- TMPL_IF NAME="waitingdate" -->at<!-- TMPL_ELSE -->expected at<!-- /TMPL_IF --> <!-- TMPL_VAR NAME="ExpectedAtLibrary" -->
510 <!-- TMPL_IF NAME="waitingdate" --><!-- TMPL_VAR NAME="waitingdate" --><!-- TMPL_ELSE --><!-- TMPL_IF name="reservedate" --><!-- TMPL_VAR NAME="reservedate" --><!-- /TMPL_IF --><!-- /TMPL_IF -->.
513 <span class="notonhold">Not on hold</span>
514 <!-- /TMPL_IF -->
521 <!-- /TMPL_IF --><!-- bib_available -->
522 <!-- /TMPL_IF --><!-- OPACItemHolds -->
524 </table><!-- bibitemloop -->
525 <!-- /TMPL_UNLESS --> <!-- if message -->
526 </div><!-- bigloop -->
528 <!-- TMPL_UNLESS NAME="message" -->
529 <!-- TMPL_UNLESS NAME="none_available" -->
530 <input type="submit" value="Place Hold" class="placehold" />
531 <!-- /TMPL_UNLESS -->
532 <!-- /TMPL_UNLESS -->
541 <div><!-- The following include seems to have an extra "/div" in it... -->
542 <!-- TMPL_INCLUDE NAME="opac-bottom.inc"-->