From a8db488f24ddbf46cee6073d6c5c65bc760d8d73 Mon Sep 17 00:00:00 2001 From: Hammat Wele Date: Tue, 15 Apr 2025 13:30:48 +0000 Subject: [PATCH] Bug 17015: Special update to fix bz39631 with DiscreteCalendar --- misc/cronjobs/longoverdue.pl | 44 +++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/misc/cronjobs/longoverdue.pl b/misc/cronjobs/longoverdue.pl index d23df572be..16bda1bb77 100755 --- a/misc/cronjobs/longoverdue.pl +++ b/misc/cronjobs/longoverdue.pl @@ -38,6 +38,7 @@ use Koha::ItemTypes; use Koha::Patron::Categories; use Koha::Patrons; use Koha::Script -cron; +use Koha::DateUtils qw( dt_from_string ); my $lost; # key=lost value, value=num days. my ( $charge, $verbose, $confirm, $quiet ); @@ -350,8 +351,18 @@ sub longoverdue_sth { SELECT items.itemnumber, borrowernumber, date_due, itemlost FROM issues, items WHERE items.itemnumber = issues.itemnumber - AND DATE_SUB(CURDATE(), INTERVAL ? DAY) > date_due - AND DATE_SUB(CURDATE(), INTERVAL ? DAY) <= date_due + "; + if ( !C4::Context->preference('OverdueNoticeCalendar') ) { + $query .= " + AND DATE_SUB(CURDATE(), INTERVAL ? DAY) > date_due + AND DATE_SUB(CURDATE(), INTERVAL ? DAY) <= date_due + "; + } else { + $query .= " + AND TO_DAYS(NOW())-TO_DAYS(issues.date_due) >= 0 + "; + } + $query .= " AND itemlost <> ? $skip_lost_values_sql ORDER BY date_due @@ -471,7 +482,11 @@ foreach my $startrange ( sort keys %$lost ) { $verbose and printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i, $startrange, $endrange, $date2, $date1, $lostvalue; - $sth_items->execute( $startrange, $endrange, $lostvalue ); + if ( C4::Context->preference('OverdueNoticeCalendar') ) { + $sth_items->execute($lostvalue); + } else { + $sth_items->execute( $startrange, $endrange, $lostvalue ); + } $count = 0; ITEM: while ( my $row = $sth_items->fetchrow_hashref ) { my $patron; @@ -498,6 +513,29 @@ foreach my $startrange ( sort keys %$lost ) { } next ITEM unless ( $branches_to_process{$lib} ); } + if ( C4::Context->preference('OverdueNoticeCalendar') ) { + my $lib; + if ( $circ_control_pref eq 'PatronLibrary' ) { + $patron ||= Koha::Patrons->find( $row->{borrowernumber} ); + $lib = $patron->branchcode(); + } elsif ( $circ_control_pref eq 'PickupLibrary' ) { + $lib = C4::Context->userenv->{'branch'}; + } else { # ( $circ_control_pref eq 'ItemHomeLibrary' ) + if ( $circ_control_pref eq 'homebranch' ) { + $lib = Koha::Items->find( $row->{itemnumber} )->homebranch(); + } else { # ( $circ_control_pref eq 'holdingbranch' ) + $lib = Koha::Items->find( $row->{itemnumber} )->holdingbranch(); + } + } + my $calendar = Koha::DiscreteCalendar->new({ branchcode => $lib }); + my $date_to_run = dt_from_string(); + my $days_between = $calendar->days_between( dt_from_string( $row->{date_due} ), $date_to_run ); + $days_between = $days_between->in_units('days'); + my $longoverdue_days = C4::Context->preference('DefaultLongOverdueDays'); + if ( $days_between < $longoverdue_days ) { + next; + } + } if ($filter_itemtypes) { my $it = uc Koha::Items->find( $row->{itemnumber} )->effective_itemtype(); next ITEM unless ( $itemtype_to_process{$it} ); -- 2.34.1