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