Bug 29074: Do not set default expiration date for hold if DefaultHoldExpirationdatePeriod is left blank

If DefaultHoldExpirationdate is on and DefaultHoldExpirationdatePeriod
is blank, the blank is treated as a zero and all holds are created
with an expiration date of today.

This patch changes expiration dates storing so that if
DefaultHoldExpirationdatePeriod is left blank, expiration date is not
set. Users are informed about this with a note in syspref.

To test:
1. Set DefaultHoldExpirationdate on but leave
DefaultHoldExpirationdatePeriod blank.
2. Add hold for patron.
=> Note that expiration date is set as today.
3. Apply this patch
=> Confirm following note is now added after sysprefs:
"NOTE: If DefaultHoldExpirationdatePeriod is left blank
default expiration date is not set."
4. Add new hold for patron.
=> Note that expiration date is not set.

Also prove t/db_dependent/Hold.t.

Sponsored-by: Koha-Suomi Oy
Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Emmi Takkinen 2025-04-22 09:17:19 +03:00 committed by Katrin Fischer
parent cd7554157b
commit 3e50833bbe
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
3 changed files with 28 additions and 3 deletions

View File

@ -980,10 +980,14 @@ sub store {
sub _set_default_expirationdate {
my $self = shift;
my $period = C4::Context->preference('DefaultHoldExpirationdatePeriod') || 0;
my $period = C4::Context->preference('DefaultHoldExpirationdatePeriod');
my $timeunit = C4::Context->preference('DefaultHoldExpirationdateUnitOfTime') || 'days';
$self->expirationdate( dt_from_string( $self->reservedate )->add( $timeunit => $period ) );
if ( defined C4::Context->preference('DefaultHoldExpirationdatePeriod')
&& C4::Context->preference('DefaultHoldExpirationdatePeriod') ne '' )
{
$self->expirationdate( dt_from_string( $self->reservedate )->add( $timeunit => $period ) );
}
}
=head3 _move_to_old

View File

@ -1078,6 +1078,7 @@ Circulation:
months: months
years: years
- from reserve date.
- <br><strong>NOTE:</strong> If <a href="/cgi-bin/koha/admin/preferences.pl?op=search&searchfield=DefaultHoldExpirationdatePeriod">DefaultHoldExpirationdatePeriod</a> is left blank, no default expiration date is set.</br>
-
- When placing a hold via the staff interface default the pickup location to the
- pref: DefaultHoldPickupLocation

View File

@ -160,7 +160,7 @@ $schema->storage->txn_rollback();
subtest "store() tests" => sub {
plan tests => 7;
plan tests => 8;
$schema->storage->txn_begin();
@ -292,6 +292,26 @@ subtest "store() tests" => sub {
'Expiration date set same as patron_expiration_date after reverting holds waiting status.'
);
# Do not set expiration date for hold if no period is set
t::lib::Mocks::mock_preference( 'DefaultHoldExpirationdatePeriod', '' );
$hold = Koha::Hold->new(
{
biblionumber => $biblio->biblionumber,
itemnumber => $item->id,
reservedate => '2022-12-14',
waitingdate => '2022-12-14',
borrowernumber => $borrower->borrowernumber,
branchcode => $library->branchcode,
suspend => 0,
}
)->store;
$hold->discard_changes;
is(
$hold->expirationdate,
undef, 'Expiration date not set if "DefaultHoldExpirationdatePeriod" is left empty.'
);
$schema->storage->txn_rollback();
};