Bug 33611: Ensure dt_from_string always returns a new object

This patch alters dt_from_string to pass a cloned object if called
on an existing date time object

This resolves an issue where a holds reserve date was being altered when
the default expiration date was set

To test:
1 - Set DefaultHoldExpiration to Set
2 - Set DefaultHoldExpirationPeriod to 365
3 - Set DefaultHoldExpirationunitOfTimeToDays
4 - Place a hold
5 - Note reserve date is 1 year in the future, same as expiration
6 - Apply patch
7 - Restart all
8 - Place another hold
9 - Note reserve date is set to today

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Hinemoea Viault <hinemoea.viault@inlibro.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit ca784d740d)
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
This commit is contained in:
Nick Clemens 2023-04-27 13:02:52 +00:00 committed by Matt Blenkinsop
parent 59e55c22ef
commit 43cce2fbec

View file

@ -68,8 +68,8 @@ sub dt_from_string {
$date_format = C4::Context->preference('dateformat') unless $date_format;
if ( ref($date_string) eq 'DateTime' ) { # already a dt return it
return $date_string;
if ( ref($date_string) eq 'DateTime' ) { # already a dt return a clone
return $date_string->clone();
}
my $regex;