Bug 34788: Make biblio creation optional

This patch rebases in the changes from bug 36618 to make biblio creation optional

Signed-off-by: Clemens Tubach <clemens.tubach@kit.edu>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Matt Blenkinsop 2024-04-17 14:22:29 +00:00 committed by Katrin Fischer
parent 3814437003
commit d31f453186
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
6 changed files with 78 additions and 75 deletions

View File

@ -76,9 +76,10 @@ sub process {
};
try {
my $column_headers = $args->{column_headers};
my $rows = $args->{rows};
my $package_id = $args->{package_id};
my $column_headers = $args->{column_headers};
my $rows = $args->{rows};
my $package_id = $args->{package_id};
my $create_linked_biblio = $args->{create_linked_biblio};
if ( scalar( @{$rows} ) == 0 ) {
push @messages, {
@ -118,7 +119,8 @@ sub process {
};
$failed_imports++;
} else {
my $imported_title = Koha::ERM::EHoldings::Title->new($formatted_title)->store;
my $imported_title = Koha::ERM::EHoldings::Title->new($formatted_title)
->store( { create_linked_biblio => $create_linked_biblio } );
create_linked_resource(
{
title => $imported_title,
@ -216,7 +218,7 @@ sub read_file {
my $file_content = defined( $file->{file_content} ) ? decode_base64( $file->{file_content} ) : "";
my $delimiter = $file->{filename} =~ /\.tsv$/ ? "\t" : ",";
my $quote_char = $file->{filename} =~ /\.tsv$/ ? "" : '"';
my $quote_char = $file->{filename} =~ /\.tsv$/ ? "\"" : "\"";
open my $fh, "<", \$file_content or die;
my $csv = Text::CSV_XS->new(
@ -422,10 +424,10 @@ sub is_file_too_large {
};
}
=head3
=head3 rescue_EBSCO_files
EBSCO have an incorrect spelling of "preceding_publication_title_id" in all of their KBART files ("preceeding" instead of "preceding").
This is very annoying because it means all of their KBART files fail to import using the current methodology.
This means all of their KBART files fail to import using the current methodology.
There is no simple way of finding out who the vendor is before importing so all KBART files from any vendor are going to have to be checked for this spelling and corrected.
=cut

View File

@ -272,9 +272,10 @@ sub import_from_list {
sub import_from_kbart_file {
my $c = shift or return;
my $import_data = $c->req->json;
my $file = $import_data->{file};
my $package_id = $import_data->{package_id};
my $import_data = $c->req->json;
my $file = $import_data->{file};
my $package_id = $import_data->{package_id};
my $create_linked_biblio = $import_data->{create_linked_biblio};
return try {
my @job_ids;
@ -306,10 +307,11 @@ sub import_from_kbart_file {
) if scalar(@invalid_columns) > 0;
my $params = {
column_headers => $column_headers,
rows => $rows,
package_id => $package_id,
file_name => $file->{filename}
column_headers => $column_headers,
rows => $rows,
package_id => $package_id,
file_name => $file->{filename},
create_linked_biblio => $create_linked_biblio
};
my $outcome = Koha::BackgroundJob::ImportKBARTFile::is_file_too_large( $params, $max_allowed_packet );
@ -347,5 +349,4 @@ sub import_from_kbart_file {
};
}
1;
1;

View File

@ -516,6 +516,8 @@
type: object
package_id:
type: string
create_linked_biblio:
type: boolean
additionalProperties: false
responses:
201:

View File

@ -1,4 +1,5 @@
[% USE Koha %]
[% USE raw %]
[% BLOCK report %]
[% SET report = job.report %]
@ -90,6 +91,5 @@
}
});
});
</script>
[% END %]

View File

@ -17,46 +17,55 @@
</ol>
</li>
</ul>
<h3>{{ $__("File") }}:</h3>
<div class="file_information">
<span v-if="!file.filename">
{{ $__("Select a file") }}
<input
type="file"
@change="selectFile($event)"
:id="`import_file`"
:name="`import_file`"
required
/>
</span>
<fieldset class="rows" id="package_list">
<h3>{{ $__("Select file for upload") }}:</h3>
<ol>
<li v-show="file.filename">
{{ $__("File name") }}:
<span>{{ file.filename }}</span>
<li>
<label for="import_file">{{ $__("File") }}:</label>
<input
type="file"
@change="selectFile($event)"
:id="`import_file`"
:name="`import_file`"
required
/>
</li>
<li>
<label for="package_id"
>{{ $__("To the following local package") }}:</label
>
<v-select
id="package_id"
v-model="package_id"
label="name"
:reduce="p => p.package_id"
:options="packages"
:clearable="false"
:required="!package_id"
>
<template #search="{ attributes, events }">
<input
:required="!package_id"
class="vs__search"
v-bind="attributes"
v-on="events"
/>
</template>
</v-select>
<span class="required">{{ $__("Required") }}</span>
</li>
<li>
<label for="create_linked_biblio"
>{{ $__("Create linked biblio record") }}:</label
>
<input
type="checkbox"
id="create_linked_biblio"
v-model="create_linked_biblio"
/>
</li>
</ol>
<fieldset id="package_list">
{{ $__("To the following local package") }}:
<v-select
v-model="package_id"
label="name"
:reduce="p => p.package_id"
:options="packages"
:clearable="false"
:required="!package_id"
>
<template #search="{ attributes, events }">
<input
:required="!package_id"
class="vs__search"
v-bind="attributes"
v-on="events"
/>
</template>
</v-select>
<span class="required">{{ $__("Required") }}</span>
</fieldset>
</div>
</fieldset>
<fieldset class="action">
<ButtonSubmit />
<a @click="clearForm()" role="button" class="cancel">{{
@ -81,6 +90,7 @@ export default {
},
packages: [],
package_id: null,
create_linked_biblio: false,
}
},
beforeCreate() {
@ -113,6 +123,7 @@ export default {
const importData = {
file: this.file,
package_id: this.package_id,
create_linked_biblio: this.create_linked_biblio,
}
client.localTitles.import_kbart(importData).then(
success => {
@ -162,6 +173,7 @@ export default {
file_content: null,
}
this.package_id = null
this.create_linked_biblio = false
},
},
components: {

View File

@ -194,7 +194,7 @@ Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bb
};
subtest 'process' => sub {
plan tests => 12;
plan tests => 13;
$schema->storage->txn_begin;
@ -364,26 +364,12 @@ Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bb
is( $job4->report->{duplicates_found}, 1, 'One duplicate found' );
is( $job4->report->{titles_imported}, 0, 'No titles were imported' );
is( $job4->report->{failed_imports}, 1, 'One failure found' );
is_deeply(
$job4->messages,
[
{
'type' => 'error',
'title' => 'Nature Plants',
'error_message' =>
'DBIx::Class::Row::store_column(): No such column \'unknown_field\' on Koha::Schema::Result::ErmEholdingsTitle at /kohadevbox/koha/Koha/Object.pm line 79
',
'code' => 'title_failed'
},
{
'code' => 'title_already_exists',
'error_message' => undef,
'title' => 'Nature Astronomy',
'type' => 'warning'
}
],
'One duplicate message and one failure message for an incorrect column'
is(
index( @{ $job4->messages }[0]->{error_message}, 'No such column \'unknown_field\'' ) > 0, 1,
'Error message for an unknown column'
);
is( @{ $job4->messages }[1]->{code}, 'title_already_exists', 'Error message for a duplicate title' );
$schema->storage->txn_rollback;
}
}