From a09679a262ef9441b155c5e84a9bed9b7cef28a9 Mon Sep 17 00:00:00 2001 From: Emily Lamancusa Date: Thu, 20 Jul 2023 13:41:15 -0400 Subject: [PATCH] Bug 34117: Remove side effect from get_expiry_date If get_expiry_date is passed a DateTime object as a parameter, it modifies and returns the original object. When memberentry.pl prefills the input fields for duplicating a patron, it passes the enrollment date object to get_expiry_date. This causes the enrollment date object to be modified with the expiry date value. This patch modifies get_expiry_date to clone the DateTime object that it receives as a parameter and return the clone, so that references to an enrollment date object can be passed in safely. To test: 1. Have or make a patron 2. Duplicate that patron 3. Before saving the new patron, scroll down to Registration Date and see that it's defaulting to a date in the future. 4. Apply patch and restart_all 5. Try duplicating a patron again 6. Registration Date should correctly set to today --- Koha/Patron/Category.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Koha/Patron/Category.pm b/Koha/Patron/Category.pm index 9eb6d26edc..335367b825 100644 --- a/Koha/Patron/Category.pm +++ b/Koha/Patron/Category.pm @@ -106,7 +106,7 @@ sub get_expiry_date { my ($self, $date ) = @_; if ( $self->enrolmentperiod ) { $date ||= dt_from_string; - $date = dt_from_string( $date ) unless ref $date; + $date = ref $date ? $date->clone() : dt_from_string( $date ); return $date->add( months => $self->enrolmentperiod, end_of_month => 'limit' ); } else { return $self->enrolmentperioddate; -- 2.34.1