Bug 26993: Use a txn

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2025-10-06 13:28:08 +02:00 committed by Lucas Gass
parent aee88e8672
commit c05bc3ad7e
No known key found for this signature in database
GPG Key ID: 60B447398B0D36CA
1 changed files with 29 additions and 20 deletions

View File

@ -971,29 +971,38 @@ sub last_returned_by {
# Clean up the table by deleting older entries, depending on what StoreLastBorrower is set to
my $max_stored_borrowers = C4::Context->preference('StoreLastBorrower') || 0;
# If StoreLastBorrower is 0 or disabled, bail without storing anything. Also delete any remaining rows from the table.
if ( $max_stored_borrowers == 0 ) {
$self->_result->last_returned_by->delete_all;
return $self;
}
my $schema = Koha::Database->new->schema;
$schema->txn_do(
sub {
#Create an entry for last_returned_by
my $new_record = $self->_result->create_related(
'last_returned_by',
{ borrowernumber => $borrowernumber, itemnumber => $self->itemnumber }
# If StoreLastBorrower is 0 or disabled, bail without storing anything. Also delete any remaining rows from the table.
if ( $max_stored_borrowers == 0 ) {
$self->_result->last_returned_by->delete_all;
return $self;
}
# Create an entry for last_returned_by
my $new_record = $self->_result->create_related(
'last_returned_by',
{ borrowernumber => $borrowernumber, itemnumber => $self->itemnumber }
);
# Get all entries, ordered by newest first
my @all_entries = $self->_result->last_returned_by(
{},
{
order_by => [ { '-desc' => 'created_on' }, { '-desc' => 'id' } ],
}
)->all;
# If we have more than the limit, delete the excess oldest ones
if ( scalar(@all_entries) > $max_stored_borrowers ) {
my @entries_to_delete = splice( @all_entries, $max_stored_borrowers );
$_->delete for @entries_to_delete;
}
}
);
# Get all entries, ordered by newest first
my @all_entries =
$self->_result->last_returned_by( {}, { order_by => [ { '-desc' => 'created_on' }, { '-desc' => 'id' } ] } )
->all;
# If we have more than the limit, delete the excess oldest ones
if ( scalar(@all_entries) > $max_stored_borrowers ) {
my @entries_to_delete = splice( @all_entries, $max_stored_borrowers );
$_->delete for @entries_to_delete;
}
return $self;
}