Bug 35588: Scope authorised value desc lookup according to field/subfield
This patch ensures that the authorised value descriptions looked up are for the correct field/subfield designated in the CSV profile. Test plan: 0. Do not apply the patch yet! 1. Go to http://localhost:8081/cgi-bin/koha/tools/csv-profiles.pl 2. Add a CSV profile with the default values and using the following for the "Profile MARC fields": 000|001|003|005|006|007|008|010|015|016|020|022|040|050|082|100|110| 111|130|240|243|245|246|247|250|260|300|336|337|338|440|490|500|501| 505|520|530|600|610|611|630|648|650|651|690|700|710|711|856|887|942|995 3. Create a new List 4. Add all the database's bibs to that list using SQL like the following (where the shelfnumber equals the number for your list): insert into virtualshelfcontents (shelfnumber,biblionumber,borrowernumber) select 1,biblionumber,51 from biblio; 5. Go to that list in the staff interface 6. Download that list using your CSV profile 7. Apply the patch 8. koha-plack --reload kohadev 9. Download that list using your CSV profile 10. Note that the output is a little slower, but still quick enough. 11. Note that the output is a bit different. For records like "Gairm", the output will end in "1" instead of "Yes". This is correct, because this subfield isn't an authorised value!!! Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Julian Maurice <julian.maurice@biblibre.com> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
parent
ca754a2c5e
commit
f53ebe874e
10
C4/Record.pm
10
C4/Record.pm
|
|
@ -592,20 +592,26 @@ sub marcrecord2csv {
|
|||
|
||||
# Or a field
|
||||
} else {
|
||||
my $authvalues = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => $frameworkcode, tagfield => $tag->{fieldtag}, } );
|
||||
|
||||
foreach my $field ( @fields ) {
|
||||
my $value;
|
||||
|
||||
# If it is a control field
|
||||
if ($field->is_control_field) {
|
||||
my $authvalues = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => $frameworkcode, tagfield => $tag->{fieldtag}, } );
|
||||
$value = defined $authvalues->{$field->as_string} ? $authvalues->{$field->as_string} : $field->as_string;
|
||||
} else {
|
||||
# If it is a field, we gather all subfields, joined by the subfield separator
|
||||
my @subvaluesarray;
|
||||
my @subfields = $field->subfields;
|
||||
foreach my $subfield (@subfields) {
|
||||
my $authvalues = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{
|
||||
frameworkcode => $frameworkcode, tagfield => $tag->{fieldtag},
|
||||
tagsubfield => $subfield->[0],
|
||||
}
|
||||
);
|
||||
push (@subvaluesarray, defined $authvalues->{$subfield->[1]} ? $authvalues->{$subfield->[1]} : $subfield->[1]);
|
||||
}
|
||||
$value = join ($subfieldseparator, @subvaluesarray);
|
||||
|
|
|
|||
|
|
@ -156,17 +156,23 @@ subtest 'search_by_*_field + find_by_koha_field + get_description + authorised_v
|
|||
$mss->delete if $mss;
|
||||
$mss = Koha::MarcSubfieldStructures->search( { tagfield => 952, tagsubfield => '5', frameworkcode => '' } );
|
||||
$mss->delete if $mss;
|
||||
$mss = Koha::MarcSubfieldStructures->search( { tagfield => '003', frameworkcode => '' } );
|
||||
$mss->delete if $mss;
|
||||
Koha::AuthorisedValueCategory->new( { category_name => 'TEST' } )->store;
|
||||
Koha::AuthorisedValueCategory->new( { category_name => 'CONTROL_TEST' } )->store;
|
||||
Koha::AuthorisedValueCategory->new( { category_name => 'ANOTHER_4_TESTS' } )->store;
|
||||
Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'c', frameworkcode => '', authorised_value => 'TEST', kohafield => 'items.location' } )->store;
|
||||
Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'c', frameworkcode => 'ACQ', authorised_value => 'TEST', kohafield => 'items.location' } )->store;
|
||||
Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'd', frameworkcode => '', authorised_value => 'ANOTHER_4_TESTS', kohafield => 'items.another_field' } )->store;
|
||||
Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => '5', frameworkcode => '', authorised_value => 'restricted_for_testing', kohafield => 'items.restricted' } )->store;
|
||||
Koha::MarcSubfieldStructure->new( { tagfield => '003', frameworkcode => '', authorised_value => 'CONTROL_TEST', } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_1', lib => 'location_1' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_2', lib => 'location_2' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_3', lib => 'location_3' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'ANOTHER_4_TESTS', authorised_value => 'an_av' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'ANOTHER_4_TESTS', authorised_value => 'another_av' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'CONTROL_TEST', authorised_value => 'lib1', lib => 'lib1' } )->store;
|
||||
Koha::AuthorisedValue->new( { category => 'CONTROL_TEST', authorised_value => 'lib2', lib => 'lib2' } )->store;
|
||||
subtest 'search_by_marc_field' => sub {
|
||||
plan tests => 4;
|
||||
my $avs;
|
||||
|
|
@ -254,7 +260,23 @@ subtest 'search_by_*_field + find_by_koha_field + get_description + authorised_v
|
|||
};
|
||||
|
||||
subtest 'get_descriptions_by_marc_field' => sub {
|
||||
plan tests => 1;
|
||||
plan tests => 4;
|
||||
|
||||
my $control_descriptions = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => '', tagfield => '003', } );
|
||||
is_deeply(
|
||||
$control_descriptions,
|
||||
{
|
||||
'lib1' => 'lib1',
|
||||
'lib2' => 'lib2',
|
||||
},
|
||||
);
|
||||
|
||||
my $control_descriptions_cached = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => '', tagfield => '003', } );
|
||||
|
||||
is("$control_descriptions","$control_descriptions_cached","Same memory address used proves cached control desc data");
|
||||
|
||||
my $descriptions = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => '', tagfield => '952', tagsubfield => 'c' } );
|
||||
is_deeply(
|
||||
|
|
@ -265,6 +287,10 @@ subtest 'search_by_*_field + find_by_koha_field + get_description + authorised_v
|
|||
'location_3' => 'location_3',
|
||||
},
|
||||
);
|
||||
|
||||
my $descriptions_cached = Koha::AuthorisedValues->get_descriptions_by_marc_field(
|
||||
{ frameworkcode => '', tagfield => '952', tagsubfield => 'c' } );
|
||||
is("$descriptions","$descriptions_cached","Same memory address used proves cached desc data");
|
||||
};
|
||||
|
||||
subtest 'authorised_values' => sub {
|
||||
|
|
|
|||
Loading…
Reference in New Issue