From f9759f40067eec85144c8ca44259370cbb4da564 Mon Sep 17 00:00:00 2001 From: Lisette Scheer Date: Tue, 30 Sep 2025 16:16:41 +0000 Subject: [PATCH] Bug 35700: Holds reminder cronjob --triggered switch does not work as intended if the day to send notice hits concurrent holidays If the holds reminder cronjob would send a reminder on a holiday,when holidays are taken into account, it also will send it on the subsequent holidays and the first open day. This bugfix adds a check to the cron when --holidays is set to skip sending the notices for that library if today is a holiday. To Test: Before applying: 1. Create a hold for a patron (I used patron 23529000035676 and 39999000000252) 2. Ensure your patron has an email address set and the hold reminder email selected. 3. Set the hold to waiting by checking it and confirming the hold. 4. In Tools->Calendar add a holiday to yesterday and a seperate holiday to today. 5. On the command line (the date should be set to 5 days ago for my commands to work and any dates adjusted accordingly) koha-mysql kohadev update reserves set waitingdate="2025-09-25" exit perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays --date 2025-09-29 6. Observe that 1 notice would have sent to your patron 7. On the command line perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays 8. Observe that 1 notice would have sent to your patron 9. On the command line perl misc/cronjobs/holds/holds_reminder.pl -days 3 -t -v -holidays --date 2025-10-01 10. Observe that 1 notice would have sent to your patron 11. Apply patches 12. Repeat the last command from step 5 and step 7 13. Observe that no notice should be sent for your patron 14. Repeat step 7 15. Observe that a notice should be sent for your patron. 16. Run perl misc/cronjobs/holds/holds_reminder.pl -days 5 -t -v 17. Confirm the notice should be sent for your patron 18. Sign off --- misc/cronjobs/holds/holds_reminder.pl | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/misc/cronjobs/holds/holds_reminder.pl b/misc/cronjobs/holds/holds_reminder.pl index 6269301ee99..c5c87278ff6 100755 --- a/misc/cronjobs/holds/holds_reminder.pl +++ b/misc/cronjobs/holds/holds_reminder.pl @@ -42,7 +42,6 @@ holds_reminder.pl -lettercode [ -c ][ -v ][ -library ][ -library ... ] [ -days ][ -mtt ... ][ -holidays ] - [ -date ] Options: -help brief help message @@ -120,7 +119,6 @@ If omitted the patron's messaging preferences for Hold notices will be used. If supplied the notice types will be force sent even if patron has not selected hold notices Email and SMS will fall back to print if there is no valid info in the patron's account - =back =head1 DESCRIPTION @@ -190,7 +188,7 @@ GetOptions( 'library=s' => \@branchcodes, 'date=s' => \$date_input, 'holidays' => \$use_calendar, - 'mtt=s' => \@mtts + 'mtt=s' => \@mtts, ); pod2usage(1) if $help; pod2usage( -verbose => 2 ) if $man; @@ -243,9 +241,15 @@ foreach my $branchcode (@branchcodes) { #BEGIN BRANCH LOOP # If respecting calendar get the correct waiting since date my $waiting_date; if ($use_calendar) { + my $today = $date_to_run; my $calendar = Koha::Calendar->new( branchcode => $branchcode, days_mode => 'Calendar' ); - my $duration = DateTime::Duration->new( days => -$days ); - $waiting_date = $calendar->addDays( $date_to_run, $duration ); #Add negative of days + + #if today is a holiday skip sending the message + next if $calendar->is_holiday($today); + { + my $duration = DateTime::Duration->new( days => -$days ); + $waiting_date = $calendar->addDays( $date_to_run, $duration ); #Add negative of days + } } else { $waiting_date = $waiting_date_static; } -- 2.39.5