From ed9254c71d8ec1eda152b0bc65e5da0204fe6a43 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Thu, 13 Jul 2023 09:22:44 +0200 Subject: [PATCH] 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 --- Koha/UI/Form/Builder/Item.pm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Koha/UI/Form/Builder/Item.pm b/Koha/UI/Form/Builder/Item.pm index 3a478ee05e0..2ab9fb3bb50 100644 --- a/Koha/UI/Form/Builder/Item.pm +++ b/Koha/UI/Form/Builder/Item.pm @@ -16,6 +16,7 @@ package Koha::UI::Form::Builder::Item; # along with Koha; if not, see . 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 -- 2.30.2