Bug 34822: Process real time holds along with indexing

Current code already skips indexing when adding record to instead index in a single call. This patch pdates the code to do the same thing for real time holds queue updates.

Note: Newly added records do not need to be updated as they won't have holds yet.

To test:
1 - Have a marc file with several records that match records in your catalog
    You can export part of your catalog to generate one
2 - Set system preference:  RealTimeHoldsQueue to 'enable'
3 - Stage and import file, make sure you are matching and overlaying
4 - Go to Administration->Manage jobs
5 - Note a batch update for each updated record
6 - Apply patch
7 - Repeat
8 - Note a single job added for the entire batch containing only updated records

Signed-off-by: Sam Lau <samalau@gmail.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Nick Clemens 2023-09-18 17:25:15 +00:00 committed by Tomas Cohen Arazi
parent 5b9dbe558f
commit b50d43c14e
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F

View file

@ -34,6 +34,7 @@ use C4::Items qw( AddItemFromMarc ModItemFromMarc );
use C4::Charset qw( MarcToUTF8Record SetUTF8Flag StripNonXmlChars );
use C4::AuthoritiesMarc qw( AddAuthority GuessAuthTypeCode GetAuthorityXML ModAuthority DelAuthority GetAuthorizedHeading );
use C4::MarcModificationTemplates qw( ModifyRecordWithTemplate );
use Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue;
use Koha::Items;
use Koha::SearchEngine;
use Koha::SearchEngine::Indexer;
@ -568,6 +569,7 @@ sub BatchCommitRecords {
my $rec_num = 0;
my @biblio_ids;
my @updated_ids;
while (my $rowref = $sth->fetchrow_hashref) {
$record_type = $rowref->{'record_type'};
@ -662,10 +664,12 @@ sub BatchCommitRecords {
$overlay_framework // $oldbiblio->frameworkcode,
{
overlay_context => $context,
skip_record_index => 1
skip_record_index => 1,
skip_holds_queue => 1,
}
);
push @biblio_ids, $recordid;
push @updated_ids, $recordid;
$query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
if ($item_result eq 'create_new' || $item_result eq 'replace') {
@ -717,10 +721,12 @@ sub BatchCommitRecords {
# final commit should be before Elastic background indexing in order to find job data
$schema->txn_commit;
if ( @biblio_ids ) {
my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::BIBLIOS_INDEX });
if (@biblio_ids) {
my $indexer = Koha::SearchEngine::Indexer->new( { index => $Koha::SearchEngine::BIBLIOS_INDEX } );
$indexer->index_records( \@biblio_ids, "specialUpdate", "biblioserver" );
}
Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue->new->enqueue( { biblio_ids => \@updated_ids } )
if ( @updated_ids && C4::Context->preference('RealTimeHoldsQueue') );
return ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored);
}