Bug 30195: Search by ISBN if it is provided in suggestion

When a patron enters an ISBN/ISSN when suggesting a new purchase, the
ISBN is used to find duplicates. Title/Author are ignored (as patrons
might misspell them, and the ISBN provides a better way to find
duplicates)

Test Plan:
* in the OPAC, go to /cgi-bin/koha/opac-suggestions.pl
* Click "new purchase suggestion"
* Enter any title
* Enter an ISBN that exists in your library
* Click "Submit your suggestion"
-> A new purchase suggestion has been submitted

* Apply the patch!

* Again start a new purchase suggestion, enter any title and the
  duplicate ISBN, and Submit
* You should see the note "A similar document already exists: ..."

Please note that the title should not be required when entering an ISBN,
but as the list of required fields is managed via OPACSuggestionMandatoryFields
I fear that it's rather complicated to make title an optional required
field if isbn is provided.

I also added a simple non-DB test case to t/db_dependent/Suggestions.t
(in a subtest at the end), but could not actually run it as I haven't
gotten around to set up / try a testing Koha dev env...

Sponsored-by: Steiermärkische Landesbibliothek
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Thomas Klausner 2022-03-15 16:00:48 +01:00 committed by Tomas Cohen Arazi
parent b6dcd3cbd3
commit f1e29b18ea
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
3 changed files with 42 additions and 9 deletions

View File

@ -615,19 +615,29 @@ sub MarcRecordFromNewSuggestion {
my ($suggestion) = @_;
my $record = MARC::Record->new();
my ($title_tag, $title_subfield) = GetMarcFromKohaField('biblio.title', '');
$record->append_fields(
MARC::Field->new($title_tag, ' ', ' ', $title_subfield => $suggestion->{title})
);
my ($author_tag, $author_subfield) = GetMarcFromKohaField('biblio.author', '');
if ($record->field( $author_tag )) {
$record->field( $author_tag )->add_subfields( $author_subfield => $suggestion->{author} );
if (my $isbn = $suggestion->{isbn}) {
for my $field (qw(biblioitems.isbn biblioitems.issn)) {
my ($tag, $subfield) = GetMarcFromKohaField($field, '');
$record->append_fields(
MARC::Field->new($tag, ' ', ' ', $subfield => $isbn)
);
}
}
else {
my ($title_tag, $title_subfield) = GetMarcFromKohaField('biblio.title', '');
$record->append_fields(
MARC::Field->new($author_tag, ' ', ' ', $author_subfield => $suggestion->{author})
MARC::Field->new($title_tag, ' ', ' ', $title_subfield => $suggestion->{title})
);
my ($author_tag, $author_subfield) = GetMarcFromKohaField('biblio.author', '');
if ($record->field( $author_tag )) {
$record->field( $author_tag )->add_subfields( $author_subfield => $suggestion->{author} );
}
else {
$record->append_fields(
MARC::Field->new($author_tag, ' ', ' ', $author_subfield => $suggestion->{author})
);
}
}
my ($it_tag, $it_subfield) = GetMarcFromKohaField('biblioitems.itemtype', '');

View File

@ -132,6 +132,7 @@ if ( $op =~ /save/i ) {
title => $suggestion_only->{title},
author => $suggestion_only->{author},
itemtype => $suggestion_only->{itemtype},
isbn => $suggestion_only->{isbn},
});
my $manager = Koha::Patrons->find( $suggestion_only->{managedby} );

View File

@ -648,4 +648,26 @@ subtest 'ModSuggestion should work on suggestions without a suggester' => sub {
is( $suggestion->{note}, "Test note", "ModSuggestion works on suggestions without a suggester" );
};
subtest 'Suggestion with ISBN' => sub {
my $suggestion_with_isbn = {
isbn => '1940997232',
title => "The Clouds",
author => "Aristophanes",
};
my $record = MarcRecordFromNewSuggestion( $suggestion_with_isbn );
is("MARC::Record", ref($record), "MarcRecordFromNewSuggestion should return a MARC::Record object");
my ($isbn_tag, $isbn_subfield) = C4::Biblio::GetMarcFromKohaField('biblioitems.isbn', '');
is($record->field( $isbn_tag )->subfield( $isbn_subfield ), "1940997232", "ISBN Record from suggestion ISBN should be '1940997232'");
my ($issn_tag, $issn_subfield) = C4::Biblio::GetMarcFromKohaField('biblioitems.issn', '');
is($record->field( $issn_tag )->subfield( $issn_subfield ), "1940997232", "ISSN Record from suggestion ISBN should also be '1940997232'");
my ($title_tag, $title_subfield) = C4::Biblio::GetMarcFromKohaField('biblio.title', '');
is($record->field( $title_tag), undef, "Record from suggestion title should be empty");
my ($author_tag, $author_subfield) = C4::Biblio::GetMarcFromKohaField('biblio.author', '');
is($record->field( $author_tag), undef, "Record from suggestion author should be emtpy");
}
$schema->storage->txn_rollback;