Bug 27526: Correct NULL vs empty string when editing

When an item is edit we must keep the NULL values in DB if the input
have been left empty.
It also fixes the "barcode cannot be unique" error when an item does not
have a barcode.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Jonathan Druart 2021-10-11 11:11:26 +02:00
parent 474f228a69
commit 3376e0d218
1 changed files with 10 additions and 3 deletions

View File

@ -420,6 +420,7 @@ if ($op eq "additem") {
# FIXME Handle non existent item
my $olditemlost = $item->itemlost;
my @columns = Koha::Items->columns;
my $new_values = $item->unblessed;
for my $c ( @columns ) {
if ( $c eq 'more_subfields_xml' ) {
my @more_subfields_xml = $input->multi_param("items.more_subfields_xml");
@ -434,16 +435,22 @@ if ($op eq "additem") {
# used in the framework
$marc->append_fields(MARC::Field->new('999', ' ', ' ', @unlinked_item_subfields));
$marc->encoding("UTF-8");
$item->more_subfields_xml($marc->as_xml("USMARC"));
$new_values->{more_subfields_xml} = $marc->as_xml("USMARC");
next;
}
$item->more_subfields_xml(undef);
} else {
my @v = $input->multi_param("items.".$c);
my @v = map { ( defined $_ && $_ eq '' ) ? undef : $_ } $input->multi_param( "items." . $c );
next unless @v;
$item->$c(join ' | ', uniq @v);
if ( scalar(@v) == 1 && not defined $v[0] ) {
delete $new_values->{$c};
} else {
$new_values->{$c} = join ' | ', @v;
}
}
}
$item = $item->set_or_blank($new_values);
# check that the barcode don't exist already
if (