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

(-)a/Koha/Hold.pm (-7 / +10 lines)
Lines 231-243 sub set_waiting { Link Here
231
    my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
231
    my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
232
    my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
232
    my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
233
233
234
    my $rule = Koha::CirculationRules->get_effective_rule({
234
    my $rule = Koha::CirculationRules->get_effective_rule(
235
        categorycode => $self->borrower->categorycode,
235
        {
236
        itemtype => $self->item->effective_itemtype,
236
            categorycode => $self->borrower->categorycode,
237
        branchcode => $self->branchcode,
237
            itemtype     => $self->item->effective_itemtype,
238
        rule_name => 'holds_pickup_period',
238
            branchcode   => $self->branchcode,
239
    });
239
            rule_name    => 'holds_pickup_period',
240
    if ( defined($rule) and $rule->rule_value ne '' ){
240
        }
241
    );
242
    if ( defined($rule) and $rule->rule_value ne '' ) {
243
241
        # circulation rule overrides ReservesMaxPickUpDelay
244
        # circulation rule overrides ReservesMaxPickUpDelay
242
        $max_pickup_delay = $rule->rule_value;
245
        $max_pickup_delay = $rule->rule_value;
243
    }
246
    }
(-)a/admin/smart-rules.pl (-82 / +85 lines)
Lines 74-81 if ($op eq 'delete') { Link Here
74
    Koha::CirculationRules->set_rules(
74
    Koha::CirculationRules->set_rules(
75
        {
75
        {
76
            categorycode => $categorycode eq '*' ? undef : $categorycode,
76
            categorycode => $categorycode eq '*' ? undef : $categorycode,
77
            branchcode   => $branch eq '*' ? undef : $branch,
77
            branchcode   => $branch eq '*'       ? undef : $branch,
78
            itemtype     => $itemtype eq '*' ? undef : $itemtype,
78
            itemtype     => $itemtype eq '*'     ? undef : $itemtype,
79
            rules        => {
79
            rules        => {
80
                maxissueqty                      => undef,
80
                maxissueqty                      => undef,
81
                maxonsiteissueqty                => undef,
81
                maxonsiteissueqty                => undef,
Lines 251-350 elsif ($op eq 'delete-branch-item') { Link Here
251
    }
251
    }
252
}
252
}
253
# save the values entered
253
# save the values entered
254
elsif ($op eq 'add') {
254
elsif ( $op eq 'add' ) {
255
    my $br = $branch; # branch
255
    my $br                      = $branch;                          # branch
256
    my $bor  = $input->param('categorycode'); # borrower category
256
    my $bor                     = $input->param('categorycode');    # borrower category
257
    my $itemtype  = $input->param('itemtype');     # item type
257
    my $itemtype                = $input->param('itemtype');        # item type
258
    my $fine = $input->param('fine');
258
    my $fine                    = $input->param('fine');
259
    my $finedays     = $input->param('finedays');
259
    my $finedays                = $input->param('finedays');
260
    my $maxsuspensiondays = $input->param('maxsuspensiondays') || q{};
260
    my $maxsuspensiondays       = $input->param('maxsuspensiondays')       || q{};
261
    my $suspension_chargeperiod = $input->param('suspension_chargeperiod') || 1;
261
    my $suspension_chargeperiod = $input->param('suspension_chargeperiod') || 1;
262
    my $firstremind  = $input->param('firstremind');
262
    my $firstremind             = $input->param('firstremind');
263
    my $chargeperiod = $input->param('chargeperiod');
263
    my $chargeperiod            = $input->param('chargeperiod');
264
    my $chargeperiod_charge_at = $input->param('chargeperiod_charge_at');
264
    my $chargeperiod_charge_at  = $input->param('chargeperiod_charge_at');
265
    my $maxissueqty = strip_non_numeric( scalar $input->param('maxissueqty') );
265
    my $maxissueqty             = strip_non_numeric( scalar $input->param('maxissueqty') );
266
    my $maxonsiteissueqty = strip_non_numeric( scalar $input->param('maxonsiteissueqty') );
266
    my $maxonsiteissueqty       = strip_non_numeric( scalar $input->param('maxonsiteissueqty') );
267
    my $renewalsallowed  = $input->param('renewalsallowed');
267
    my $renewalsallowed         = $input->param('renewalsallowed');
268
    my $unseen_renewals_allowed  = defined $input->param('unseen_renewals_allowed') ? strip_non_numeric( scalar $input->param('unseen_renewals_allowed') ) : q{};
268
    my $unseen_renewals_allowed =
269
    my $renewalperiod    = $input->param('renewalperiod');
269
        defined $input->param('unseen_renewals_allowed')
270
    my $norenewalbefore  = $input->param('norenewalbefore');
270
        ? strip_non_numeric( scalar $input->param('unseen_renewals_allowed') )
271
        : q{};
272
    my $renewalperiod   = $input->param('renewalperiod');
273
    my $norenewalbefore = $input->param('norenewalbefore');
271
    $norenewalbefore = q{} if $norenewalbefore =~ /^\s*$/;
274
    $norenewalbefore = q{} if $norenewalbefore =~ /^\s*$/;
272
    my $auto_renew = $input->param('auto_renew') eq 'yes' ? 1 : 0;
275
    my $auto_renew            = $input->param('auto_renew') eq 'yes' ? 1 : 0;
273
    my $no_auto_renewal_after = $input->param('no_auto_renewal_after');
276
    my $no_auto_renewal_after = $input->param('no_auto_renewal_after');
274
    $no_auto_renewal_after = q{} if $no_auto_renewal_after =~ /^\s*$/;
277
    $no_auto_renewal_after = q{} if $no_auto_renewal_after =~ /^\s*$/;
275
    my $no_auto_renewal_after_hard_limit = $input->param('no_auto_renewal_after_hard_limit') || q{};
278
    my $no_auto_renewal_after_hard_limit = $input->param('no_auto_renewal_after_hard_limit') || q{};
276
    my $reservesallowed  = strip_non_numeric( scalar $input->param('reservesallowed') );
279
    my $reservesallowed                  = strip_non_numeric( scalar $input->param('reservesallowed') );
277
    my $holds_per_record = strip_non_numeric( scalar $input->param('holds_per_record') );
280
    my $holds_per_record                 = strip_non_numeric( scalar $input->param('holds_per_record') );
278
    my $holds_per_day    = strip_non_numeric( scalar $input->param('holds_per_day') );
281
    my $holds_per_day                    = strip_non_numeric( scalar $input->param('holds_per_day') );
279
    my $onshelfholds     = $input->param('onshelfholds') || 0;
282
    my $onshelfholds                     = $input->param('onshelfholds') || 0;
280
    my $issuelength  = $input->param('issuelength') || 0;
283
    my $issuelength                      = $input->param('issuelength')  || 0;
281
    my $daysmode = $input->param('daysmode');
284
    my $daysmode                         = $input->param('daysmode');
282
    my $lengthunit  = $input->param('lengthunit');
285
    my $lengthunit                       = $input->param('lengthunit');
283
    my $hardduedate = $input->param('hardduedate') || q{};
286
    my $hardduedate                      = $input->param('hardduedate') || q{};
284
    my $hardduedatecompare = $input->param('hardduedatecompare');
287
    my $hardduedatecompare               = $input->param('hardduedatecompare');
285
    my $rentaldiscount = $input->param('rentaldiscount') || 0;
288
    my $rentaldiscount                   = $input->param('rentaldiscount')   || 0;
286
    my $opacitemholds = $input->param('opacitemholds') || 0;
289
    my $opacitemholds                    = $input->param('opacitemholds')    || 0;
287
    my $article_requests = $input->param('article_requests') || 'no';
290
    my $article_requests                 = $input->param('article_requests') || 'no';
288
    my $overduefinescap = $input->param('overduefinescap')
291
    my $overduefinescap                  = $input->param('overduefinescap')
289
        && ( $input->param('overduefinescap') + 0 ) > 0 ? sprintf( "%.02f", $input->param('overduefinescap') ) : q{};
292
        && ( $input->param('overduefinescap') + 0 ) > 0 ? sprintf( "%.02f", $input->param('overduefinescap') ) : q{};
290
    my $cap_fine_to_replacement_price = ($input->param('cap_fine_to_replacement_price') || q{}) eq 'on';
293
    my $cap_fine_to_replacement_price = ( $input->param('cap_fine_to_replacement_price') || q{} ) eq 'on';
291
    my $note = $input->param('note');
294
    my $note                          = $input->param('note');
292
    my $decreaseloanholds = $input->param('decreaseloanholds') || q{};
295
    my $decreaseloanholds             = $input->param('decreaseloanholds') || q{};
293
    my $recalls_allowed = $input->param('recalls_allowed');
296
    my $recalls_allowed               = $input->param('recalls_allowed');
294
    my $recalls_per_record = $input->param('recalls_per_record');
297
    my $recalls_per_record            = $input->param('recalls_per_record');
295
    my $on_shelf_recalls = $input->param('on_shelf_recalls');
298
    my $on_shelf_recalls              = $input->param('on_shelf_recalls');
296
    my $recall_due_date_interval = $input->param('recall_due_date_interval');
299
    my $recall_due_date_interval      = $input->param('recall_due_date_interval');
297
    my $recall_overdue_fine = $input->param('recall_overdue_fine');
300
    my $recall_overdue_fine           = $input->param('recall_overdue_fine');
298
    my $recall_shelf_time = $input->param('recall_shelf_time');
301
    my $recall_shelf_time             = $input->param('recall_shelf_time');
299
    my $holds_pickup_period = strip_non_numeric( scalar $input->param('holds_pickup_period') );
302
    my $holds_pickup_period           = strip_non_numeric( scalar $input->param('holds_pickup_period') );
300
303
301
    my $rules = {
304
    my $rules = {
302
        maxissueqty                   => $maxissueqty,
305
        maxissueqty                      => $maxissueqty,
303
        maxonsiteissueqty             => $maxonsiteissueqty,
306
        maxonsiteissueqty                => $maxonsiteissueqty,
304
        rentaldiscount                => $rentaldiscount,
307
        rentaldiscount                   => $rentaldiscount,
305
        fine                          => $fine,
308
        fine                             => $fine,
306
        finedays                      => $finedays,
309
        finedays                         => $finedays,
307
        maxsuspensiondays             => $maxsuspensiondays,
310
        maxsuspensiondays                => $maxsuspensiondays,
308
        suspension_chargeperiod       => $suspension_chargeperiod,
311
        suspension_chargeperiod          => $suspension_chargeperiod,
309
        firstremind                   => $firstremind,
312
        firstremind                      => $firstremind,
310
        chargeperiod                  => $chargeperiod,
313
        chargeperiod                     => $chargeperiod,
311
        chargeperiod_charge_at        => $chargeperiod_charge_at,
314
        chargeperiod_charge_at           => $chargeperiod_charge_at,
312
        issuelength                   => $issuelength,
315
        issuelength                      => $issuelength,
313
        daysmode                      => $daysmode,
316
        daysmode                         => $daysmode,
314
        lengthunit                    => $lengthunit,
317
        lengthunit                       => $lengthunit,
315
        hardduedate                   => $hardduedate,
318
        hardduedate                      => $hardduedate,
316
        hardduedatecompare            => $hardduedatecompare,
319
        hardduedatecompare               => $hardduedatecompare,
317
        renewalsallowed               => $renewalsallowed,
320
        renewalsallowed                  => $renewalsallowed,
318
        unseen_renewals_allowed       => $unseen_renewals_allowed,
321
        unseen_renewals_allowed          => $unseen_renewals_allowed,
319
        renewalperiod                 => $renewalperiod,
322
        renewalperiod                    => $renewalperiod,
320
        norenewalbefore               => $norenewalbefore,
323
        norenewalbefore                  => $norenewalbefore,
321
        auto_renew                    => $auto_renew,
324
        auto_renew                       => $auto_renew,
322
        no_auto_renewal_after         => $no_auto_renewal_after,
325
        no_auto_renewal_after            => $no_auto_renewal_after,
323
        no_auto_renewal_after_hard_limit => $no_auto_renewal_after_hard_limit,
326
        no_auto_renewal_after_hard_limit => $no_auto_renewal_after_hard_limit,
324
        reservesallowed               => $reservesallowed,
327
        reservesallowed                  => $reservesallowed,
325
        holds_per_record              => $holds_per_record,
328
        holds_per_record                 => $holds_per_record,
326
        holds_per_day                 => $holds_per_day,
329
        holds_per_day                    => $holds_per_day,
327
        onshelfholds                  => $onshelfholds,
330
        onshelfholds                     => $onshelfholds,
328
        opacitemholds                 => $opacitemholds,
331
        opacitemholds                    => $opacitemholds,
329
        overduefinescap               => $overduefinescap,
332
        overduefinescap                  => $overduefinescap,
330
        cap_fine_to_replacement_price => $cap_fine_to_replacement_price,
333
        cap_fine_to_replacement_price    => $cap_fine_to_replacement_price,
331
        article_requests              => $article_requests,
334
        article_requests                 => $article_requests,
332
        note                          => $note,
335
        note                             => $note,
333
        decreaseloanholds             => $decreaseloanholds,
336
        decreaseloanholds                => $decreaseloanholds,
334
        recalls_allowed               => $recalls_allowed,
337
        recalls_allowed                  => $recalls_allowed,
335
        recalls_per_record            => $recalls_per_record,
338
        recalls_per_record               => $recalls_per_record,
336
        on_shelf_recalls              => $on_shelf_recalls,
339
        on_shelf_recalls                 => $on_shelf_recalls,
337
        recall_due_date_interval      => $recall_due_date_interval,
340
        recall_due_date_interval         => $recall_due_date_interval,
338
        recall_overdue_fine           => $recall_overdue_fine,
341
        recall_overdue_fine              => $recall_overdue_fine,
339
        recall_shelf_time             => $recall_shelf_time,
342
        recall_shelf_time                => $recall_shelf_time,
340
        holds_pickup_period           => $holds_pickup_period,
343
        holds_pickup_period              => $holds_pickup_period,
341
    };
344
    };
342
345
343
    Koha::CirculationRules->set_rules(
346
    Koha::CirculationRules->set_rules(
344
        {
347
        {
345
            categorycode => $bor eq '*' ? undef : $bor,
348
            categorycode => $bor eq '*'      ? undef : $bor,
346
            itemtype     => $itemtype eq '*' ? undef : $itemtype,
349
            itemtype     => $itemtype eq '*' ? undef : $itemtype,
347
            branchcode   => $br eq '*' ? undef : $br,
350
            branchcode   => $br eq '*'       ? undef : $br,
348
            rules        => $rules,
351
            rules        => $rules,
349
        }
352
        }
350
    );
353
    );
(-)a/installer/data/mysql/atomicupdate/bug_8367-add_holds_pickup_period_circrule.pl (-5 / +7 lines)
Lines 1-17 Link Here
1
use Modern::Perl;
1
use Modern::Perl;
2
2
3
return {
3
return {
4
    bug_number => "8367",
4
    bug_number  => "8367",
5
    description => "Set hold pickup period circulation rule",
5
    description => "Set hold pickup period circulation rule",
6
    up => sub {
6
    up          => sub {
7
        my ($args) = @_;
7
        my ($args) = @_;
8
        my ($dbh, $out) = @$args{qw(dbh out)};
8
        my ( $dbh, $out ) = @$args{qw(dbh out)};
9
9
10
        $dbh->do(q{
10
        $dbh->do(
11
            q{
11
            INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
12
            INSERT IGNORE INTO circulation_rules ( branchcode, categorycode, itemtype, rule_name, rule_value )
12
            SELECT u.* FROM (SELECT NULL as branchcode, NULL as categorycode, NULL as itemtype, 'holds_pickup_period' as rule_name, '' as rule_value) u
13
            SELECT u.* FROM (SELECT NULL as branchcode, NULL as categorycode, NULL as itemtype, 'holds_pickup_period' as rule_name, '' as rule_value) u
13
            WHERE NOT EXISTS ( SELECT rule_name FROM circulation_rules where rule_name = 'holds_pickup_period' )
14
            WHERE NOT EXISTS ( SELECT rule_name FROM circulation_rules where rule_name = 'holds_pickup_period' )
14
        });
15
        }
16
        );
15
17
16
        say $out "Added default circulation rule for holds_pickup_period";
18
        say $out "Added default circulation rule for holds_pickup_period";
17
    },
19
    },
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt (-1 / +1 lines)
Lines 99-105 Link Here
99
                                        <span>Holds waiting:</span> [% reservecount | html %]
99
                                        <span>Holds waiting:</span> [% reservecount | html %]
100
                                    [% END %]
100
                                    [% END %]
101
                                    [% WRAPPER tab_item tabname= "holdsover" %]
101
                                    [% WRAPPER tab_item tabname= "holdsover" %]
102
                                        Holds waiting past their expiration date: [% overcount | html %]
102
                                        <span>Holds waiting past their expiration date:</span> [% overcount | html %]
103
                                    [% END %]
103
                                    [% END %]
104
                                    [% WRAPPER tab_item tabname= "holdscancelled" %]
104
                                    [% WRAPPER tab_item tabname= "holdscancelled" %]
105
                                        <span>Holds with cancellation requests:</span> [% cancel_reqs_count | html %]
105
                                        <span>Holds with cancellation requests:</span> [% cancel_reqs_count | html %]
(-)a/t/db_dependent/Holds/WaitingReserves.t (-64 / +78 lines)
Lines 66-86 my $biblio4 = $builder->build_sample_biblio; Link Here
66
my $biblio5 = $builder->build_sample_biblio;
66
my $biblio5 = $builder->build_sample_biblio;
67
my $biblio6 = $builder->build_sample_biblio;
67
my $biblio6 = $builder->build_sample_biblio;
68
68
69
my $item1 = $builder->build_sample_item({biblionumber => $biblio->biblionumber});
69
my $item1 = $builder->build_sample_item( { biblionumber => $biblio->biblionumber } );
70
my $item2 = $builder->build_sample_item({biblionumber => $biblio2->biblionumber});
70
my $item2 = $builder->build_sample_item( { biblionumber => $biblio2->biblionumber } );
71
my $item3 = $builder->build_sample_item({biblionumber => $biblio3->biblionumber});
71
my $item3 = $builder->build_sample_item( { biblionumber => $biblio3->biblionumber } );
72
my $item4 = $builder->build_sample_item({biblionumber => $biblio4->biblionumber});
72
my $item4 = $builder->build_sample_item( { biblionumber => $biblio4->biblionumber } );
73
my $item5 = $builder->build_sample_item({biblionumber => $biblio5->biblionumber});
73
my $item5 = $builder->build_sample_item( { biblionumber => $biblio5->biblionumber } );
74
my $item6 = $builder->build_sample_item({biblionumber => $biblio6->biblionumber});
74
my $item6 = $builder->build_sample_item( { biblionumber => $biblio6->biblionumber } );
75
75
76
Koha::CirculationRules->set_rules({
76
Koha::CirculationRules->set_rules(
77
    categorycode => undef,
77
    {
78
    itemtype => undef,
78
        categorycode => undef,
79
    branchcode => undef,
79
        itemtype     => undef,
80
    rules => {
80
        branchcode   => undef,
81
        holds_pickup_period => undef,
81
        rules        => {
82
            holds_pickup_period => undef,
83
        }
82
    }
84
    }
83
});
85
);
84
86
85
my $today = dt_from_string();
87
my $today = dt_from_string();
86
88
Lines 209-270 my $reserve4 = $builder->build({ Link Here
209
t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 10);
211
t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 10);
210
ModReserveAffect( $item4->itemnumber, $patron2->{borrowernumber}, 0, $reserve4->{reserve_id});
212
ModReserveAffect( $item4->itemnumber, $patron2->{borrowernumber}, 0, $reserve4->{reserve_id});
211
213
212
my $r4 = Koha::Holds->find($reserve4->{reserve_id});
214
my $r4 = Koha::Holds->find( $reserve4->{reserve_id} );
213
is($r4->expirationdate, $requested_expiredate->ymd, 'Requested expiration date should be kept' );
215
is( $r4->expirationdate, $requested_expiredate->ymd, 'Requested expiration date should be kept' );
214
216
215
Koha::CirculationRules->set_rules({
217
Koha::CirculationRules->set_rules(
216
    categorycode => $patron1->{categorycode},
218
    {
217
    itemtype => undef,
219
        categorycode => $patron1->{categorycode},
218
    branchcode => undef,
220
        itemtype     => undef,
219
    rules => {
221
        branchcode   => undef,
220
        holds_pickup_period => '3',
222
        rules        => {
223
            holds_pickup_period => '3',
224
        }
221
    }
225
    }
222
});
226
);
223
t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 7);
227
t::lib::Mocks::mock_preference( 'ReservesMaxPickUpDelay', 7 );
224
228
225
my $reserve5_reservedate = $today->clone;
229
my $reserve5_reservedate    = $today->clone;
226
my $reserve5_expirationdate = $reserve5_reservedate->add(days => 3);
230
my $reserve5_expirationdate = $reserve5_reservedate->add( days => 3 );
227
231
228
my $reserve5 = $builder->build({
232
my $reserve5 = $builder->build(
229
    source => 'Reserve',
233
    {
230
    value => {
234
        source => 'Reserve',
231
        borrowernumber => $patron1->{borrowernumber},
235
        value  => {
232
        reservedate => $reserve5_reservedate->ymd,
236
            borrowernumber         => $patron1->{borrowernumber},
233
        expirationdate => undef,
237
            reservedate            => $reserve5_reservedate->ymd,
234
        biblionumber => $biblio5->biblionumber,
238
            expirationdate         => undef,
235
        branchcode => 'LIB2',
239
            biblionumber           => $biblio5->biblionumber,
236
        priority => 1,
240
            branchcode             => 'LIB2',
237
        found => '',
241
            priority               => 1,
238
        patron_expiration_date => undef,
242
            found                  => '',
239
    },
243
            patron_expiration_date => undef,
240
});
244
        },
245
    }
246
);
241
247
242
ModReserveAffect( $item5->itemnumber, $patron1->{borrowernumber});
248
ModReserveAffect( $item5->itemnumber, $patron1->{borrowernumber} );
243
my $r5 = Koha::Holds->find($reserve5->{reserve_id});
249
my $r5 = Koha::Holds->find( $reserve5->{reserve_id} );
244
250
245
is($r5->expirationdate, $reserve5_expirationdate->ymd, 'Expiration date should be set to today + 3 based on circulation rules' );
251
is(
252
    $r5->expirationdate, $reserve5_expirationdate->ymd,
253
    'Expiration date should be set to today + 3 based on circulation rules'
254
);
246
255
247
my $reserve6_reservedate = $today->clone;
256
my $reserve6_reservedate = $today->clone;
248
# add 3 days of pickup + 1 day of holiday
249
my $reserve6_expirationdate = $reserve6_reservedate->add(days => 5);
250
257
251
my $reserve6 = $builder->build({
258
# add 3 days of pickup + 1 day of holiday
252
    source => 'Reserve',
259
my $reserve6_expirationdate = $reserve6_reservedate->add( days => 5 );
253
    value => {
260
254
        borrowernumber => $patron1->{borrowernumber},
261
my $reserve6 = $builder->build(
255
        reservedate => $reserve6_reservedate->ymd,
262
    {
256
        expirationdate => undef,
263
        source => 'Reserve',
257
        biblionumber => $biblio6->biblionumber,
264
        value  => {
258
        branchcode => 'LIB1',
265
            borrowernumber         => $patron1->{borrowernumber},
259
        priority => 1,
266
            reservedate            => $reserve6_reservedate->ymd,
260
        found => '',
267
            expirationdate         => undef,
261
        patron_expiration_date => undef,
268
            biblionumber           => $biblio6->biblionumber,
262
    },
269
            branchcode             => 'LIB1',
263
});
270
            priority               => 1,
271
            found                  => '',
272
            patron_expiration_date => undef,
273
        },
274
    }
275
);
264
276
265
ModReserveAffect( $item6->itemnumber, $patron1->{borrowernumber});
277
ModReserveAffect( $item6->itemnumber, $patron1->{borrowernumber} );
266
my $r6 = Koha::Holds->find($reserve6->{reserve_id});
278
my $r6 = Koha::Holds->find( $reserve6->{reserve_id} );
267
279
268
is($r6->expirationdate, $reserve6_expirationdate->ymd, 'Expiration date should be set to today + 4 based on circulation rules and including a holiday' );
280
is(
281
    $r6->expirationdate, $reserve6_expirationdate->ymd,
282
    'Expiration date should be set to today + 4 based on circulation rules and including a holiday'
283
);
269
284
270
$schema->storage->txn_rollback;
285
$schema->storage->txn_rollback;
271
- 

Return to bug 8367