5 [% USE TablesSettings %]
6 [% USE AuthorisedValues %]
10 [% INCLUDE 'doc-head-open.inc' %]
11 <title>Holds to pull › Circulation › Koha</title>
12 [% INCLUDE 'doc-head-close.inc' %]
15 <body id="circ_pendingreserves" class="circ">
16 [% WRAPPER 'header.inc' %]
17 [% INCLUDE 'circ-search.inc' %]
21 [% WRAPPER 'sub-header.inc' %]
22 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
25 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
28 <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a>
31 <a href="#" aria-current="page">
39 <div class="main container-fluid">
41 <div class="col-sm-10 col-sm-push-2">
44 [% FOR m IN messages %]
45 <div class="dialog [% m.type | html %]">
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>
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">
71 <th>Pull this many items</th>
72 <th>Items available</th>
73 <th>Patrons with holds</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 class="string-sort">Available collections</th>
84 <th>Earliest hold date</th>
86 <th class="string-sort">Pickup location</th>
91 [% FOREACH hold_info IN holds_info %]
93 [% SET patron = hold_info.patron %]
94 [% SET item = hold_info.item %]
95 [% SET hold = hold_info.hold %]
97 [% SET biblio = hold_info.biblio %]
98 <td><p><strong>[% hold_info.pull_count | html %]</strong></p></td>
99 <td>[% hold_info.items_count | html %]</td>
100 <td>[% hold_info.patrons_count | html %]</td>
101 <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a></td>
104 [% INCLUDE 'biblio-title.inc' biblio=biblio link = 1 %]
106 [% IF ( biblio.author ) %]<p> by [% biblio.author | html %]</p>[% END %]
107 [% IF ( biblio.biblioitem.editionstatement ) %]<p>[% biblio.biblioitem.editionstatement | html %]</p>[% END %]
108 [% IF ( Koha.Preference('marcflavour') == 'MARC21' ) %]
109 [% IF ( biblio.copyrightdate ) %]<p>[% biblio.copyrightdate | html %]</p>[% END %]
111 [% IF ( biblio.biblioitem.publicationyear ) %]<p>[% biblio.biblioitem.publicationyear | html %]</p>[% END %]
122 [% IF ( hold_info.holdingbranches.size ) %]
124 [% FOREACH holdingbranch IN hold_info.holdingbranches %]
125 <li>[% Branches.GetName ( holdingbranch ) | html %]</li>
131 [% IF ( hold_info.barcodes.size ) %]
132 [% SET barcode = hold_info.barcodes.first %]
133 [% IF ( hold_info.item ) %]
134 <span>Only [% barcode | html %]</span>
136 <span>[% barcode | html %] or
137 [% IF hold_info.item_group %]
138 any available from item group <em>[% hold_info.item_group.description | html %]</em>.
144 [% ELSIF hold_info.item_group %]
145 Any available from item group <em>[% hold_info.item_group.description | html %]</em>.
149 [% IF ( hold_info.callnumbers.size ) %]
151 [% FOREACH callnumber IN hold_info.callnumbers %]
153 [% callnumber | html %]
160 [% IF ( hold_info.copynumbers.size ) %]
162 [% FOREACH copyno IN hold_info.copynumbers %]
171 [% IF ( hold_info.enumchrons.size ) %]
173 [% FOREACH enumchron IN hold_info.enumchrons %]
175 [% enumchron | html %]
183 [% FOREACH type IN hold_info.itemtypes %]
184 <li>[% ItemTypes.GetDescription( type ) | html %]</li>
190 [% FOREACH loc IN hold_info.locations %]
191 <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => loc ) | html %]</li>
197 [% FOREACH ccode IN hold_info.collections %]
198 <li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => ccode ) | html %]</li>
202 <td data-order="[% hold.reservedate | html %]">
203 [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %]
205 <td>[% hold.reservenotes | html %]</td>
207 [% Branches.GetName ( hold.branchcode ) | html %]
210 <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
211 <input type="hidden" name="op" value="cancel_reserve" />
212 <input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
214 [% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %]
215 [% IF hold_cancellation.count %]
216 <div class="form-group">
217 <label for="cancellation-reason">Cancellation reason:</label>
218 <select class="cancellation-reason" name="cancellation-reason" id="cancellation-reason">
219 <option value="">No reason given</option>
220 [% FOREACH reason IN hold_cancellation %]
221 <option value="[% reason.authorised_value | html %]">[% reason.lib | html %]</option>
227 [% IF item.holdingbranch != item.homebranch %]
228 <input class="btn btn-default" type="submit" value="Cancel hold and return to : [% Branches.GetName( item.homebranch ) | html %]" />
230 <input class="btn btn-default" type="submit" value="Cancel hold" />
234 [% IF Koha.Preference('CanMarkHoldsToPullAsLost') != 'do_not_allow' %]
235 [% IF hold.itemnumber %]
236 <form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
237 <input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
238 [% IF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow' %]
239 <input type="hidden" name="op" value="mark_as_lost" />
240 <input type="submit" class="btn btn-primary" value="Mark item as lost" />
241 [% ELSIF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow_and_notify' %]
242 <input type="hidden" name="op" value="mark_as_lost_and_notify" />
243 <input type="submit" class="btn btn-primary" value="Mark lost and notify patron" />
247 <span>Biblio level hold.</span>
256 <td><input type="text" class="filter" data-column_num="0" placeholder="Pull this many items" style="width:95%"/></td>
257 <td><input type="text" class="filter" data-column_num="1" placeholder="Items available" style="width:95%"/></td>
258 <td><input type="text" class="filter" data-column_num="2" placeholder="Patron holds" style="width:95%"/></td>
259 <td><input type="text" class="filter" data-column_num="3" placeholder="Patron name" style="width:95%"/></td>
260 <td><input type="text" class="filter" data-column_num="4" placeholder="Title" style="width:95%"/></td>
261 <td id="homebranchfilter"></td>
263 <td><input type="text" class="filter" data-column_num="7" placeholder="Call number" style="width:95%"/></td>
264 <td><input type="text" class="filter" data-column_num="8" placeholder="Available copy" style="width:95%"/></td>
265 <td><input type="text" class="filter" data-column_num="9" placeholder="Available enumeration" style="width:95%"/></td>
266 <td id="itemtype-filter"></td>
267 <td id="locationfilter"></td>
271 <td id="pickup-location"></td>
277 <strong>No items found.</strong>
283 </div> <!-- /.col-sm-10.col-sm-push-2 -->
285 <div class="col-sm-2 col-sm-pull-10">
290 <form action="/cgi-bin/koha/circ/pendingreserves.pl" method="post" >
291 <fieldset class="brief">
292 <h4>Refine results</h4>
298 <input type="text" size="10" id="from" name="from" value="[% from | html %]" class="flatpickr" data-date_to="to" />
303 <input type="text" size="10" id="to" name="to" value="[% to | html %]" class="flatpickr" />
307 [% IF ( HoldsToPullEndDate ) %]
308 <p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to [% HoldsToPullEndDate | html %] days ahead. Set other date ranges as needed.)</em></p>
310 <p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to today. Set other date ranges as needed.)</em></p>
314 <fieldset class="action">
315 <input type="submit" name="run_report" value="Submit" class="btn btn-primary" />
321 </div> <!-- /.col-sm-2.col-sm-pull-10 -->
322 </div> <!-- /.row -->
324 [% MACRO jsinclude BLOCK %]
325 [% INCLUDE 'calendar.inc' %]
326 [% INCLUDE 'datatables.inc' %]
327 [% INCLUDE 'columns_settings.inc' %]
329 $(document).ready(function() {
330 var table_settings = [% TablesSettings.GetTableSettings('circ', 'holds', 'holds-to-pull', 'json') | $raw %];
331 var holdst = KohaTable("holdst", {
332 "sPaginationType": "full_numbers"
334 holdst.fnAddFilters("filter");
335 [%# add separateData function to cleanse jQuery select lists by breaking apart strings glued with BR tags and then de-duplicating any repeated library codes %]
336 function separateData ( ColumnData ){
338 var new_array = new Array();
339 for ( j=0 ; j<cD.length ; j++ ) {
340 var split_array = cD[j].split(/\n/gi);
341 for ( k=0 ; k<split_array.length ; k++ ){
342 var str = $.trim(split_array[k].replace(/[\n\r]/g, ''));
343 if ($.inArray(str, new_array) == -1 && str.length > 0 ) {
351 [%# add SeparateData function into createSelect function, so that it does the createSelect on clean data %]
352 function createSelect( data ) {
353 data = separateData(data);
354 var r='<select style="width:99%"><option value="">' + _("None") + '</option>', i, len=data.length;
355 var regex = /(<([^>]+)>)/ig; // Remove html tags
356 for ( i=0 ; i<len ; i++ ) {
357 var cell_val = data[i].replace(regex, '');
358 if ( cell_val.length < 1 ) continue;
359 r += '<option value="'+cell_val+'">'+cell_val+'</option>';
361 return r+'</select>';
363 $("#homebranchfilter").each( function () {
364 $(this).html( createSelect( holdst.fnGetColumnData(5) ) );
365 $('select', this).change( function () {
366 holdst.fnFilter( $(this).val(), 5 );
369 $("#itemtype-filter").each( function () {
370 $(this).html( createSelect( holdst.fnGetColumnData(10) ) );
371 $('select', this).change( function () {
372 holdst.fnFilter( $(this).val(), 10 );
375 $("#locationfilter").each( function () {
376 $(this).html( createSelect( holdst.fnGetColumnData(11) ) );
377 $('select', this).change( function () {
378 holdst.fnFilter( $(this).val(), 11 );
381 $("#pickup-location").each( function () {
382 $(this).html( createSelect( holdst.fnGetColumnData(14) ) );
383 $('select', this).change( function () {
384 holdst.fnFilter( $(this).val(), 14 );
391 [% INCLUDE 'intranet-bottom.inc' %]