Bug 24294: Add default value support for control fields in ACQ framework

When trying to add an order using the ACQ framework with a 008@ tag,
Koha explodes:

Control fields (generally, just tags below 010) do not have subfields,
use data() at /home/vagrant/kohaclone/C4/Acquisition.pm line 3272.

Test plan:
Set a default value for a control field in the ACQ framework
Turn on UseACQFrameworkForBiblioRecords
Create a new order from a new record
The default value should be displayed
Save
=> No crash

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Jonathan Druart 2020-01-02 12:09:27 +01:00 committed by Martin Renvoize
parent dd9a965ed5
commit 64855886b8
Signed by: martin.renvoize
GPG key ID: 422B469130441A0F
2 changed files with 27 additions and 6 deletions

View file

@ -3282,18 +3282,30 @@ sub FillWithDefaultValues {
my @fields = $record->field($tag);
if (@fields) {
for my $field (@fields) {
unless ( defined $field->subfield($subfield) ) {
if ( $field->is_control_field ) {
$field->update($defaultvalue) if not defined $field->data;
}
elsif ( not defined $field->subfield($subfield) ) {
$field->add_subfields(
$subfield => $defaultvalue );
}
}
}
else {
$record->insert_fields_ordered(
MARC::Field->new(
$tag, '', '', $subfield => $defaultvalue
)
);
if ( $tag < 10 ) { # is_control_field
$record->insert_fields_ordered(
MARC::Field->new(
$tag, $defaultvalue
)
);
}
else {
$record->insert_fields_ordered(
MARC::Field->new(
$tag, '', '', $subfield => $defaultvalue
)
);
}
}
}
}

View file

@ -19,6 +19,11 @@ $biblio_module->mock(
'GetMarcStructure',
sub {
{
# default for a control field
'008' => {
x => { defaultvalue => $default_x },
},
# default value for an existing field
'245' => {
c => { defaultvalue => $default_author },
@ -39,6 +44,10 @@ $biblio_module->mock(
my $record = MARC::Record->new;
$record->leader('03174nam a2200445 a 4500');
my @fields = (
MARC::Field->new(
'008', '1', ' ',
'@' => '120829t20132012nyu bk 001 0ceng',
),
MARC::Field->new(
100, '1', ' ',
a => 'Knuth, Donald Ervin',