Bug 9932 - Broken calendar image and misplaced masthead include for CCSR theme
[koha.git] / koha-tmpl / opac-tmpl / prog / en / modules / opac-reserve.tt
1 [% INCLUDE 'doc-head-open.inc' %][% LibraryNameTitle or "Koha online" %] catalog ›  Placing a hold
2 [% INCLUDE 'doc-head-close.inc' %]
3 [% INCLUDE 'calendar.inc' %]
4 <script type="text/javascript">
5 // <![CDATA[
6  var MSG_NO_COPY_SELECTED = _("Expecting a specific copy selection.");
7
8  function prefixOf (s, tok) {
9      var index = s.indexOf(tok);
10      return s.substring(0, index);
11  }
12  function suffixOf (s, tok) {
13      var index = s.indexOf(tok);
14      return s.substring(index + 1);
15  }
16
17  $(document).ready(function() {
18     $('#hold-request-form').preventDoubleFormSubmit();
19
20     var copiesRowId = null;
21     var wasSpecific = false;
22     var lastCopiesRowId = null;
23         $(".checkitem").parent().click(function(e){
24                 if(e.target.tagName.toLowerCase() == 'td'){
25            $(this).find("input.checkitem").each( function() {
26                $(this).attr('checked', !$(this).attr('checked'));
27                         });
28                 }
29         });
30     // Hides all 'specific copy' table rows on load.
31     $(".copiesrow").hide();
32
33     $("#place_on_hdr").show();
34     $(".place_on_type").show();
35
36     // Replace non-JS single-selection with multi-selection capability.
37     $(".reserve_mode").val("multi");
38     $(".confirm_nonjs").remove();
39     $(".confirmjs_hold").each(function(){
40         var bib = $(this).attr("title");
41         var html = "<input type =\"checkbox\" class=\"confirmjs\" checked=\"checked\"";
42         html += "value=\"" + bib + "\"/>";
43         $(this).html(html);
44     });
45     $(".confirmjs_nohold").each(function(){
46         var bib = $(this).attr("title");
47         var html = "<input type =\"checkbox\" class=\"confirmjs\" disabled=\"disabled\"";
48         html += "value=\"" + bib + "\"/>";
49         $(this).html(html);
50     });
51
52     // Make sure a specific item was selected where specified
53     // before moving on to a new item.
54     function changeSelection (newCopiesRowId, isSpecific) {
55         if (copiesRowId && ((copiesRowId != newCopiesRowId) || (wasSpecific != isSpecific))) {
56             var biblioNum = suffixOf(copiesRowId, "_");
57
58             // If the 'specific copy' radio button was checked
59               if (wasSpecific && (copiesRowId != newCopiesRowId)) {
60                 // Find the selected copy
61                 var item = $(".checkitem_" + biblioNum + ":checked");
62                 if ($(item).size() == 0) {
63                     alert(MSG_NO_COPY_SELECTED);
64                     return false;
65                 }
66             }
67         }
68         copiesRowId = newCopiesRowId;
69         wasSpecific = isSpecific;
70         return true;
71     }
72
73     // When 'specific copy' radio button is clicked
74     $(".selectspecific").click(function() {
75
76         // Make sure all other specific copy table rows are hidden
77         biblioNum = suffixOf($(this).attr("id"), "_");
78         newCopiesRowId = "#copiesrow_" + biblioNum;
79
80         if (!changeSelection(newCopiesRowId, true)) {
81             return false;
82         }
83         $(".copiesrow:not(" + newCopiesRowId + ")").hide();
84
85         // Show the specific copy table for this radio button.
86         $(newCopiesRowId).show();
87     });
88
89
90     // When 'first available' radion button is clicked
91     $(".selectany").click(function() {
92         // Make sure all other specific copy table rows are hidden
93         biblioNum = suffixOf($(this).attr("id"), "_");
94         newCopiesRowId = "#copiesrow_" + biblioNum;
95
96         if (!changeSelection(newCopiesRowId, false)) {
97             return false;
98         }
99
100         // Hide the copies table row
101         $(".copiesrow").hide();
102     });
103
104     // When 'Place Hold' button is clicked
105     $(".placehold").click(function(){
106         var biblionumbers = "";
107         var selections = "";
108
109         if ($(".confirmjs:checked").size() == 0) {
110             alert(MSG_NO_RECORD_SELECTED);
111             return false;
112         }
113
114         // Find the items with the 'Hold' box checked
115         var badBib = null;
116         $(".confirmjs:checked").each(function() {
117             var biblioNum = $(this).val();
118             biblionumbers += biblioNum + "/";
119             selections += biblioNum + "/";
120
121             // If the 'specific copy' radio button is checked
122             if ($("#reqspecific_" + biblioNum + ":checked").size() > 0) {
123                 // Find the selected copy
124                 var item = $(".checkitem_" + biblioNum + ":checked");
125                 if ($(item).size() == 0) {
126                     badBib = biblioNum;
127                     return false;
128                 } else {
129                   selections += $(item).val();
130                 }
131             }
132             selections += "/";
133
134             // Add the pickup location
135             var branchSel = $("#branch_" + biblioNum);
136             if (branchSel.size() > 0) {
137                 selections += $(branchSel).val();
138             }
139             selections += "/";
140             return true;
141         });
142
143         if (badBib) {
144             alert(MSG_NO_COPY_SELECTED);
145             return false;
146         }
147
148         $("#selections").val(selections);
149         $("#biblionumbers").val(biblionumbers);
150
151         return true;
152     });
153
154  });
155 // ]]>
156 </script>
157 <style type="text/css">td ul { padding : 0; } td li { white-space: nowrap; font-size: 90%; list-style-type:none; padding : .3em 0; }</style>
158 </head>
159
160 <body id="opac-holds">
161   <div id="doc3" class="yui-t7">
162     <div id="bd">
163     [% INCLUDE 'masthead.inc' %]
164           <div id="yui-g">
165         <div id="holds" class="container">
166         [% IF ( message ) %]
167             [% IF ( GNA ) %]
168               <div id="gna" class="dialog alert">
169                 <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>
170               <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>
171               </div>
172             [% END %]
173             [% IF ( lost ) %]
174               <div id="lost" class="dialog alert">
175                 <p><strong>Sorry</strong>, you cannot place holds because your library card has been marked as lost or stolen.</p>
176                 <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>
177               </div>
178             [% END %]
179             [% IF ( debarred ) %]
180               <div id="debarred" class="dialog alert">
181                 <p><strong>Sorry</strong>, you cannot place holds because your account has been frozen.</p>
182                 <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>
183               </div>
184             [% END %]
185             [% IF ( too_much_oweing ) %]
186               <div id="too_much_oweing" class="dialog alert">
187                 Sorry, you cannot place holds because you owe [% too_much_oweing %].
188               </div>
189             [% END %]
190             [% IF ( too_many_reserves ) %]
191               <div id="too_many_reserves" class="dialog alert">Sorry, you cannot place more than [% too_many_reserves %] holds.
192               </div>
193             [% END %]
194             [% IF ( bad_biblionumber ) %]
195               <div id="bad_biblionumber" class="dialog alert">ERROR: No biblio record found for biblionumber [% bad_biblionumber %].</div>
196             [% END %]
197             [% IF ( no_items_selected ) %]
198               <div id="no_items_selected" class="dialog alert">
199                 You must select at least one item.
200               </div>
201             [% END %]
202             [% IF ( no_branch_selected ) %]
203               <div id="no_branch_selected" class="dialog alert">
204                 You must select a library for pickup.
205               </div>
206             [% END %]
207             [% IF ( no_biblionumber ) %]
208               <div id="no_biblionumber" class="dialog alert">ERROR: No biblionumber received.</div>
209             [% END %]
210             [% IF ( bad_data ) %]
211               <div id="bad_data" class="dialog alert">ERROR: Internal error: incomplete hold request.</div>
212             [% END %]
213           [% ELSE %]
214             [% IF ( none_available ) %]
215                 <div id="none_available" class="dialog alert"><strong>Sorry</strong>, none of these items can be placed on hold.
216                 </div>
217               [% END %]
218           [% END %]<!-- NAME="message" -->
219
220       [% UNLESS ( message ) %][% UNLESS ( none_available ) %]<h3>Confirm holds for:
221                       [% FOREACH USER_INF IN USER_INFO %]
222                         [% USER_INF.firstname %] [% USER_INF.surname %] ([% USER_INF.cardnumber %])
223                       [% END %]
224                     </h3>[% END %]
225               [% IF (RESERVE_CHARGE) %]
226               <div class="dialog alert" id="reserve_fee">
227                 There is a charge of [% RESERVE_CHARGE %] for placing this hold
228               </div>
229               [% END %]
230
231             <form action="/cgi-bin/koha/opac-reserve.pl" method="post" id="hold-request-form">
232             <input type="hidden" name="place_reserve" value="1"/>
233
234             <!-- These values are set dynamically by js -->
235             <input type="hidden" name="biblionumbers" id="biblionumbers"/>
236             <input type="hidden" name="selecteditems" id="selections"/>
237             <div id="bigloop">
238               <table id="bibitemloop">
239                 [% UNLESS ( none_available ) %]<tr>
240                   <th>Hold</th>
241                   <th>Title</th>
242                   [% UNLESS ( item_level_itypes ) %]
243                     <th>Item type</th>
244                   [% END %]
245                   [% IF showholds && showpriority %]
246                   <th>Holds and priority</th>
247                   [% ELSIF showholds %]
248                   <th>Holds</th>
249                   [% ELSIF showpriority %]
250                   <th>Priority</th>
251                   [% END %]
252                   [% IF ( reserve_in_future ) %]
253         <th>Hold starts on date</th>
254                   [% END %]
255         <th>Hold not needed after</th>
256                   [% IF ( OPACItemHolds ) %]
257                     <th id="place_on_hdr" style="display:none">Place on</th>
258                   [% END %]
259                   [% UNLESS ( singleBranchMode ) %]
260                     [% IF ( choose_branch ) %]
261                         <th>Pickup location</th>
262                     [% END %]
263                   [% END %]
264                 </tr>[% ELSE %]<tr><th colspan="5">Title</th></tr>[% END %]
265
266                 [% FOREACH bibitemloo IN bibitemloop %]
267                   <tr>
268                       [% IF ( bibitemloo.holdable ) %]
269                                     <td class="hold">
270                       <input class="reserve_mode" name="reserve_mode" type="hidden" value="single"/>
271                       <input class="single_bib" name="single_bib" type="hidden" value="[% bibitemloo.biblionumber %]"/>
272                         <span class="confirmjs_hold" title="[% bibitemloo.biblionumber %]"></span>
273                         <span class="confirm_nonjs">
274                           <input type="radio" class="confirmbox checkitem [% bibitemloo.checkitem_bib %]"
275                                  name="[% bibitemloo.checkitem_bib %]" checked="checked"
276                                  id="[% bibitemloo.checkitem_bib %]"
277                                  value="any" />
278                           <label class="confirm_label" for="[% bibitemloo.checkitem_bib %]">Next available copy</label>
279                         </span>
280                                         </td>
281                       [% ELSE %]
282                                       [% UNLESS ( none_available ) %]<td class="hold">&nbsp;</td>[% END %]
283                       [% END %]
284                     [% IF ( bibitemloo.holdable ) %]<td class="title">[% ELSE %]<td class="title" colspan="5">[% END %]
285                       <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% bibitemloo.biblionumber %]">[% bibitemloo.title |html %][% IF ( bibitemloo.subtitle ) %] [% FOREACH subtitl IN bibitemloo.subtitle %][% subtitl.subfield %][% END %][% END %]</a>
286                       [% IF ( bibitemloo.author ) %],  by [% bibitemloo.author %][% END %]
287
288                       [% UNLESS ( bibitemloo.holdable ) %]
289
290                         [% IF ( bibitemloo.already_reserved ) %]
291                           <div class="bibmessage">You have already requested this title.</div>
292                         [% ELSE %]
293                           [% UNLESS ( bibitemloo.bib_available ) %]
294                             <div class="bibmessage">No available items.</div>
295                           [% ELSE %]
296                             [% IF ( bibitemloo.already_patron_possession ) %]
297                                 <div class="bibmessage">This title cannot be requested because it's already in your possession.</div>
298                             [% ELSE %]
299                                 <div class="bibmessage">This title cannot be requested.</div>
300                             [% END %]
301                           [% END %]
302                         [% END %]
303
304
305                         [% END %]
306
307                     </td>
308                     [% IF ( bibitemloo.holdable ) %]
309             <!-- HOLDABLE -->
310                         [% UNLESS ( item_level_itypes ) %]
311                         <td class="itype">
312                             [% IF ( bibitemloo.imageurl ) %]<img src="[% bibitemloo.imageurl %]" alt="" />[% END %]
313                             [% bibitemloo.description %]
314                         </td>
315                         [% END %]
316                         [% IF showholds || showpriority %]
317                         <td class="priority">
318                         [% IF showpriority %] [% bibitemloo.rank %] [% END %]
319                         [% IF showholds && showpriority %] out of [% END %]
320                         [% IF showholds %] [% bibitemloo.reservecount %] [% END %]
321                         </td>
322                         [% END %]
323                 [% IF ( reserve_in_future ) %]
324                         <td class="reserve_date">
325               <input name="reserve_date_[% bibitemloo.biblionumber %]" id="from" size="10" class="datepickerfrom"/>
326               <script type="text/javascript">
327               //<![CDATA[
328               $("#reserve_date_[% bibitemloo.biblionumber %]").attr( 'readonly', 'readonly' );
329               //]]>
330               </script>
331       <p style="margin:.3em 2em;">
332       <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('reserve_date_[% bibitemloo.biblionumber %]').value='';return false;">Clear date</a></p>
333                 </td>[% END %]
334
335                     [% END %]
336         [% IF ( bibitemloo.holdable ) %]<td class="expiration_date">
337         <input name="expiration_date_[% bibitemloo.biblionumber %]" id="to" size="10" readonly="readonly" class="datepickerto" />
338       <p style="margin:.3em 2em;">
339       <a href="#" style="font-size:85%;text-decoration:none;" onclick="document.getElementById('expiration_date_[% bibitemloo.biblionumber %]').value='';return false;">Clear date</a></p>
340     </td>[% END %]
341
342                     [% IF ( bibitemloo.holdable ) %]
343                     <!-- HOLD ABLE -->
344                     [% IF ( OPACItemHolds ) %]
345                     <!-- ITEM HOLDS -->
346                                           <td class="place_on_type" style="display:none">
347                                             <ul>
348                                                 <li>
349                                                   [% UNLESS ( bibitemloo.holdable ) %]
350                                                     <input type="radio" name="reqtype_[% bibitemloo.biblionumber %]"
351                                                            id="reqany_[% bibitemloo.biblionumber %]"
352                                                            class="selectany"
353                                                            value="Any"
354                                                            disabled="disabled"
355                                                     />
356                                                   [% ELSE %]
357                                                     <input type="radio" name="reqtype_[% bibitemloo.biblionumber %]"
358                                                            id="reqany_[% bibitemloo.biblionumber %]"
359                                                            class="selectany"
360                                                            value="Any"
361                                                            checked="checked"
362                                                     />
363                                                   [% END %]
364                                                   <label for="reqany_[% bibitemloo.biblionumber %]">Next available copy</label>
365                                                 </li>
366                                                 <li>
367                                                   [% UNLESS ( bibitemloo.holdable ) %]
368                                                     <input type="radio" name="reqtype_[% bibitemloo.biblionumber %]"
369                                                            id="reqspecific_[% bibitemloo.biblionumber %]"
370                                                            class="selectspecific"
371                                                            disabled="disabled"
372                                                            value="Specific"
373                                                     />
374                                                   [% ELSE %]
375                                                     <input type="radio" name="reqtype_[% bibitemloo.biblionumber %]"
376                                                            id="reqspecific_[% bibitemloo.biblionumber %]"
377                                                            class="selectspecific"
378                                                            value="Specific"
379                                                     />
380                                                   [% END %]
381                                                   <label for="reqspecific_[% bibitemloo.biblionumber %]">A specific copy</label>
382                                                 </li>
383                                             </ul>
384                                           </td>
385                                         [% END %][% END %]
386
387                     [% UNLESS ( singleBranchMode ) %]
388                         [% IF ( bibitemloo.holdable ) %]
389                             [% IF ( choose_branch ) %]
390                                           <td class="branch">
391                          [% UNLESS ( bibitemloo.holdable ) %]
392                             <select name="branch" id="branch_[% bibitemloo.biblionumber %]" disabled="disabled">
393                               [% FOREACH branchloo IN bibitemloo.branchloop %]
394                                 [% IF ( branchloo.selected ) %]
395                                   <option value="[% branchloo.branchcode %]" selected="selected">[% branchloo.branchname %]</option>
396                                 [% ELSE %]
397                                   <option value="[% branchloo.branchcode %]">[% branchloo.branchname %]</option>
398                                 [% END %]
399                               [% END %]
400                           </select>
401                           [% ELSE %]
402                             <select name="branch" id="branch_[% bibitemloo.biblionumber %]">
403                               [% FOREACH branchloo IN bibitemloo.branchloop %]
404                                 [% IF ( branchloo.selected ) %]
405                                   <option value="[% branchloo.branchcode %]" selected="selected">[% branchloo.branchname %]</option>
406                                 [% ELSE %]
407                                   <option value="[% branchloo.branchcode %]">[% branchloo.branchname %]</option>
408                                 [% END %]
409                               [% END %]
410                             </select>
411                           [% END %]
412                        </td>
413                             [% END %]
414                         [% END %]
415                     [% END %]
416                   </tr>
417
418                   [% IF ( OPACItemHolds ) %]
419                   [% IF ( bibitemloo.holdable ) %]
420                     <tr class="copiesrow" id="copiesrow_[% bibitemloo.biblionumber %]">
421                       <td>&nbsp;</td>
422                       <td colspan="[% itemtable_colspan %]">
423                         <table>
424                           <caption>Select a specific copy:</caption>
425                           <tr>
426                             <th>Copy</th>
427                             [% IF ( item_level_itypes ) %]
428                               <th>Item type</th>
429                             [% END %]
430                             <th>Barcode</th>
431                             [% UNLESS ( singleBranchMode ) %]
432                               <th>Home library</th>
433                               <th>Last location</th>
434                             [% END %]
435                             <th>Call number</th>
436                             [% IF ( bibitemloo.itemdata_enumchron ) %]
437                               <th>Vol info</th>
438                             [% END %]
439                             <th>Information</th>
440                           </tr>
441
442                           [% FOREACH itemLoo IN bibitemloo.itemLoop %]
443                             <tr class="[% itemLoo.backgroundcolor %]">
444                               <td class="copy">
445                                 [% IF ( itemLoo.available ) %]
446                                   <input type="radio" class="checkitem checkitem_[% bibitemloo.biblionumber %]" name="checkitem_[% bibitemloo.biblionumber %]"
447                                          value="[% itemLoo.itemnumber %]" />
448                                 [% ELSE %]
449                                   <input disabled="disabled" type="radio" class="checkitem" name="checkitem" value="[% itemLoo.itemnumber %]" />
450                                   <img src="/opac-tmpl/lib/famfamfam/silk/cross.png" alt="Cannot be put on hold" title="Cannot be put on hold" />
451                                 [% END %] [% IF ( itemLoo.copynumber ) %][% itemLoo.copynumber %][% END %]
452                               </td>
453                               [% IF ( item_level_itypes ) %]
454                                 <td class="itype">
455                                   [% UNLESS ( noItemTypeImages ) %]
456                                   [% IF ( itemLoo.imageurl ) %]<img src="[% itemLoo.imageurl %]" alt="" />[% END %]
457                                   [% END %]
458                                                                 [% itemLoo.description %]
459                                 </td>
460                               [% END %]
461                               <td class="barcode">[% itemLoo.barcode %]</td>
462                               [% UNLESS ( singleBranchMode ) %]
463                                 <td class="homebranch">[% itemLoo.homeBranchName %]</td>
464                                 <td class="holdingbranch">[% itemLoo.holdingBranchName %]</td>
465                               [% END %]
466                               <td class="call_no">[% itemLoo.callNumber %]</td>
467                               [% IF ( itemLoo.itemdata_enumchron ) %]<!-- test -->
468                                 <td class="vol_info">[% itemLoo.enumchron %]</td>
469                               [% END %]
470                               <td class="information">
471                                 [% IF ( itemLoo.dateDue ) %]
472                                   <span class="checkedout">Due [% itemLoo.dateDue %]</span>
473                                 [% ELSIF ( itemLoo.transfertwhen ) %]
474                                   <span class="intransit">In transit from [% itemLoo.transfertfrom %],
475                                     to [% itemLoo.transfertto %], since [% itemLoo.transfertwhen %]</span>
476                                 [% END %]
477                                 [% IF ( itemLoo.message ) %]
478                                   <span class="lost">Unavailable (lost or missing)</span>
479                                 [% END %]
480                                 [% IF ( itemLoo.notforloan ) %]
481                                   <span class="notforloan">Not for loan ([% itemLoo.notforloanvalue %])</span>
482                                 [% END %]
483                                 [% IF ( itemLoo.reservedate ) %]
484                                   <span class="waiting">[% IF ( itemLoo.waitingdate ) %]Waiting[% ELSE %]On hold[% END %] for patron
485                                     [% IF ( itemLoo.waitingdate ) %]at[% ELSE %]expected at[% END %] [% itemLoo.ExpectedAtLibrary %]
486                                     since
487                                     [% IF ( itemLoo.waitingdate ) %][% itemLoo.waitingdate %][% ELSE %][% IF ( itemLoo.reservedate ) %][% itemLoo.reservedate %][% END %][% END %].
488                                   </span>
489                                 [% ELSE %]
490                                   <span class="notonhold">Not on hold</span>
491                                 [% END %]&nbsp;
492                               </td>
493                             </tr>
494                           [% END %]
495                         </table>
496                       </td>
497                     </tr>
498                   [% END %]<!-- bib_available -->
499                   [% END %]<!-- OPACItemHolds -->
500                 [% END %]
501               </table><!-- bibitemloop -->
502               [% END %] <!-- if message -->
503             </div><!-- bigloop -->
504
505             [% UNLESS ( message ) %]
506             [% UNLESS ( none_available ) %]
507             <input type="submit" value="Place Hold" class="placehold" />
508             [% END %]
509             [% END %]
510
511             </form>
512
513         </div><!-- holds -->
514       </div><!-- yui-g -->
515     </div><!-- bd    -->
516   </div><!-- doc3  -->
517
518 <div><!-- The following include seems to have an extra "/div" in it... -->
519 [% INCLUDE 'opac-bottom.inc' %]