98ee66fcbb355d37c804ac00c4dfa88cff0f08c5
[srvgit] / koha-tmpl / intranet-tmpl / prog / en / modules / circ / pendingreserves.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Koha %]
4 [% USE KohaDates %]
5 [% USE TablesSettings %]
6 [% USE AuthorisedValues %]
7 [%- USE Branches -%]
8 [%- USE ItemTypes -%]
9 [% SET footerjs = 1 %]
10 [% INCLUDE 'doc-head-open.inc' %]
11 <title>Holds to pull &rsaquo; Circulation &rsaquo; Koha</title>
12 [% INCLUDE 'doc-head-close.inc' %]
13 </head>
14
15 <body id="circ_pendingreserves" class="circ">
16 [% WRAPPER 'header.inc' %]
17     [% INCLUDE 'circ-search.inc' %]
18 [% END %]
19
20
21 [% WRAPPER 'sub-header.inc' %]
22 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
23     <ol>
24         <li>
25             <a href="/cgi-bin/koha/mainpage.pl">Home</a>
26         </li>
27         <li>
28             <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a>
29         </li>
30         <li>
31             <a href="#" aria-current="page">
32                 Holds to pull
33             </a>
34         </li>
35     </ol>
36 </nav>
37 [% END %]
38
39 <div class="main container-fluid">
40     <div class="row">
41         <div class="col-sm-10 col-sm-push-2">
42             <main>
43
44         [% FOR m IN messages %]
45             <div class="dialog [% m.type | html %]">
46                 [% SWITCH m.code %]
47                 [% CASE 'letter_enqueued' %]
48                     <span>The notice has been correctly enqueued.</span>
49                 [% CASE 'no_email_address' %]
50                     <span>The patron does not have an email address defined.</span>
51                 [% CASE 'no_template_notice' %]
52                     <span>There is no notice template with a code 'CANCEL_HOLD_ON_LOST' defined in your system.</span>
53                 [% CASE 'hold_cancelled' %]
54                     <span>The hold has been correctly cancelled.</span>
55                 [% CASE 'hold_placed_at_biblio_level' %]
56                     <span>The hold has been placed on biblio level. It is not possible to determine the item to mark as lost.</span>
57                 [% CASE %]
58                     [% m.code | html %]
59                 [% END %]
60             </div>
61         [% END %]
62
63 <h1>Holds to pull placed between [% from | $KohaDates %] and [% to | $KohaDates %]</h1>
64 <h3>Reported on [% todaysdate | $KohaDates %]</h3>
65 <p>The following holds have not been filled. Please retrieve them and check them in.</p>
66 <div id="searchresults">
67     [% IF holds_info %]
68     <table id="holdst">
69     <thead>
70         <tr>
71         <th>Pull this many items</th>
72         <th>Items available</th>
73         <th>Patrons with holds</th>
74         <th>First patron</th>
75         <th class="anti-the">Title</th>
76         <th class="string-sort">Libraries</th>
77         <th>Available barcodes</th>
78         <th>Available call numbers</th>
79         <th>Available copy numbers</th>
80         <th>Available enumeration</th>
81         <th class="string-sort">Available item types</th>
82         <th class="string-sort">Available locations</th>
83         <th>Earliest hold date</th>
84         <th>Hold notes</th>
85         <th class="string-sort">Pickup location</th>
86         <th>Action</th>
87         </tr>
88     </thead>
89     <tbody>
90         [% FOREACH hold_info IN holds_info %]
91         <tr>
92         [% SET patron = hold_info.patron %]
93         [% SET item = hold_info.item %]
94         [% SET hold = hold_info.hold %]
95         [% IF patron %]
96             [% SET biblio = hold_info.biblio %]
97             <td><p><strong>[% hold_info.pull_count | html %]</strong></p></td>
98             <td>[% hold_info.items_count | html %]</td>
99             <td>[% hold_info.patrons_count | html %]</td>
100             <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a></td>
101             <td>
102                 <p>
103                     [% INCLUDE 'biblio-title.inc' biblio=biblio link = 1 %]
104                 </p>
105                 [% IF ( biblio.author ) %]<p> by [% biblio.author | html %]</p>[% END %]
106                 [% IF ( biblio.biblioitem.editionstatement ) %]<p>[% biblio.biblioitem.editionstatement | html %]</p>[% END %]
107                 [% IF ( Koha.Preference('marcflavour') == 'MARC21' ) %]
108                     [% IF ( biblio.copyrightdate ) %]<p>[% biblio.copyrightdate | html %]</p>[% END %]
109                 [% ELSE %]
110                     [% IF ( biblio.biblioitem.publicationyear ) %]<p>[% biblio.biblioitem.publicationyear | html %]</p>[% END %]
111                 [% END %]
112             </td>
113         [% ELSE %]
114             <td>"</td>
115             <td>"</td>
116             <td>"</td>
117             <td>"</td>
118             <td>"</td>
119         [% END %]
120         <td>
121             [% IF ( hold_info.holdingbranches.size ) %]
122             <ul>
123                 [% FOREACH holdingbranch IN hold_info.holdingbranches %]
124                     <li>[% Branches.GetName ( holdingbranch ) | html %]</li>
125                 [% END %]
126             </ul>
127             [% END %]
128         </td>
129         <td>
130             [% IF ( hold_info.barcodes.size ) %]
131                 [% SET barcode = hold_info.barcodes.first %]
132                 [% IF ( hold_info.item ) %]
133                     <span>Only [% barcode | html %]</span>
134                 [% ELSE %]
135                     <span>[% barcode | html %] or
136                         [% IF hold_info.item_group %]
137                             any available from item group <em>[% hold_info.item_group.description | html %]</em>.
138                         [% ELSE %]
139                             any available.
140                         [% END %]
141                     </span>
142                 [% END %]
143             [% ELSIF hold_info.item_group %]
144                 Any available from item group <em>[% hold_info.item_group.description | html %]</em>.
145             [% END %]
146         </td>
147         <td>
148             [% IF ( hold_info.callnumbers.size ) %]
149                 <ul>
150                     [% FOREACH callnumber IN hold_info.callnumbers %]
151                         <li>
152                             [% callnumber | html %]
153                         </li>
154                     [% END %]
155                 </ul>
156             [% END %]
157         </td>
158         <td>
159             [% IF ( hold_info.copynumbers.size ) %]
160                 <ul>
161                     [% FOREACH copyno IN hold_info.copynumbers %]
162                         <li>
163                             [% copyno | html %]
164                         </li>
165                     [% END %]
166                 </ul>
167             [% END %]
168         </td>
169         <td>
170             [% IF ( hold_info.enumchrons.size ) %]
171                 <ul>
172                     [% FOREACH enumchron IN hold_info.enumchrons %]
173                         <li>
174                             [% enumchron | html %]
175                         </li>
176                     [% END %]
177                 </ul>
178             [% END %]
179         </td>
180         <td>
181             <ul>
182             [% FOREACH type IN hold_info.itemtypes %]
183                 <li>[% ItemTypes.GetDescription( type ) | html %]</li>
184             [% END %]
185             </ul>
186         </td>
187         <td>
188             <ul>
189             [% FOREACH loc IN hold_info.locations %]
190                 <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => loc ) | html %]</li>
191             [% END %]
192             </ul>
193         </td>
194         <td data-order="[% hold.reservedate | html %]">
195             [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %]
196         </td>
197         <td>[% hold.reservenotes | html %]</td>
198         <td>
199             [% Branches.GetName ( hold.branchcode ) | html %]
200         </td>
201         <td>
202             <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
203                 <input type="hidden" name="op" value="cancel_reserve" />
204                 <input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
205
206                 [% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %]
207                 [% IF hold_cancellation.count %]
208                     <div class="form-group">
209                         <label for="cancellation-reason">Cancellation reason:</label>
210                         <select class="cancellation-reason" name="cancellation-reason" id="cancellation-reason">
211                             <option value="">No reason given</option>
212                             [% FOREACH reason IN hold_cancellation %]
213                                 <option value="[% reason.authorised_value | html %]">[% reason.lib | html %]</option>
214                             [% END %]
215                         </select>
216                     </div>
217                 [% END %]
218
219                 [% IF item.holdingbranch != item.homebranch %]
220                     <input class="btn btn-default" type="submit" value="Cancel hold and return to : [% Branches.GetName( item.homebranch ) | html %]" />
221                 [% ELSE %]
222                     <input class="btn btn-default" type="submit" value="Cancel hold" />
223                 [% END %]
224             </form>
225
226         [% IF Koha.Preference('CanMarkHoldsToPullAsLost') != 'do_not_allow' %]
227             [% IF hold.itemnumber %]
228                 <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
229                     <input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
230                     [% IF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow' %]
231                         <input type="hidden" name="op" value="mark_as_lost" />
232                         <input type="submit" class="btn btn-primary" value="Mark item as lost" />
233                     [% ELSIF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow_and_notify' %]
234                         <input type="hidden" name="op" value="mark_as_lost_and_notify" />
235                         <input type="submit" class="btn btn-primary" value="Mark lost and notify patron" />
236                     [% END %]
237                 </form>
238             [% ELSE %]
239                 <span>Biblio level hold.</span>
240             [% END %]
241         [% END %]
242             </td>
243         </tr>
244         [% END %]
245     </tbody>
246     <tfoot>
247         <tr>
248         <td><input type="text" class="filter" data-column_num="0" placeholder="Pull this many items" style="width:95%"/></td>
249         <td><input type="text" class="filter" data-column_num="1" placeholder="Items available" style="width:95%"/></td>
250         <td><input type="text" class="filter" data-column_num="2" placeholder="Patron holds" style="width:95%"/></td>
251         <td><input type="text" class="filter" data-column_num="3" placeholder="Patron name" style="width:95%"/></td>
252         <td><input type="text" class="filter" data-column_num="4" placeholder="Title" style="width:95%"/></td>
253         <td id="homebranchfilter"></td>
254         <td></td>
255         <td><input type="text" class="filter" data-column_num="7" placeholder="Call number" style="width:95%"/></td>
256         <td><input type="text" class="filter" data-column_num="8" placeholder="Available copy" style="width:95%"/></td>
257         <td><input type="text" class="filter" data-column_num="9" placeholder="Available enumeration" style="width:95%"/></td>
258         <td id="itemtype-filter"></td>
259         <td id="locationfilter"></td>
260         <td></td>
261         <td></td>
262         <td id="pickup-location"></td>
263         <td></td>
264         </tr>
265     </tfoot>
266     </table>
267     [% ELSE %]
268         <strong>No items found.</strong>
269     [% END %]
270 </div>
271
272
273             </main>
274         </div> <!-- /.col-sm-10.col-sm-push-2 -->
275
276         <div class="col-sm-2 col-sm-pull-10">
277             <aside>
278
279 <div id="filters">
280
281 <form action="/cgi-bin/koha/circ/pendingreserves.pl" method="post" >
282 <fieldset class="brief">
283 <h4>Refine results</h4>
284 <ol>
285 <li>
286 <label for="from">
287     Start date:
288 </label>
289 <input type="text" size="10" id="from" name="from" value="[% from | html %]" class="flatpickr" data-date_to="to" />
290 </li>
291 <li><label for="to">
292     End date:
293 </label>
294 <input type="text" size="10" id="to" name="to" value="[% to | html %]" class="flatpickr" />
295 </li>
296 </ol>
297
298 [% IF ( HoldsToPullEndDate ) %]
299     <p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to [% HoldsToPullEndDate | html %] days ahead. Set other date ranges as needed.)</em></p>
300 [% ELSE %]
301     <p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to today. Set other date ranges as needed.)</em></p>
302 [% END %]
303 </fieldset>
304
305     <fieldset class="action">
306         <input type="submit" name="run_report" value="Submit" class="btn btn-primary" />
307     </fieldset>
308 </form>
309
310 </div>
311             </aside>
312         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
313      </div> <!-- /.row -->
314
315 [% MACRO jsinclude BLOCK %]
316     [% INCLUDE 'calendar.inc' %]
317     [% INCLUDE 'datatables.inc' %]
318     [% INCLUDE 'columns_settings.inc' %]
319     <script>
320         $(document).ready(function() {
321           var table_settings = [% TablesSettings.GetTableSettings('circ', 'holds', 'holds-to-pull', 'json') | $raw %];
322           var holdst = KohaTable("holdst", {
323             "sPaginationType": "full_numbers"
324           }, table_settings);
325           holdst.fnAddFilters("filter");
326           [%# add separateData function to cleanse jQuery select lists by breaking apart strings glued with BR tags and then de-duplicating any repeated library codes %]
327           function separateData ( ColumnData ){
328             var cD = ColumnData;
329             var new_array = new Array();
330             for ( j=0 ; j<cD.length ; j++ ) {
331                 var split_array = cD[j].split(/\n/gi);
332                 for ( k=0 ; k<split_array.length ; k++ ){
333                     var str = $.trim(split_array[k].replace(/[\n\r]/g, ''));
334                     if ($.inArray(str, new_array) == -1 && str.length > 0 ) {
335                         new_array.push(str);
336                     }
337                 }
338             }
339             new_array.sort();
340             return new_array;
341           }
342           [%# add SeparateData function into createSelect function, so that it does the createSelect on clean data %]
343           function createSelect( data ) {
344               data = separateData(data);
345               var r='<select style="width:99%"><option value="">' + _("None") + '</option>', i, len=data.length;
346               var regex = /(<([^>]+)>)/ig; // Remove html tags
347               for ( i=0 ; i<len ; i++ ) {
348                   var cell_val = data[i].replace(regex, '');
349                   if ( cell_val.length < 1 ) continue;
350                   r += '<option value="'+cell_val+'">'+cell_val+'</option>';
351               }
352               return r+'</select>';
353           }
354           $("#homebranchfilter").each( function () {
355               $(this).html( createSelect( holdst.fnGetColumnData(5) ) );
356               $('select', this).change( function () {
357                   holdst.fnFilter( $(this).val(), 5 );
358               });
359           });
360           $("#itemtype-filter").each( function () {
361               $(this).html( createSelect( holdst.fnGetColumnData(10) ) );
362               $('select', this).change( function () {
363                   holdst.fnFilter( $(this).val(), 10 );
364               });
365           });
366           $("#locationfilter").each( function () {
367               $(this).html( createSelect( holdst.fnGetColumnData(11) ) );
368               $('select', this).change( function () {
369                   holdst.fnFilter( $(this).val(), 11 );
370               });
371           });
372           $("#pickup-location").each( function () {
373               $(this).html( createSelect( holdst.fnGetColumnData(14) ) );
374               $('select', this).change( function () {
375                   holdst.fnFilter( $(this).val(), 14 );
376               });
377           });
378         });
379     </script>
380 [% END %]
381
382 [% INCLUDE 'intranet-bottom.inc' %]