From 7ed08572f8dc0a19422ce69802712997959ebe78 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Mon, 6 Jun 2022 07:16:45 +0300 Subject: [PATCH 1/2] Bug 34142: Add new column sub_location to (deleted)items Add new column sub_location to items and deleteditems table. Column can be used to indicate e.g. if item has some other more specific location than permanent location. To test: 1) Add new authorized value for sublocation e.g. "SUBLOC" and add some values to it. 2) Add new 952 subfield e.g. S to MARC framework and link your new authorized value "SUBLOC" to it. 3) Link subfield to items.sub_location field in "Koha to MARC mapping" (add 952,S). 4) Find a record and attempt to add new item to it. => Note that new subfield S is now displayed on item form and dropdown selector contains values added to "SUBLOC". => Saving should be successfull. => After saving confirm that sublocation is displayed in its own column in items listing above item form and that sublocation is displayed with correct description. 5) Attempt to modify item. => Confirm that sublocation is displayed and it's correct. 6) Attempt to delete item. => Deleting should be successfull. Sponsored-by: Koha-Suomi Oy --- Koha/Database/Columns.pm | 1 + Koha/Item.pm | 1 + api/v1/swagger/definitions/item.yaml | 5 +++++ circ/returns.pl | 4 +++- .../data/mysql/atomicupdate/bug_34142.pl | 19 +++++++++++++++++++ installer/data/mysql/kohastructure.sql | 2 ++ .../prog/en/modules/catalogue/detail.tt | 6 ++++++ .../prog/en/modules/circ/returns.tt | 2 +- 8 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_34142.pl diff --git a/Koha/Database/Columns.pm b/Koha/Database/Columns.pm index 6b46a1bc39..e85c0b50d7 100644 --- a/Koha/Database/Columns.pm +++ b/Koha/Database/Columns.pm @@ -239,6 +239,7 @@ sub columns { "restricted" => __("Use restrictions"), "stack" => __("Shelving control number"), "stocknumber" => __("Inventory number"), + "sub_location" => __("Sublocation"), "timestamp" => __("Timestamp"), "uri" => __("Uniform resource identifier"), "withdrawn_on" => __("Withdrawn on"), diff --git a/Koha/Item.pm b/Koha/Item.pm index 854b6cfd58..e921e9d056 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -1501,6 +1501,7 @@ sub to_api_mapping { stocknumber => 'inventory_number', new_status => 'new_status', deleted_on => undef, + sub_location => 'sub_location' }; } diff --git a/api/v1/swagger/definitions/item.yaml b/api/v1/swagger/definitions/item.yaml index fc1cc718f4..3a1cccc897 100644 --- a/api/v1/swagger/definitions/item.yaml +++ b/api/v1/swagger/definitions/item.yaml @@ -217,6 +217,11 @@ properties: - string - "null" description: "'new' value, whatever free-text information." + sub_location: + type: + - string + - "null" + description: sub_location for this item exclude_from_local_holds_priority: type: boolean description: Exclude this item from local holds priority. diff --git a/circ/returns.pl b/circ/returns.pl index 8a0cb1a41d..8335d5f69c 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -762,6 +762,8 @@ my $count = 0; my @riloop; my $shelflocations = { map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => '', kohafield => 'items.location' } ) }; +my $sublocation = + { map { $_->{authorised_value} => $_->{lib} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => '', kohafield => 'items.sub_location' } ) }; foreach ( sort { $a <=> $b } keys %returneditems ) { my %ri; if ( $count++ < $returned_counter ) { @@ -816,7 +818,7 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { $ri{location} = $item->location; my $shelfcode = $ri{'location'}; $ri{'location'} = $shelflocations->{$shelfcode} if ( defined( $shelfcode ) && defined($shelflocations) && exists( $shelflocations->{$shelfcode} ) ); - + $ri{sub_location} = $sublocation->{$item->sub_location} if ( defined( $item->sub_location ) && defined($sublocation) && exists( $sublocation->{$item->sub_location} ) ); } else { last; diff --git a/installer/data/mysql/atomicupdate/bug_34142.pl b/installer/data/mysql/atomicupdate/bug_34142.pl new file mode 100644 index 0000000000..1f1ca97865 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_34142.pl @@ -0,0 +1,19 @@ +use Modern::Perl; + +return { + bug_number => "34142", + description => "Add column sub_location to (deleted)items table", + up => sub { + my ($args) = @_; + my ($dbh, $out) = @$args{qw(dbh out)}; + + if( !column_exists( 'items', 'sub_location' ) ) { + $dbh->do(q{ALTER TABLE items ADD COLUMN sub_location VARCHAR(10) DEFAULT NULL AFTER permanent_location}); + say $out "Added new column items.sub_location"; + } + if( !column_exists( 'deleteditems', 'sub_location' ) ) { + $dbh->do(q{ALTER TABLE deleteditems ADD COLUMN sub_location VARCHAR(10) DEFAULT NULL AFTER permanent_location}); + say $out "Added new column deleteditems.sub_location"; + } + }, +}; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index d91bd46b32..113f782560 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2716,6 +2716,7 @@ CREATE TABLE `deleteditems` ( `deleted_on` datetime DEFAULT NULL COMMENT 'date/time of deletion', `location` varchar(80) DEFAULT NULL COMMENT 'authorized value for the shelving location for this item (MARC21 952$c)', `permanent_location` varchar(80) DEFAULT NULL COMMENT 'linked to the CART and PROC temporary locations feature, stores the permanent shelving location', + `sub_location` varchar(10) DEFAULT NULL COMMENT 'authorized value for the sublocation for this item', `onloan` date DEFAULT NULL COMMENT 'defines if item is checked out (NULL for not checked out, and due date for checked out)', `cn_source` varchar(10) DEFAULT NULL COMMENT 'classification source used on this item (MARC21 952$2)', `cn_sort` varchar(255) DEFAULT NULL COMMENT 'normalized form of the call number (MARC21 952$o) used for sorting', @@ -3688,6 +3689,7 @@ CREATE TABLE `items` ( `deleted_on` datetime DEFAULT NULL COMMENT 'date/time of deletion', `location` varchar(80) DEFAULT NULL COMMENT 'authorized value for the shelving location for this item (MARC21 952$c)', `permanent_location` varchar(80) DEFAULT NULL COMMENT 'linked to the CART and PROC temporary locations feature, stores the permanent shelving location', + `sub_location` varchar(10) DEFAULT NULL COMMENT 'authorized value for the sublocation for this item', `onloan` date DEFAULT NULL COMMENT 'defines if item is checked out (NULL for not checked out, and due date for checked out)', `cn_source` varchar(10) DEFAULT NULL COMMENT 'classification source used on this item (MARC21 952$2)', `cn_sort` varchar(255) DEFAULT NULL COMMENT 'normalized form of the call number (MARC21 952$o) used for sorting', diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index a3c08aa693..e218a82bb0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -434,6 +434,12 @@ [% ELSE %] [% item_location | html %] [% END %] + [% SET item_sublocation= AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.sub_location', authorised_value => item.sub_location ) %] + [% IF ( item_sublocation ) %] + + ([% item.sub_location | html %]) + + [% END %] [% IF ( itemdata_ccode ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => item.ccode ) | html %][% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt index b15efad24f..a29f66caec 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -1256,7 +1256,7 @@ [% Branches.GetName( riloo.transferbranch ) | html %] - [% riloo.location | html %] + [% riloo.location | html %] [% IF ( riloo.sub_location ) %] ([% riloo.sub_location | html %]) [% END %] [% riloo.itemcallnumber | html %] -- 2.34.1