View | Details | Raw Unified | Return to bug 14464
Collapse All | Expand All

(-)a/C4/Reserves.pm (-9 / +12 lines)
Lines 1077-1083 sub CancelExpiredReserves { Link Here
1077
    # Cancel reserves that have been waiting too long
1077
    # Cancel reserves that have been waiting too long
1078
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
1078
    if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
1079
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
1079
        my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
1080
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
1081
        my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
1080
        my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
1082
1081
1083
        my $today = dt_from_string();
1082
        my $today = dt_from_string();
Lines 1098-1108 sub CancelExpiredReserves { Link Here
1098
            }
1097
            }
1099
1098
1100
            if ( $do_cancel ) {
1099
            if ( $do_cancel ) {
1101
                if ( $charge ) {
1100
                CancelReserve({ reserve_id => $res->{'reserve_id'}, charge_cancel_fee => 1 });
1102
                    manualinvoice($res->{'borrowernumber'}, $res->{'itemnumber'}, 'Hold waiting too long', 'F', $charge);
1103
                }
1104
1105
                CancelReserve({ reserve_id => $res->{'reserve_id'} });
1106
            }
1101
            }
1107
        }
1102
        }
1108
    }
1103
    }
Lines 1129-1137 sub AutoUnsuspendReserves { Link Here
1129
1124
1130
=head2 CancelReserve
1125
=head2 CancelReserve
1131
1126
1132
  CancelReserve({ reserve_id => $reserve_id, [ biblionumber => $biblionumber, borrowernumber => $borrrowernumber, itemnumber => $itemnumber ] });
1127
  CancelReserve({ reserve_id => $reserve_id, [ biblionumber => $biblionumber, borrowernumber => $borrrowernumber, itemnumber => $itemnumber, ] [ charge_cancel_fee => 1 ] });
1133
1128
1134
Cancels a reserve.
1129
Cancels a reserve. If C<charge_cancel_fee> is passed and the C<ExpireReservesMaxPickUpDelayCharge> syspref is set, charge that fee to the patron's account.
1135
1130
1136
=cut
1131
=cut
1137
1132
Lines 1139-1145 sub CancelReserve { Link Here
1139
    my ( $params ) = @_;
1134
    my ( $params ) = @_;
1140
1135
1141
    my $reserve_id = $params->{'reserve_id'};
1136
    my $reserve_id = $params->{'reserve_id'};
1142
    $reserve_id = GetReserveId( $params ) unless ( $reserve_id );
1137
    # Filter out only the desired keys; this will insert undefined values for elements missing in
1138
    # \%params, but GetReserveId filters them out anyway.
1139
    $reserve_id = GetReserveId( { biblionumber => $params->{'biblionumber'}, borrowernumber => $params->{'borrowernumber'}, itemnumber => $params->{'itemnumber'} } ) unless ( $reserve_id );
1143
1140
1144
    return unless ( $reserve_id );
1141
    return unless ( $reserve_id );
1145
1142
Lines 1174-1179 sub CancelReserve { Link Here
1174
1171
1175
        # now fix the priority on the others....
1172
        # now fix the priority on the others....
1176
        _FixPriority({ biblionumber => $reserve->{biblionumber} });
1173
        _FixPriority({ biblionumber => $reserve->{biblionumber} });
1174
1175
        # and, if desired, charge a cancel fee
1176
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
1177
        if ( $charge && $params->{'charge_cancel_fee'} ) {
1178
            manualinvoice($reserve->{'borrowernumber'}, $reserve->{'itemnumber'}, 'Hold waiting too long', 'F', $charge);
1179
        }
1177
    }
1180
    }
1178
1181
1179
    return $reserve;
1182
    return $reserve;
(-)a/circ/returns.pl (-4 / +15 lines)
Lines 30-35 script to execute returns of books Link Here
30
use strict;
30
use strict;
31
use warnings;
31
use warnings;
32
32
33
use Carp 'verbose';
34
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
35
33
use CGI qw ( -utf8 );
36
use CGI qw ( -utf8 );
34
use DateTime;
37
use DateTime;
35
use C4::Context;
38
use C4::Context;
Lines 84-89 my $printers = GetPrinters(); Link Here
84
my $userenv = C4::Context->userenv;
87
my $userenv = C4::Context->userenv;
85
my $userenv_branch = $userenv->{'branch'} // '';
88
my $userenv_branch = $userenv->{'branch'} // '';
86
my $printer = $userenv->{'branchprinter'} // '';
89
my $printer = $userenv->{'branchprinter'} // '';
90
my $forgivemanualholdsexpire = $query->param('forgivemanualholdsexpire');
87
91
88
my $overduecharges = (C4::Context->preference('finesMode') && C4::Context->preference('finesMode') ne 'off');
92
my $overduecharges = (C4::Context->preference('finesMode') && C4::Context->preference('finesMode') ne 'off');
89
#
93
#
Lines 144-155 if ( $query->param('resbarcode') ) { Link Here
144
    my $resbarcode     = $query->param('resbarcode');
148
    my $resbarcode     = $query->param('resbarcode');
145
    my $diffBranchReturned = $query->param('diffBranch');
149
    my $diffBranchReturned = $query->param('diffBranch');
146
    my $iteminfo   = GetBiblioFromItemNumber($item);
150
    my $iteminfo   = GetBiblioFromItemNumber($item);
151
    my $cancel_reserve = $query->param('cancel_reserve');
147
    # fix up item type for display
152
    # fix up item type for display
148
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
153
    $iteminfo->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $iteminfo->{'itype'} : $iteminfo->{'itemtype'};
149
    my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
154
150
# diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
155
    if ( $cancel_reserve ) {
151
# i.e., whether to apply waiting status
156
        CancelReserve({ borrowernumber => $borrowernumber, itemnumber => $item, charge_cancel_fee => !$forgivemanualholdsexpire });
152
    ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
157
    } else {
158
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
159
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
160
        # i.e., whether to apply waiting status
161
        ModReserveAffect( $item, $borrowernumber, $diffBranchSend);
162
    }
153
#   check if we have other reserves for this document, if we have a return send the message of transfer
163
#   check if we have other reserves for this document, if we have a return send the message of transfer
154
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
164
    my ( $messages, $nextreservinfo ) = GetOtherReserves($item);
155
165
Lines 612-617 $template->param( Link Here
612
    exemptfine     => $exemptfine,
622
    exemptfine     => $exemptfine,
613
    dropboxmode    => $dropboxmode,
623
    dropboxmode    => $dropboxmode,
614
    dropboxdate    => output_pref($dropboxdate),
624
    dropboxdate    => output_pref($dropboxdate),
625
    forgivemanualholdsexpire => $forgivemanualholdsexpire,
615
    overduecharges => $overduecharges,
626
    overduecharges => $overduecharges,
616
    soundon        => C4::Context->preference("SoundOn"),
627
    soundon        => C4::Context->preference("SoundOn"),
617
    BlockReturnOfWithdrawnItems => C4::Context->preference("BlockReturnOfWithdrawnItems"),
628
    BlockReturnOfWithdrawnItems => C4::Context->preference("BlockReturnOfWithdrawnItems"),
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt (-1 / +30 lines)
Lines 79-84 $(document).ready(function () { Link Here
79
        }
79
        }
80
        $("#barcode").focus();
80
        $("#barcode").focus();
81
    });
81
    });
