Kyle M Hall
af0d71b747
Some libraries would like to be able to cancel a hold with the option to specify a reason. Providing a reason would generate an email to that patron. Test Plan: 1) Apply this patch 2) Run updatedatabase.pl 3) Restart all the things! 4) Create new AV category "HOLD_CANCELLATION", add some cancelation reasons 5) Add new Holds module notice "HOLD_CANCELLATION", add an email version. A quick test version would be "Reason: <<reserves.cancellation_reason>>" -- [% USE AuthorisedValues %] Reason: [% AuthorisedValues.GetByCode( 'CANCELLATION_REASON', hold.cancellation_reason, 'IS_OPAC' ) %] [% IF hold.cancellation_reason == "MY_AV_VALUE" %] IF perhaps you'd like to have a much longer explanation than just the one sentence in the AV description, you can use IF blocks using Template Toolkit markup! [% END %] -- 6) Place a hold for a patron 7) On request.pl, select the 'del' option for the hold 8) Select a cancellation reason and choose "Update hold(s)" 9) Note a new message has been queue for the patron with the cancelation reason 11) Test again from circulation.pl 12) Test again from moremember.pl 10) Cancel a hold with no reason, note no email is generated 11) Delete your authorised values, not the feature is disabled 12) Reinstate the authorised values, but delete the notice, you should now be able to cancel a hold with a reason, but no email will be generated Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com> Signed-off-by: Rebecca Coert <rcoert@arlingtonva.us> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
222 lines
14 KiB
HTML
222 lines
14 KiB
HTML
[% USE Koha %]
|
|
[% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %]
|
|
[% USE AuthorisedValues %]
|
|
<table>
|
|
<tr>
|
|
[% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
|
|
<th>Priority</th>
|
|
<th> </th>
|
|
[% ELSE %]
|
|
<th>Delete?</th>
|
|
[% END %]
|
|
<th>Patron</th>
|
|
<th>Notes</th>
|
|
<th>Date</th>
|
|
<th>Expiration</th>
|
|
<th>Pickup library</th>
|
|
<th>Details</th>
|
|
[% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
|
|
<th><img src="[% interface | html %]/[% theme | html %]/img/go-bottom.png" alt="Toggle set to lowest priority" /></th>
|
|
[% END %]
|
|
<th> </th>
|
|
<th> </th>
|
|
</tr>
|
|
|
|
[% SET first_priority = 0 %]
|
|
[% SET last_priority = holds.last.priority %]
|
|
|
|
[% FOREACH hold IN holds %]
|
|
[% IF !hold.found && first_priority == 0 %][% first_priority = hold.priority %][% END %]
|
|
<tr>
|
|
<td>
|
|
<input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
|
|
<input type="hidden" name="borrowernumber" value="[% hold.borrowernumber | html %]" />
|
|
<input type="hidden" name="biblionumber" value="[% hold.biblionumber | html %]" />
|
|
[% IF Koha.Preference('HoldsSplitQueue') == "nothing" && !hold.found %]
|
|
<select name="rank-request" class="rank-request" data-hold-id="[% hold.reserve_id %]">
|
|
[% ELSE %]
|
|
<input type="hidden" name="rank-request" class="rank-request" value="[% hold.priority | html %]" data-hold-id="[% hold.reserve_id %]">
|
|
<select name="rank-request" class="rank-request" disabled="disabled" data-hold-id="[% hold.reserve_id %]">
|
|
[% END %]
|
|
[% IF ( hold.found ) %]
|
|
[% IF ( hold.intransit ) %]
|
|
<option value="T" selected="selected">In transit</option>
|
|
[% ELSE %]
|
|
<option value="W" selected="selected">Waiting</option>
|
|
[% END %]
|
|
[% END %]
|
|
|
|
[% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
|
|
[% IF Koha.Preference('HoldsSplitQueueNumbering') == 'actual' %]
|
|
[% FOREACH optionloo IN hold.optionloop %]
|
|
[% IF ( optionloo.selected ) %]
|
|
<option value="[% optionloo.num | html %]" selected="selected">[% optionloo.num | html %]</option>
|
|
[% ELSE %]
|
|
<option value="[% optionloo.num | html %]">[% optionloo.num | html %]</option>
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% SET ranker = 1 %]
|
|
[% FOREACH h IN holds %]
|
|
[% NEXT IF h.found %]
|
|
[% IF ( h.priority == hold.priority ) %]
|
|
<option value="[% h.priority | html %]" selected="selected">[% ranker | html %]</option>
|
|
[% ELSE %]
|
|
<option value="[% h.priority | html %]">[% ranker | html %]</option>
|
|
[% END %]
|
|
[% ranker = ranker + 1 %]
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSIF !hold.found %]
|
|
<option value="[% hold.priority | html %]" selected="selected">[% hold.priority | html %]</option>
|
|
[% END %]
|
|
|
|
<option value="del">del</option>
|
|
</select>
|
|
</td>
|
|
|
|
[% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
|
|
[% UNLESS hold.found %]
|
|
[% SET prev_priority = loop.prev.priority %]
|
|
[% SET next_priority = loop.next.priority %]
|
|
[% holds.index | html %]
|
|
|
|
<td style="white-space:nowrap;">
|
|
<a title="Move hold up" href="request.pl?action=move&where=up&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-up.png" alt="Go up" />
|
|
</a>
|
|
|
|
<a title="Move hold to top" href="request.pl?action=move&where=top&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-top.png" alt="Go top" />
|
|
</a>
|
|
|
|
<a title="Move hold to bottom" href="request.pl?action=move&where=bottom&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-bottom.png" alt="Go bottom" />
|
|
</a>
|
|
|
|
<a title="Move hold down" href="request.pl?action=move&where=down&first_priority=[% first_priority | html %]&last_priority=[% last_priority | html %]&prev_priority=[% prev_priority | html %]&next_priority=[% next_priority | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-down.png" alt="Go down" />
|
|
</a>
|
|
</td>
|
|
[% ELSE %]
|
|
<td></td>
|
|
[% END %]
|
|
[% END %]
|
|
|
|
<td>
|
|
[% INCLUDE 'patron-title.inc' patron=hold.patron hide_patron_infos_if_needed=1 %]
|
|
</td>
|
|
|
|
<td>[% hold.notes | html | html_line_break %]</td>
|
|
<td>
|
|
[% IF Koha.Preference('AllowHoldDateInFuture') %]
|
|
<input type="text" class="datepicker" value="[% hold.date | $KohaDates %]" required="required" size="10" name="reservedate" />
|
|
[% ELSE %]
|
|
[% hold.date | $KohaDates %]
|
|
[% END %]
|
|
</td>
|
|
<td><input type="text" class="datepickerto" value="[% hold.expirationdate | $KohaDates %]" size="10" name="expirationdate" /></td>
|
|
|
|
<td>
|
|
[% IF ( hold.found ) %]
|
|
[% IF ( hold.atdestination ) %]
|
|
[% IF ( hold.found ) %]
|
|
Item waiting at <b> [% hold.wbrname | html %]</b> <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" /> since [% hold.waiting_date | $KohaDates %]
|
|
[% ELSE %]
|
|
Waiting to be pulled <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" />
|
|
[% END %]
|
|
[% ELSE %]
|
|
Item being transferred to <b> [% hold.wbrname | html %]</b> <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" />
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% IF Koha.Preference('IndependentBranches') && Branches.all().size == 1 %]
|
|
[% Branches.GetName(hold.branchcode) | html %] <input type="hidden" name="pickup" value="[% hold.branchcode | html %]" />
|
|
[% ELSE %]
|
|
<select name="pickup">
|
|
[% PROCESS options_for_libraries libraries => Branches.pickup_locations( { search_params => { item => hold.itemnumber, biblio => hold.biblionumber, patron => hold.patron }, selected => hold.branchcode }) %]
|
|
</select>
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
|
|
<td>
|
|
[% IF ( hold.found ) %]
|
|
<a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% hold.biblionumber | uri %]&itemnumber=[% hold.itemnumber | uri %]#item[% hold.itemnumber | uri %]">
|
|
[% IF ( hold.barcodenumber ) %]
|
|
[% hold.barcodenumber | html %]
|
|
<input type="hidden" name="itemnumber" value="[% hold.itemnumber | html %]" />
|
|
[% ELSE %]
|
|
No barcode
|
|
[% END %]
|
|
</a>
|
|
[% ELSE %]
|
|
[% IF ( hold.item_level_hold ) %]
|
|
<i>
|
|
Only item
|
|
<a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% hold.biblionumber | uri %]&itemnumber=[% hold.itemnumber | uri %]#item[% hold.itemnumber | uri %]">
|
|
[% IF ( hold.barcodenumber ) %]
|
|
[% hold.barcodenumber | html %]
|
|
<input type="hidden" name="itemnumber" value="[% hold.itemnumber | html %]" />
|
|
[% ELSE %]
|
|
No barcode
|
|
[% END %]
|
|
</a>
|
|
</i>
|
|
[% ELSE %]
|
|
[% IF hold.itemtype %]
|
|
<i>Next available [% ItemTypes.GetDescription( hold.itemtype ) | html %] item</i>
|
|
[% ELSE %]
|
|
<i>Next available</i>
|
|
[% END %]
|
|
|
|
<input type="hidden" name="itemnumber" value="" />
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
|
|
[% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
|
|
[% UNLESS hold.found %]
|
|
<td>
|
|
<a title="Toggle lowest priority" href="request.pl?action=setLowestPriority&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
[% IF ( hold.lowestPriority ) %]
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-bottom.png" alt="Unset lowest priority" />
|
|
[% ELSE %]
|
|
<img src="[% interface | html %]/[% theme | html %]/img/go-down.png" alt="Set to lowest priority" />
|
|
[% END %]
|
|
</a>
|
|
</td>
|
|
[% ELSE %]
|
|
<td></td>
|
|
[% END %]
|
|
[% END %]
|
|
|
|
<td>
|
|
<a class="cancel-hold" title="Cancel hold" href="request.pl?action=cancel&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&reserve_id=[% hold.reserve_id | html %]&date=[% hold.date | html %]">
|
|
<img src="[% interface | html %]/[% theme | html %]/img/x.png" alt="Cancel" />
|
|
</a>
|
|
</td>
|
|
|
|
<td>
|
|
[% IF Koha.Preference('SuspendHoldsIntranet') %]
|
|
[% UNLESS ( hold.found ) %]
|
|
<input type="button" value="[% IF ( hold.suspend ) %]Unsuspend[% ELSE %]Suspend[% END %]" onclick="window.location.href='request.pl?action=toggleSuspend&reserve_id=[% hold.reserve_id | html %]&borrowernumber=[% hold.borrowernumber | html %]&biblionumber=[% hold.biblionumber | html %]&date=[% hold.date | html %]&suspend_until=' + $('#suspend_until_[% hold.reserve_id | html %]').val()" />
|
|
|
|
[% IF Koha.Preference('AutoResumeSuspendedHolds') %]
|
|
<label for="suspend_until_[% hold.reserve_id | html %]">[% IF ( hold.suspend ) %] on [% ELSE %] until [% END %]</label>
|
|
<input type="text" name="suspend_until_[% hold.reserve_id | html %]" id="suspend_until_[% hold.reserve_id | html %]" size="10" value="[% hold.suspend_until | $KohaDates %]" class="datepicker suspend_until_datepicker" />
|
|
<a href='#' onclick="document.getElementById('suspend_until_[% hold.reserve_id | html %]').value='';">Clear date</a>
|
|
[% ELSE %]
|
|
<input type="hidden" name="suspend_until_[% hold.reserve_id | html %]" id="suspend_until_[% hold.reserve_id | html %]" value=""/>
|
|
[% END %]
|
|
[% END %]
|
|
[% END # IF SuspendHoldsIntranet %]
|
|
|
|
[% IF ( hold.found ) %]
|
|
<input type="button" id="revert_hold_[% hold.reserve_id | html %]" value="[% IF hold.intransit %]Revert transit status[% ELSE %]Revert waiting status[% END %]" onclick="window.location.href='request.pl?action=move&where=down&first_priority=[% first_priority | uri %]&last_priority=[% last_priority | uri %]&prev_priority=0&next_priority=1&borrowernumber=[% hold.borrowernumber | uri %]&biblionumber=[% hold.biblionumber | uri %]&itemnumber=[% hold.itemnumber | uri %]&reserve_id=[% hold.reserve_id | uri %]&date=[% hold.date | uri %]'">
|
|
[% END %]
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
[% END %]
|
|
</table>
|