@@ -, +, @@ item type or branch. --- a/Koha/CirculationRules.pm +++ a/Koha/CirculationRules.pm @@ -203,6 +203,9 @@ our $RULE_KINDS = { recall_shelf_time => { scope => [ 'branchcode', 'categorycode', 'itemtype' ], }, + holds_pickup_period => { + scope => [ 'branchcode', 'categorycode', 'itemtype' ], + }, # Not included (deprecated?): # * accountsent # * reservecharge --- a/Koha/Hold.pm +++ a/Koha/Hold.pm @@ -225,6 +225,17 @@ sub set_waiting { my $new_expiration_date = $today->clone->add(days => $max_pickup_delay); + my $rule = Koha::CirculationRules->get_effective_rule({ + categorycode => $self->borrower->categorycode, + itemtype => $self->item->effective_itemtype, + branchcode => $self->branchcode, + rule_name => 'holds_pickup_period', + }); + if ( defined($rule) and $rule->rule_value ne '' ){ + # circulation rule overrides ReservesMaxPickUpDelay + $max_pickup_delay = $rule->rule_value; + } + if ( C4::Context->preference("ExcludeHolidaysFromMaxPickUpDelay") ) { my $itemtype = $self->item ? $self->item->effective_itemtype : $self->biblio->itemtype; my $daysmode = Koha::CirculationRules->get_effective_daysmode( --- a/admin/smart-rules.pl +++ a/admin/smart-rules.pl @@ -293,6 +293,7 @@ elsif ($op eq 'add') { my $recall_due_date_interval = $input->param('recall_due_date_interval'); my $recall_overdue_fine = $input->param('recall_overdue_fine'); my $recall_shelf_time = $input->param('recall_shelf_time'); + my $holds_pickup_period = strip_non_numeric($input->param('holds_pickup_period')); my $rules = { maxissueqty => $maxissueqty, @@ -333,6 +334,7 @@ elsif ($op eq 'add') { recall_due_date_interval => $recall_due_date_interval, recall_overdue_fine => $recall_overdue_fine, recall_shelf_time => $recall_shelf_time, + holds_pickup_period => $holds_pickup_period, }; Koha::CirculationRules->set_rules( --- a/installer/data/mysql/atomicupdate/bug_8367-add_holds_pickup_period_circrule.perl +++ a/installer/data/mysql/atomicupdate/bug_8367-add_holds_pickup_period_circrule.perl @@ -0,0 +1,6 @@ +$DBversion = 'XXX'; +if( CheckVersion( $DBversion ) ) { + $dbh->do(q{INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value) VALUES (NULL, NULL, NULL, 'holds_pickup_period', NULL) }); + + NewVersion( $DBversion, 8367, "Add holds_pickup_period circulation rule" ); +} --- a/installer/onboarding.pl +++ a/installer/onboarding.pl @@ -282,6 +282,7 @@ if ( $step == 5 ) { recall_due_date_interval => undef, recall_overdue_fine => undef, recall_shelf_time => undef, + holds_pickup_period => undef, } }; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -144,6 +144,7 @@
When your item is ready for pickup, you will have days to pick it up from this library.