82
    $("#forgivemanualholdsexpire").change(function () {
83
        if (this.checked == true) {
84
            $("#barcode").addClass("alert");
85
            $("#forgivemanualholdsexpire-alert").show();
86
        } else {
87
            $("#barcode").removeClass("alert");
88
            $("#forgivemanualholdsexpire-alert").hide();
89
        }
90
        $("#barcode").focus();
91
    });
82
    [% IF(overduecharges) %] $("#barcode").focus(function () {
92
    [% IF(overduecharges) %] $("#barcode").focus(function () {
83
        if (($("#exemptcheck").attr("checked") == true) || ($("#dropboxcheck").attr("checked") == true)) {
93
        if (($("#exemptcheck").attr("checked") == true) || ($("#dropboxcheck").attr("checked") == true)) {
84
            $("#barcode").addClass("alert");
94
            $("#barcode").addClass("alert");
Lines 206-211 $(document).ready(function () { Link Here
206
		<h4><strong>Hold at</strong> [% destbranchname %]</h4>
216
		<h4><strong>Hold at</strong> [% destbranchname %]</h4>
207
        [% END %]
217
        [% END %]
208
        <form method="post" action="returns.pl" class="confirm">
218
        <form method="post" action="returns.pl" class="confirm">
219
            <input type="hidden" name="cancel_reserve" value="0" />
220
            <input type="submit" class="deny" value="Cancel" onclick="this.form.cancel_reserve.value = 1; this.form.submit();" />
221
209
            <input type="submit" class="approve" value="Confirm" />
222
            <input type="submit" class="approve" value="Confirm" />
210
223
211
            <input type="hidden" name="print_slip" value="0" />
224
            <input type="hidden" name="print_slip" value="0" />
Lines 222-227 $(document).ready(function () { Link Here
222
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
235
                <input type="hidden" name="diffBranch" value="[% destbranch %]" />
223
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
236
                <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
224
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
237
                <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
238
                <input type="hidden" name="forgivemanualholdsexpire" value="[% forgivemanualholdsexpire %]" />
225
239
226
                <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
240
                <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
227
                <input type="hidden" name="return_date_override_remember" value="[% return_date_override_remember %]" />
241
                <input type="hidden" name="return_date_override_remember" value="[% return_date_override_remember %]" />
Lines 267-272 $(document).ready(function () { Link Here
267
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
281
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
268
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
282
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
269
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
283
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
284
            <input type="hidden" name="forgivemanualholdsexpire" value="[% forgivemanualholdsexpire %]" />
270
            <input type="hidden" name="barcode" value="0" />
285
            <input type="hidden" name="barcode" value="0" />
271
286
272
            <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
287
            <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
Lines 302-307 $(document).ready(function () { Link Here
302
	<input type="hidden" name="transferitem" value="[% itemnumber %]" />
317
	<input type="hidden" name="transferitem" value="[% itemnumber %]" />
303
        <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
318
        <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
304
        <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
319
        <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
320
        <input type="hidden" name="forgivemanualholdsexpire" value="[% forgivemanualholdsexpire %]" />
305
	[% FOREACH inputloo IN inputloop %]
321
	[% FOREACH inputloo IN inputloop %]
306
	<input type="hidden" name="ri-[% inputloo.counter %]" value="[% inputloo.barcode %]" />
322
	<input type="hidden" name="ri-[% inputloo.counter %]" value="[% inputloo.barcode %]" />
307
	<input type="hidden" name="dd-[% inputloo.counter %]" value="[% inputloo.duedate %]" />
323
	<input type="hidden" name="dd-[% inputloo.counter %]" value="[% inputloo.duedate %]" />
Lines 393-398 $(document).ready(function () { Link Here
393
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
409
            <input type="hidden" name="diffBranch" value="[% destbranch %]" />
394
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
410
            <input type="hidden" name="exemptfine" value="[% exemptfine %]" />
395
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
411
            <input type="hidden" name="dropboxmode" value="[% dropboxmode %]" />
412
            <input type="hidden" name="forgivemanualholdsexpire" value="[% forgivemanualholdsexpire %]" />
396
            <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
413
            <input type="hidden" name="return_date_override" value="[% return_date_override %]" />
397
            <input type="hidden" name="return_date_override_remember" value="[% return_date_override_remember %]" />
414
            <input type="hidden" name="return_date_override_remember" value="[% return_date_override_remember %]" />
398
        </form>
415
        </form>
Lines 483-488 $(document).ready(function () { Link Here
483
    <div id="exemptfines" class="dialog message" style="display:none;">
500
    <div id="exemptfines" class="dialog message" style="display:none;">
484
        <p>Fines for returned items are forgiven.</p>
501
        <p>Fines for returned items are forgiven.</p>
485
    </div>
502
    </div>
503
    <div id="forgivemanualholdsexpire-alert" class="dialog message" style="display:none;">
504
        <p>Fines are not charged for manually cancelled holds.</p>
505
    </div>
486
    <div id="dropboxmode" class="dialog message" style="display:none;">
506
    <div id="dropboxmode" class="dialog message" style="display:none;">
487
        <p>Book drop mode.  (Effective checkin date is [% dropboxdate %] ).</p>
507
        <p>Book drop mode.  (Effective checkin date is [% dropboxdate %] ).</p>
488
    </div>
508
    </div>
Lines 548-553 $(document).ready(function () { Link Here
548
                        [% END %]
568
                        [% END %]
549
                        <label for="dropboxcheck">Book drop mode</label>
569
                        <label for="dropboxcheck">Book drop mode</label>
550
                    </p>
570
                    </p>
571
                    [% IF Koha.Preference('ExpireReservesMaxPickUpDelayCharge') %]
572
                    <p>
573
                        [% IF ( forgivemanualholdsexpire ) %]
574
                        <input type="checkbox" id="forgivemanualholdsexpire" name="forgivemanualholdsexpire" value="forgivemanualholdsexpire" checked="checked" />
575
                        [% ELSE %]
576
                        <input type="checkbox" id="forgivemanualholdsexpire" name="forgivemanualholdsexpire" value="forgivemanualholdsexpire" />
577
                        [% END %]
578
                        <label for="forgivemanualholdsexpire">Forgive fees for manually expired holds</label>
579
                    </p>
580
                    [% END %] <!-- overduecharges -->
551
            </fieldset>
581
            </fieldset>
552
        </div>
582
        </div>
553
    </form>
583
    </form>
554
- 

Return to bug 14464