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 commit0d2052088e) Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> (cherry picked from commit3a5f4d1701) Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com> (cherry picked from commit4afe2a2b0a) Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
e62f7ead03
commit
8023763ecf
|
|
@ -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' });
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue