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 <david@davidnind.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 0d2052088e)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit 3a5f4d1701)
Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com>
(cherry picked from commit 4afe2a2b0a)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Aleisha Amohia 2023-06-13 17:29:22 +12:00 committed by Lucas Gass
parent e62f7ead03
commit 8023763ecf
1 changed files with 11 additions and 8 deletions

View File

@ -38,10 +38,14 @@ use C4::Log;
cronlogaction();
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({
@ -50,16 +54,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' });
}