Bug 26080: Use the task queue for batch delete authorities
Same as the first patch, for authorities Test plan: Delete authority records using the batch record deletion tool Confirm that the job is now delegated to the task queue and that everything else is working as before Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
7adae4930b
commit
d210b8b1ca
7 changed files with 154 additions and 13 deletions
|
@ -27,6 +27,7 @@ use Koha::Exceptions;
|
|||
use Koha::BackgroundJob::BatchUpdateBiblio;
|
||||
use Koha::BackgroundJob::BatchUpdateAuthority;
|
||||
use Koha::BackgroundJob::BatchDeleteBiblio;
|
||||
use Koha::BackgroundJob::BatchDeleteAuthority;
|
||||
|
||||
use base qw( Koha::Object );
|
||||
|
||||
|
@ -158,6 +159,8 @@ sub process {
|
|||
? Koha::BackgroundJob::BatchUpdateAuthority->process($args)
|
||||
: $job_type eq 'batch_biblio_record_deletion'
|
||||
? Koha::BackgroundJob::BatchDeleteBiblio->process($args)
|
||||
: $job_type eq 'batch_authority_record_deletion'
|
||||
? Koha::BackgroundJob::BatchDeleteAuthority->process($args)
|
||||
: Koha::Exceptions::Exception->throw('->process called without valid job_type');
|
||||
}
|
||||
|
||||
|
|
101
Koha/BackgroundJob/BatchDeleteAuthority.pm
Normal file
101
Koha/BackgroundJob/BatchDeleteAuthority.pm
Normal file
|
@ -0,0 +1,101 @@
|
|||
package Koha::BackgroundJob::BatchDeleteAuthority;
|
||||
|
||||
use Modern::Perl;
|
||||
use JSON qw( encode_json decode_json );
|
||||
|
||||
use Koha::BackgroundJobs;
|
||||
use Koha::DateUtils qw( dt_from_string );
|
||||
use C4::AuthoritiesMarc;
|
||||
|
||||
use base 'Koha::BackgroundJob';
|
||||
|
||||
sub job_type {
|
||||
return 'batch_authority_record_deletion';
|
||||
}
|
||||
|
||||
sub process {
|
||||
my ( $self, $args ) = @_;
|
||||
|
||||
my $job_type = $args->{job_type};
|
||||
|
||||
my $job = Koha::BackgroundJobs->find( $args->{job_id} );
|
||||
|
||||
if ( !exists $args->{job_id} || !$job || $job->status eq 'cancelled' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
# FIXME If the job has already been started, but started again (worker has been restart for instance)
|
||||
# Then we will start from scratch and so double delete the same records
|
||||
|
||||
my $job_progress = 0;
|
||||
$job->started_on(dt_from_string)
|
||||
->progress($job_progress)
|
||||
->status('started')
|
||||
->store;
|
||||
|
||||
my $mmtid = $args->{mmtid};
|
||||
my @record_ids = @{ $args->{record_ids} };
|
||||
|
||||
my $report = {
|
||||
total_records => scalar @record_ids,
|
||||
total_success => 0,
|
||||
};
|
||||
my @messages;
|
||||
my $schema = Koha::Database->new->schema;
|
||||
RECORD_IDS: for my $record_id ( sort { $a <=> $b } @record_ids ) {
|
||||
|
||||
last if $job->get_from_storage->status eq 'cancelled';
|
||||
|
||||
next unless $record_id;
|
||||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
my $authid = $record_id;
|
||||
eval { C4::AuthoritiesMarc::DelAuthority({ authid => $authid }) };
|
||||
if ( $@ ) {
|
||||
push @messages, {
|
||||
type => 'error',
|
||||
code => 'authority_not_deleted',
|
||||
authid => $authid,
|
||||
error => ($@ ? $@ : 0),
|
||||
};
|
||||
$schema->storage->txn_rollback;
|
||||
next;
|
||||
} else {
|
||||
push @messages, {
|
||||
type => 'success',
|
||||
code => 'authority_deleted',
|
||||
authid => $authid,
|
||||
};
|
||||
$report->{total_success}++;
|
||||
$schema->storage->txn_commit;
|
||||
}
|
||||
|
||||
$job->progress( ++$job_progress )->store;
|
||||
}
|
||||
|
||||
my $job_data = decode_json $job->data;
|
||||
$job_data->{messages} = \@messages;
|
||||
$job_data->{report} = $report;
|
||||
|
||||
$job->ended_on(dt_from_string)
|
||||
->data(encode_json $job_data);
|
||||
$job->status('finished') if $job->status ne 'cancelled';
|
||||
$job->store;
|
||||
}
|
||||
|
||||
sub enqueue {
|
||||
my ( $self, $args) = @_;
|
||||
|
||||
# TODO Raise exception instead
|
||||
return unless exists $args->{record_ids};
|
||||
|
||||
my @record_ids = @{ $args->{record_ids} };
|
||||
|
||||
$self->SUPER::enqueue({
|
||||
job_size => scalar @record_ids,
|
||||
job_args => {record_ids => \@record_ids,}
|
||||
});
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,42 @@
|
|||
[% BLOCK report %]
|
||||
[% SET report = job.report %]
|
||||
[% IF report %]
|
||||
[% IF report.total_records == report.total_success %]
|
||||
<div class="dialog message">
|
||||
All records have been deleted successfully!
|
||||
</div>
|
||||
[% ELSIF report.total_success == 0 %]
|
||||
<div class="dialog message">
|
||||
No record has been deleted. An error occurred.
|
||||
</div>
|
||||
[% ELSE %]
|
||||
<div class="dialog message">
|
||||
[% report.total_success | html %] / [% report.total_records | html %] records have been deleted successfully but some errors occurred.
|
||||
</div>
|
||||
[% END %]
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
[% BLOCK detail %]
|
||||
[% FOR m IN job.messages %]
|
||||
<div class="dialog message">
|
||||
[% IF m.type == 'success' %]
|
||||
<i class="fa fa-check success"></i>
|
||||
[% ELSIF m.type == 'warning' %]
|
||||
<i class="fa fa-warning warn"></i>
|
||||
[% ELSIF m.type == 'error' %]
|
||||
<i class="fa fa-exclamation error"></i>
|
||||
[% END %]
|
||||
[% IF m.code == 'authority_not_exists' %]
|
||||
The authority id [% m.authid | html %] does not exist in the database.
|
||||
[% ELSIF m.code == 'authority_not_deleted' %]
|
||||
Authority record [% m.authid | html %] was not deleted. An error occurred.
|
||||
[% ELSIF m.code == 'authority_deleted' %]
|
||||
Authority [% m.authid | html %] has been deleted successfully.
|
||||
[% END %]
|
||||
</div>
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
[% BLOCK js %]
|
||||
[% END %]
|
|
@ -166,6 +166,7 @@
|
|||
[% CASE 'batch_biblio_record_modification' %]Batch bibliographic record modification
|
||||
[% CASE 'batch_biblio_record_deletion' %]Batch bibliographic record record deletion
|
||||
[% CASE 'batch_authority_record_modification' %]Batch authority record modification
|
||||
[% CASE 'batch_authority_record_deletion' %]Batch authority record deletion
|
||||
[% CASE %][% job.type | html %]
|
||||
[% END %]
|
||||
</td>
|
||||
|
|
|
@ -43,13 +43,14 @@
|
|||
The biblionumber [% message.biblionumber | html %] does not exist in the database.
|
||||
[% ELSIF message.code == 'authority_not_exists' %]
|
||||
The authority id [% message.authid | html %] does not exist in the database.
|
||||
[% ELSIF message.code == 'authority_not_deleted' %]
|
||||
Authority record [% message.authid | html %] was not deleted. An error occurred.
|
||||
[% ELSIF message.code == 'authority_deleted' %]
|
||||
Authority [% message.authid | html %] has been deleted successfully.
|
||||
[% ELSIF message.code == 'cannot_enqueue_job' %]
|
||||
Cannot enqueue this job.
|
||||
[% ELSIF message.code == 'biblio_not_exists' %]
|
||||
Bibliographic record [% message.biblionumber | html %] does not exist in the database.
|
||||
[% ELSIF message.code == 'authority_not_exists' %]
|
||||
Authority record [% message.authid | html %] does not exist in the database.
|
||||
[% END %]
|
||||
|
||||
[% IF message.error %]
|
||||
(The error was: [% message.error | html %], see the Koha log file for more information).
|
||||
[% END %]
|
||||
|
@ -198,15 +199,6 @@
|
|||
[% ELSE %]
|
||||
There are no record ids defined.
|
||||
[% END %]
|
||||
[% ELSIF op == 'report' %]
|
||||
[% IF report.total_records == report.total_success %]
|
||||
All records have been deleted successfully!
|
||||
[% ELSIF report.total_success == 0 %]
|
||||
No record has been deleted. An error occurred.
|
||||
[% ELSE %]
|
||||
[% report.total_success | html %] / [% report.total_records | html %] records have been deleted successfully but some errors occurred.
|
||||
[% END %]
|
||||
<p><a href="/cgi-bin/koha/tools/batch_delete_records.pl" title="New batch record deletion">New batch record deletion</a></p>
|
||||
[% ELSIF op == 'enqueued' %]
|
||||
<div class="dialog message">
|
||||
<p>The job has been enqueued! It will be processed as soon as possible.</p>
|
||||
|
|
|
@ -32,6 +32,7 @@ my @job_types = qw(
|
|||
batch_biblio_record_modification
|
||||
batch_authority_record_modification
|
||||
batch_biblio_record_deletion
|
||||
batch_authority_record_deletion
|
||||
);
|
||||
|
||||
if ( $conn ) {
|
||||
|
|
|
@ -35,6 +35,7 @@ use Koha::Authorities;
|
|||
use Koha::Biblios;
|
||||
use Koha::Items;
|
||||
use Koha::BackgroundJob::BatchDeleteBiblio;
|
||||
use Koha::BackgroundJob::BatchDeleteAuthority;
|
||||
|
||||
my $input = CGI->new;
|
||||
my $op = $input->param('op') // q|form|;
|
||||
|
|
Loading…
Reference in a new issue