From 3a5f4d170117e264ed15c8cf40c799ddfd2f6299 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Tue, 13 Jun 2023 17:29:22 +1200 Subject: [PATCH] Bug 33992: Only consider the date when auto-expiring problematic recalls This patch carries this fix into the misc/cronjobs/recalls/expire_recalls.pl cronjob so that recalls are automatically expired when they have been waiting a problematic number of days, not considering hours, as expected. To test, follow the test plan from the first patch. This will set you up with a waiting problematic recall. Run the cronjob manually perl misc/cronjobs/recalls/expire_recalls.pl Refresh your 'Recalls awaiting pickup' page. Your problematic recall should be gone/expired. Expiration dates will apply when expiring any 'unfulfilled' recall i.e. newly requested, overdue to be returned, and awaiting pickup. Sponsored-by: Auckland University of Technology Signed-off-by: David Nind Signed-off-by: Katrin Fischer Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 0d2052088ec62654f81154be0b9916b8e8630891) Signed-off-by: Fridolin Somers --- misc/cronjobs/recalls/expire_recalls.pl | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/misc/cronjobs/recalls/expire_recalls.pl b/misc/cronjobs/recalls/expire_recalls.pl index 7e57398614..71d9c2bcae 100755 --- a/misc/cronjobs/recalls/expire_recalls.pl +++ b/misc/cronjobs/recalls/expire_recalls.pl @@ -40,10 +40,14 @@ my $command_line_options = join(" ",@ARGV); cronlogaction({ info => $command_line_options }); my $recalls = Koha::Recalls->search({ completed => 0 }); +my $today = dt_from_string()->truncate( to => 'day' ); while( my $recall = $recalls->next ) { - if ( ( $recall->requested or $recall->overdue ) and $recall->expiration_date and dt_from_string( $recall->expiration_date ) < dt_from_string() ){ - # recall is requested or overdue and has surpassed the specified expiration date - $recall->set_expired({ interface => 'COMMANDLINE' }); + if ( ( $recall->requested or $recall->overdue or $recall->waiting ) and $recall->expiration_date ) { + my $expiration_date = dt_from_string( $recall->expiration_date )->truncate( to => 'day' ); + if ( $expiration_date < $today ){ + # recall is requested or overdue and has surpassed the specified expiration date + $recall->set_expired({ interface => 'COMMANDLINE' }); + } } if ( $recall->waiting ) { my $recall_shelf_time = Koha::CirculationRules->get_effective_rule({ @@ -52,16 +56,15 @@ while( my $recall = $recalls->next ) { branchcode => $recall->pickup_library_id, rule_name => 'recall_shelf_time', }); - my $waitingdate = dt_from_string( $recall->waiting_date ); - my $now = dt_from_string(); - my $days_waiting = $now->subtract_datetime( $waitingdate ); - if ( defined $recall_shelf_time and $recall_shelf_time->rule_value > 0 ) { + my $waitingdate = dt_from_string( $recall->waiting_date )->truncate( to => 'day' ); + my $days_waiting = $today->subtract_datetime( $waitingdate ); + if ( defined $recall_shelf_time and $recall_shelf_time->rule_value >= 0 ) { if ( $days_waiting->days > $recall_shelf_time->rule_value ) { # recall has been awaiting pickup for longer than the circ rules allow $recall->set_expired({ interface => 'COMMANDLINE' }); } } else { - if ( $days_waiting->days > C4::Context->preference('RecallsMaxPickUpDelay') ) { + if ( $days_waiting->days >= C4::Context->preference('RecallsMaxPickUpDelay') ) { # recall has been awaiting pickup for longer than the syspref allows $recall->set_expired({ interface => 'COMMANDLINE' }); } -- 2.39.5