]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/templates-bootstrap/opac/myopac/holds.tt2
LP#1778972: (follow-up) use OILSWebTemplatePath to enable/disable the bootstrap OPAC
[Evergreen.git] / Open-ILS / src / templates-bootstrap / opac / myopac / holds.tt2
1 [%  PROCESS "opac/parts/header.tt2";
2     PROCESS "opac/parts/misc_util.tt2";
3     PROCESS "opac/parts/hold_status.tt2";
4     PROCESS "opac/parts/myopac/column_sort_support.tt2";
5     WRAPPER "opac/parts/myopac/base.tt2";
6     myopac_page = "holds";
7     limit = (ctx.holds_limit.defined) ? ctx.holds_limit : 0;
8     offset = (ctx.holds_offset.defined) ? ctx.holds_offset : 0;
9     count = (ctx.holds_ids.size.defined) ? ctx.holds_ids.size : 0; 
10 %]
11 <h3 class="sr-only">[% l('My Holds') %]</h3>
12 <div id='myopac_holds_div'>
13     <div class="mb-3">
14         <ul class="nav nav-pills nav-fill">
15         <li class="nav-item m-2">
16             <a href='#' class="nav-link active">[% l("Items on Hold") %]</a>
17         </li>
18         [% IF ebook_api.enabled == 'true' %]
19         <li class="nav-item m-2">
20             <a href='[% mkurl('ebook_holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items on Hold") %]</a>
21         </li>
22         <li class="nav-item m-2">
23             <a href='[% mkurl('ebook_holds_ready', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items Ready for Checkout") %]</a>
24         </li>
25         [% END %]
26         <li class="nav-item m-2">
27             <a href='[% mkurl('hold_history', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Holds History") %]</a>
28         </li>
29         </ul>
30     </div>
31         <div class="my-4">
32     <div class="header_middle">
33         <span id="acct_holds_header" style="float:left;">
34             [%  IF CGI.param("available");
35                     l("Items Ready for Pickup");
36                 ELSE;
37                     l("Current Items on Hold");
38                 END
39             %]
40         </span>
41     </div>
42     <div class="clear-both"></div>
43     <div id='holds_main'>
44     <form method="post">
45             <div class="row">
46                 <span class="col-md-11 my-2">
47                         <select class="form-control" name="action" id="acct_holds_actions" 
48                       title="[% l('Select your action for the selected holds') %]">
49                         <option id='myopac_holds_actions_none' value=''>
50                         -- [% l("Actions for selected holds") %] --
51                         </option>
52                         <option value='suspend'>[% l("Suspend") %]</option>
53                         <option value='activate'>[% l("Activate") %]</option>
54                         <!-- XXX maybe later <option value='thaw_date'>[% l("Set Active Date") %]</option> -->
55                         <option value='cancel'>[% l("Cancel") %]</option>
56                     </select>
57                 </span>
58                 <span class="col-md-1 my-2">
59                     <input type="submit" value="[% l('Go') %]"
60                         title="[% l('Go') %]" class="btn btn-confirm" />
61                 </span>
62           </div>
63
64           <div class="row">
65             <div class="col-3 text-left">
66                 <a href='[% mkurl('holds', {limit => limit,offset => (offset - limit)}) %]'
67                 [% IF offset <= 0 %] class='invisible' [% END %]><span class="np_nav_link classic_link btn btn-outline-primary">&#9668;[% l('Previous') %]</span></a>
68                     [% IF offset > 0 || count > limit; curpage = 0; WHILE curpage * limit < count; IF curpage * limit == offset; %]
69                         [% curpage + 1 %]
70                     [%- ELSE %]
71                 <a href='[% mkurl('holds', {limit => limit, offset => (curpage * limit)}) %]' class="np_nav_link classic_link btn btn-outline-primary">[% curpage + 1 %]</a>
72                     [%- END; curpage = curpage + 1; END; END %]
73             </div>
74             <div class="col-6 text-center">
75                 <span style="padding-left:5px;" class='error'>
76                     [%  IF ctx.hold_suspend_post_capture; l('One or more holds could not be suspended because the item is at (or en route to) the pickup library.'); END; %]
77                 </span>
78             
79                <span>
80                     [% IF CGI.param("available") -%]
81                     <a href="[% mkurl('holds', {}, ['limit','offset','available']) %]">[% l('Show all holds') %]</a> |
82                     <strong>[% l("Show only available holds") %]</strong>
83                     [% ELSE -%]
84                     <strong>[% l("Show all holds") %]</strong> |
85                     <a href="[% mkurl('holds',{available => 1},['limit','offset']) %]">[% l("Show only available holds") %]</a>
86                     [% END -%]
87                </span>
88                 <a href="#">
89                     <img alt="[% l('Holds Help') %]" title="[% l('Actions for selected holds') %]" src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" />
90                 </a>
91             </div>
92
93             <div class="col-3 text-right">  
94                 <a href='[% mkurl('holds', {limit => limit, offset => (offset + limit)}) %]'
95                [% IF count <= limit + offset %] class='invisible' [% END %] ><span class="np_nav_link classic_link btn btn-outline-primary">[% l('Next') %]&#9658;</span></a>
96             </div>
97           </div>
98                     
99         [% IF ctx.holds.size && ctx.holds.size < 1 %]
100         <div class="warning_box">[% l('No holds found.') %]</div>
101         [% ELSE %]
102         <table title="[% l('Items on Hold') %]"
103         class="table table-hover miniTable activeHoldstable w-100 my-3">
104             <thead>
105             <tr>
106                 <th class="checkbox_column"> 
107                     <input type="checkbox" title="[% l('Select All Holds') %]"
108                       onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'hold_id' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
109                 </th>
110                 <th>[% sort_head("sort_title", l('Title')) %]</th>
111                 <th>[% sort_head("author", l('Author')) %]</th>
112                 <th>[% sort_head("format", l('Format')) %]</th>
113                 <th>[% l('Pickup Location') %]</th>
114                 <th>[% l('Cancel if not filled by') %]</th>
115                 <th>[% l('Status') %]</th>
116                 <th>[% l('Notes') %]</th>
117             </tr>
118             </thead>
119             <tbody id="holds_temp_parent">
120
121                 [%# Copy the ctx.holds into a local array, then add a SORT field
122                     that contains the value to sort on.  Since we need the item attrs,
123                     invoke it and save the result in ATTRS.
124                 %]
125                 [% 
126                 hold_items = ctx.holds;
127
128                 sort_field = CGI.param('sort');
129
130                 FOR hold IN hold_items;
131                     hold.ATTRS = {marc_xml => hold.marc_xml};
132                     PROCESS get_marc_attrs args=hold.ATTRS;
133
134                     SWITCH sort_field;
135
136                        CASE "sort_title";
137                           hold.SORTING = hold.ATTRS.sort_title;
138
139                        CASE "author";
140                           hold.SORTING = hold.ATTRS.author;
141
142                        CASE "format";
143                           hold.SORTING = hold.ATTRS.format_label;
144                        
145                        CASE;
146                           sort_field = "";
147                     END; # SWITCH
148                 END; #FOR hold
149
150                 IF (sort_field != "sort_title");
151                    deemphasize_class = "";
152                 ELSE;
153                    deemphasize_class = " class=\"sort_deemphasize\"";
154                 END;
155
156                 # Apply sorting to hold_items
157                 IF (sort_field != "");
158                     hold_items = hold_items.sort("SORTING");
159                     IF (CGI.param("sort_type") == "desc");
160                         hold_items = hold_items.reverse;
161                     END;
162
163                     # Shorten the hold_items list per offset/limit/count 
164                     hi = offset + limit - 1;
165                     hi = hi > hold_items.max ? hold_items.max : hi;
166
167                     hold_items = hold_items.slice(offset, hi);
168                 END;
169
170                 # hold_items list is now sorted.  Traverse and dump the information.
171                 cnt = 0;
172                 FOR hold IN hold_items;
173                     ahr = hold.hold.hold;
174                     cnt = cnt + 1;
175                      %]
176                 <tr name="acct_holds_temp"
177                     class="[% ahr.frozen == 't' ? ' inactive-hold' : '' %]">
178                     <td class="checkbox_column">
179
180                     <span class="sr-only">Hold Number [%  cnt; %]</span>
181                         <input type="checkbox" name="hold_id" value="[% ahr.id %]" 
182                             [% html_text_attr('title', l('Select hold [_1]', attrs.title)) %]/>
183                     </td>
184                     <td>
185                     <span class="sr-only">Title</span>
186                         <div>
187                             [% title = hold.ATTRS.title;
188                             IF ahr.hold_type == 'P';
189                                 title = l('[_1] ([_2])', title, hold.hold.part.label);
190                             END; %]
191
192                             <a href="[% mkurl(ctx.opac_root _ '/record/' _ 
193                                 hold.hold.bre_id, {}, 1) %]"
194                                 name="[% l('Catalog record') %]"><span[%- deemphasize_class -%]>
195                                 [%- title.substr(0,hold.ATTRS.nonfiling_characters) | html %]</span>
196                                 [%- title.substr(hold.ATTRS.nonfiling_characters)   | html %]</a>
197                         </div>
198                     </td>
199                     <td>
200                     <span class="sr-only">Author</span>
201                         <div>
202                             <a href="[% mkurl(ctx.opac_root _ '/results',
203                                 {qtype => 'author', query => hold.ATTRS.author.replace('[,\.:;]', '')},
204                                 1
205                             ) %]">[% hold.ATTRS.author | html %]</a>
206                         </div>
207                     </td>
208                     <td>
209                     <span class="sr-only">Format</span>
210                         <div class="format_icon">
211                           [% 
212                             formats = hold.ATTRS.all_formats;
213                             IF ahr.hold_type == 'M';
214                               # only show selected formats for metarecords
215                               formats = [];
216                               FOR ccvm IN hold.metarecord_selected_filters.icons;
217                                 NEXT IF ccvm.opac_visible == 'f';
218                                 format = {};
219                                 format.label = ccvm.search_label || ccvm.value;
220                                 format.icon = PROCESS get_ccvm_icon ccvm=ccvm;
221                                 formats.push(format);
222                               END;
223                             END;
224                             FOR format IN formats 
225                           %]
226                           <span class="sr-only">[% format.label | html %]</span>
227                             <img title="[% format.label | html %]" 
228                               alt="[% format.label | html %]" src="[% format.icon %][% ctx.cache_key %]" />
229                             [% END %]
230                         </div>
231                     </td>
232                     <td>
233                     <span class="sr-only">Pickup Location</span>
234                         [% ctx.get_aou(ahr.pickup_lib).name | html %]
235                     </td>
236                     <td>
237                     <span class="sr-only">Cancel if not filled by</span>
238                         [% IF ahr.expire_time;
239                             date.format(ctx.parse_datetime(ahr.expire_time), DATE_FORMAT);
240                         END %]
241                     </td>
242                     <td>
243                     <span class="sr-only">Status</span>
244                         <div name="acct_holds_status">
245                             [% PROCESS get_hold_status hold=hold; %]
246                         </div>
247                     </td>
248                     <td class="hold_notes">
249                     <span class="sr-only">Notes</span>
250                     [%- FOREACH pubnote IN ahr.notes;
251                         IF pubnote.pub == 't';
252                     %]
253                         <div class="hold_note">
254                             <span class="hold_note_title">[% pubnote.title | html %]</span>
255                             <br />
256                             <span class="hold_note_body">[% pubnote.body | html %]</span>
257                         </div>
258                     [%- END; END; %]
259                     </td>
260                     <td class="fullRow">
261                         <a class="btn btn-confirm btn-sm" href="[% mkurl(ctx.opac_root _ '/myopac/holds/edit', {hid => ahr.id}) %]"
262                             [% html_text_attr('title', l('Edit hold for item [_1]', attrs.title)) %]>
263                             [% l('Edit') %]
264                         </a>
265                     </td>
266                 </tr>
267                 [% END %]
268             </tbody>
269         </table>
270         </div>
271         [% END %]
272         </form>
273     </div></div>
274 </div>
275 [% END %]