Bug 14494: Prevent slow checkout if the patron does not have an expiry date
If a patron has a expiry date set to 9999-12-31 (for organizations for instance), the checkouts are very slow. It's caused by 2 different calls to DateTime in CanBookBeIssued: 1/ DateTime->new( year => 9999, month => 12, day => 31, time_zone => C4::Context->tz ); The time_zone should not be set (as it's done in Koha::DateUtils), set to UTC or floating tz. 2/ DateTime->compare($today, $expiry_dt) The comparaison of 2 DT with 1 related to 9999 is very slow, as you can imagine. For 1/ we need to call Koha::DateUtils::dt_from_string (actually, we should never call DateTime directly). For 2/ we just need to test if the date is != 9999, no need to compare it in this case. Test plan: Before this patch, confirm that the checkouts are slow if the patron has a dateexpiry set to 9999-12-31. update borrowers set dateexpiry="9999-12-31" where borrowernumber=42; After this patch, you should not see any regression when checking out items to an expired patron and to a valid patron. Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
This commit is contained in:
parent
a72262a950
commit
8d58acc565
1 changed files with 6 additions and 15 deletions
|
@ -767,24 +767,15 @@ sub CanBookBeIssued {
|
|||
if ( !defined $borrower->{dateexpiry} || $borrower->{'dateexpiry'} eq '0000-00-00') {
|
||||
$issuingimpossible{EXPIRED} = 1;
|
||||
} else {
|
||||
my ($y, $m, $d) = split /-/,$borrower->{'dateexpiry'};
|
||||
if ($y && $m && $d) { # are we really writing oinvalid dates to borrs
|
||||
my $expiry_dt = DateTime->new(
|
||||
year => $y,
|
||||
month => $m,
|
||||
day => $d,
|
||||
time_zone => C4::Context->tz,
|
||||
);
|
||||
$expiry_dt->truncate( to => 'day');
|
||||
my $today = $now->clone()->truncate(to => 'day');
|
||||
if (DateTime->compare($today, $expiry_dt) == 1) {
|
||||
$issuingimpossible{EXPIRED} = 1;
|
||||
}
|
||||
} else {
|
||||
carp("Invalid expity date in borr");
|
||||
my $expiry_dt = dt_from_string( $borrower->{dateexpiry}, 'sql' );
|
||||
$expiry_dt->truncate( to => 'day');
|
||||
my $today = $now->clone()->truncate(to => 'day');
|
||||
|
||||
if ($expiry_dt->year < 9999 && DateTime->compare($today, $expiry_dt) == 1) {
|
||||
$issuingimpossible{EXPIRED} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# BORROWER STATUS
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue