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

(-)a/Koha/Hold.pm (-1 / +1 lines)
Lines 220-226 sub set_waiting { Link Here
220
        desk_id => $desk_id,
220
        desk_id => $desk_id,
221
    };
221
    };
222
222
223
    my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
223
    my $max_pickup_delay = $self->patron->category->reserves_max_pickup_delay || C4::Context->preference("ReservesMaxPickUpDelay");
224
    my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
224
    my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
225
225
226
    my $new_expiration_date = $today->clone->add(days => $max_pickup_delay);
226
    my $new_expiration_date = $today->clone->add(days => $max_pickup_delay);
(-)a/admin/categories.pl (+3 lines)
Lines 64-69 elsif ( $op eq 'add_validate' ) { Link Here
64
    my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef;
64
    my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef;
65
    my $password_expiry_days = $input->param('password_expiry_days') || undef;
65
    my $password_expiry_days = $input->param('password_expiry_days') || undef;
66
    my $upperagelimit = $input->param('upperagelimit');
66
    my $upperagelimit = $input->param('upperagelimit');
67
    my $reserves_max_pickup_delay = $input->param('reserves_max_pickup_delay') || undef;
67
    my $dateofbirthrequired = $input->param('dateofbirthrequired');
68
    my $dateofbirthrequired = $input->param('dateofbirthrequired');
68
    my $enrolmentfee = $input->param('enrolmentfee');
69
    my $enrolmentfee = $input->param('enrolmentfee');
69
    my $reservefee = $input->param('reservefee');
70
    my $reservefee = $input->param('reservefee');
Lines 96-101 elsif ( $op eq 'add_validate' ) { Link Here
96
        $category->enrolmentperioddate($enrolmentperioddate);
97
        $category->enrolmentperioddate($enrolmentperioddate);
97
        $category->password_expiry_days($password_expiry_days);
98
        $category->password_expiry_days($password_expiry_days);
98
        $category->upperagelimit($upperagelimit);
99
        $category->upperagelimit($upperagelimit);
100
        $category->reserves_max_pickup_delay($reserves_max_pickup_delay);
99
        $category->dateofbirthrequired($dateofbirthrequired);
101
        $category->dateofbirthrequired($dateofbirthrequired);
100
        $category->enrolmentfee($enrolmentfee);
102
        $category->enrolmentfee($enrolmentfee);
101
        $category->reservefee($reservefee);
103
        $category->reservefee($reservefee);
Lines 129-134 elsif ( $op eq 'add_validate' ) { Link Here
129
            enrolmentperioddate => $enrolmentperioddate,
131
            enrolmentperioddate => $enrolmentperioddate,
130
            password_expiry_days => $password_expiry_days,
132
            password_expiry_days => $password_expiry_days,
131
            upperagelimit => $upperagelimit,
133
            upperagelimit => $upperagelimit,
134
            reserves_max_pickup_delay => $reserves_max_pickup_delay,
132
            dateofbirthrequired => $dateofbirthrequired,
135
            dateofbirthrequired => $dateofbirthrequired,
133
            enrolmentfee => $enrolmentfee,
136
            enrolmentfee => $enrolmentfee,
134
            reservefee => $reservefee,
137
            reservefee => $reservefee,
(-)a/installer/data/mysql/atomicupdate/bug_31500.pl (+13 lines)
Line 0 Link Here
1
use Modern::Perl;
2
3
return {
4
    bug_number => "31500",
5
    description => "Add column categories.reserves_max_pickup_delay",
6
    up => sub {
7
        my ($args) = @_;
8
        my ($dbh, $out) = @$args{qw(dbh out)};
9
        if( !column_exists( 'categories', 'reserves_max_pickup_delay' ) ) {
10
            $dbh->do(q{ALTER TABLE categories ADD COLUMN `reserves_max_pickup_delay` smallint(6) DEFAULT NULL COMMENT 'override ReservesMaxPickUpDelay for this patron category' AFTER exclude_from_local_holds_priority});
11
        }
12
    },
13
};
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 1676-1681 CREATE TABLE `categories` ( Link Here
1676
  `min_password_length` smallint(6) DEFAULT NULL COMMENT 'set minimum password length for patrons in this category',
1676
  `min_password_length` smallint(6) DEFAULT NULL COMMENT 'set minimum password length for patrons in this category',
1677
  `require_strong_password` tinyint(1) DEFAULT NULL COMMENT 'set required password strength for patrons in this category',
1677
  `require_strong_password` tinyint(1) DEFAULT NULL COMMENT 'set required password strength for patrons in this category',
1678
  `exclude_from_local_holds_priority` tinyint(1) DEFAULT NULL COMMENT 'Exclude patrons of this category from local holds priority',
1678
  `exclude_from_local_holds_priority` tinyint(1) DEFAULT NULL COMMENT 'Exclude patrons of this category from local holds priority',
1679
  `reserves_max_pickup_delay` smallint(6) DEFAULT NULL COMMENT 'override ReservesMaxPickUpDelay for this patron category',
1679
  PRIMARY KEY (`categorycode`),
1680
  PRIMARY KEY (`categorycode`),
1680
  UNIQUE KEY `categorycode` (`categorycode`)
1681
  UNIQUE KEY `categorycode` (`categorycode`)
1681
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1682
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt (+5 lines)
Lines 437-442 Link Here
437
                    </select>
437
                    </select>
438
                    <div class="hint">If <i>Yes</i>, holds placed by patrons of this category will not be given priority</div>
438
                    <div class="hint">If <i>Yes</i>, holds placed by patrons of this category will not be given priority</div>
439
                </li>
439
                </li>
440
                <li>
441
                    <label for="reserves_max_pickup_delay">Max holds pickup delay: </label>
442
                    <input type="text" name="reserves_max_pickup_delay" id="reserves_max_pickup_delay" size="3" maxlength="3" value="[% category.reserves_max_pickup_delay | html %]" /> days
443
                    <div class="hint">Mark a hold as problematic if it has been waiting for more than this number of days. Overrides the default value in <a href="/cgi-bin/koha/admin/preferences.pl?op=search&amp;searchfield=ReservesMaxPickUpDelay"><span class="term">ReservesMaxPickUpDelay</span></a></div>
444
                </li>
440
            </ol>
445
            </ol>
441
        </fieldset>
446
        </fieldset>
442
447
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt (-1 / +1 lines)
Lines 94-100 Link Here
94
                <li role="presentation" class="active"><a href="#holdswaiting" aria-controls="holdswaiting" role="tab" data-toggle="tab">Holds waiting: [% reservecount | html %]</a></li>
94
                <li role="presentation" class="active"><a href="#holdswaiting" aria-controls="holdswaiting" role="tab" data-toggle="tab">Holds waiting: [% reservecount | html %]</a></li>
95
                <li role="presentation">
95
                <li role="presentation">
96
                    <a href="#holdsover" aria-controls="holdsover" role="tab" data-toggle="tab">
96
                    <a href="#holdsover" aria-controls="holdsover" role="tab" data-toggle="tab">
97
                        Holds waiting over [% Koha.Preference('ReservesMaxPickUpDelay') | html %] days: [% overcount | html %]
97
                        Holds waiting over passed pickup date: [% overcount | html %]
98
                    </a>
98
                    </a>
99
                </li>
99
                </li>
100
                <li role="presentation">
100
                <li role="presentation">
(-)a/t/db_dependent/Koha/Holds.t (-1 / +30 lines)
Lines 539-545 subtest 'get_items_that_can_fill' => sub { Link Here
539
};
539
};
540
540
541
subtest 'set_waiting+patron_expiration_date' => sub {
541
subtest 'set_waiting+patron_expiration_date' => sub {
542
    plan tests => 2;
542
    plan tests => 3;
543
    my $library = $builder->build_object( { class => 'Koha::Libraries' } );
543
    my $library = $builder->build_object( { class => 'Koha::Libraries' } );
544
544
545
    my $item =
545
    my $item =
Lines 639-644 subtest 'set_waiting+patron_expiration_date' => sub { Link Here
639
        is( $hold->expirationdate,         $patron_expiration_date );
639
        is( $hold->expirationdate,         $patron_expiration_date );
640
        is( $hold->patron_expiration_date, $patron_expiration_date );
640
        is( $hold->patron_expiration_date, $patron_expiration_date );
641
    };
641
    };
642
643
    subtest 'Test patron category level reserves_max_pickup_delay' => sub {
644
        plan tests => 1;
645
646
        t::lib::Mocks::mock_preference( 'ReservesMaxPickUpDelay', 5 );
647
648
        my $category = $patron->category;
649
        $category->reserves_max_pickup_delay(6)->store();
650
651
        my $expiration_date = dt_from_string->add( days => 6 )->ymd;
652
653
        my $reserve_id = C4::Reserves::AddReserve(
654
            {
655
                branchcode     => $library->branchcode,
656
                borrowernumber => $patron->borrowernumber,
657
                biblionumber   => $item->biblionumber,
658
                priority       => 1,
659
                itemnumber     => $item->itemnumber,
660
            }
661
        );
662
663
        my $hold = Koha::Holds->find($reserve_id);
664
665
        $hold->set_waiting;
666
667
        $hold = $hold->get_from_storage;
668
669
        is( $hold->expirationdate, $expiration_date );
670
    };
642
};
671
};
643
672
644
673
(-)a/t/lib/TestBuilder.pm (-1 / +1 lines)
Lines 583-588 sub _gen_default_values { Link Here
583
            category_type => sub { return [ qw( A C S I P ) ]->[int(rand(5))] },
583
            category_type => sub { return [ qw( A C S I P ) ]->[int(rand(5))] },
584
            min_password_length => undef,
584
            min_password_length => undef,
585
            require_strong_password => undef,
585
            require_strong_password => undef,
586
            reserves_max_pickup_delay => undef,
586
        },
587
        },
587
        Branch => {
588
        Branch => {
588
            pickup_location => 0,
589
            pickup_location => 0,
589
- 

Return to bug 31500