Bug 34266: Default to biblioitems.itemtype only if it's a valid itemtype

biblioitems.itemtype can contain values that are not itemtypes (for
instance if the MARC field mapped to it uses another authorised value
category)
This patch checks that before using it as a default value for the
'itemtypes' item subfield.

Test plan:
0. Do not apply the patch yet
1. Change your MARC framework so that the field linked to
   biblioitems.itemtype uses an authorised value category different from
   'itemtypes'
2. Make sure that you have an item subfield linked to the authorised
   value 'itemtypes' in your MARC framework
3. Create a biblio with an itemtype (using a value that is NOT an item
   type, but a value from the authorised value category you selected in
   step 1)
4. Create a new item for this biblio. Notice that the biblio itemtype is
   automatically selected for the 'itemtypes' subfield
5. Apply the patch
6. Create a new item for the same biblio. Now the 'itemtypes' subfield
   should be empty.
7. Revert the change at step 1 so that your biblioitems.itemtype MARC
   field uses the 'itemtypes' AV category
8. Modify your biblio to use a valid item type.
9. Create a new item. The biblio itemtype should be used as a default
   value

Signed-off-by: joubu <xxx@example.org>
Signed-off-by: tuxayo <victor@tuxayo.net>
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 807c58d28d)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Julian Maurice 2023-07-13 09:22:44 +02:00 committed by Fridolin Somers
parent 0cdabc65f0
commit 27fa85423e

View file

@ -16,6 +16,7 @@ package Koha::UI::Form::Builder::Item;
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use List::Util qw( any );
use MARC::Record;
use C4::Context;
use C4::Biblio qw( GetFrameworkCode GetMarcStructure IsMarcStructureInternal );
@ -224,7 +225,12 @@ sub generate_subfield_form {
my $itype_sth = $dbh->prepare(
"SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
$itype_sth->execute($biblionumber);
($value) = $itype_sth->fetchrow_array;
my ($biblio_itemtype) = $itype_sth->fetchrow_array;
# Use biblioitems.itemtype as a default value only if it's a valid itemtype
if ( any { $_ eq $biblio_itemtype } @authorised_values ) {
$value = $biblio_itemtype;
}
}
#---- class_sources