From 0e281eed7faff6c22b591667c5f5149014ca885f Mon Sep 17 00:00:00 2001 From: Thibaud Guillot Date: Fri, 9 Jun 2023 12:31:23 +0200 Subject: [PATCH] Bug 13870: Add warn about linked order or/and subscription on batch item table When you try to manage/delete/edit items I added an info about linked order or/and linked subscription. Test plan : 1) Apply this patch 2) Restart_all 3) Be sure to have item with order or can concern by a subscription 4) On biblio record page click on Edit -> Manage items 5) See the yellow triangle next to the 'delete' action in 'actions' dropdown menu (with subscription id or ordernumber hover the symbol) 6) When you edit or delete items (batch mode) you can see two new columns about orders and subscriptions linked. Sponsored by: BibLibre --- cataloguing/additem.pl | 14 ++++++++++ .../prog/en/includes/html_helpers.inc | 10 ++++++- .../prog/en/modules/cataloguing/additem.tt | 9 +++++- tools/batchMod.pl | 28 ++++++++++++++++--- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index e5d9a463999..768df3f7812 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -32,6 +32,7 @@ use C4::Context; use C4::Members; use C4::Output qw( output_and_exit_if_error output_and_exit output_html_with_http_headers ); use C4::Search qw( enabled_staff_search_views ); +use C4::Acquisition qw( GetOrderFromItemnumber ); use Koha::Biblios; use Koha::Item::Templates; use Koha::ItemTypes; @@ -42,6 +43,8 @@ use Koha::Patrons; use Koha::SearchEngine::Indexer; use Koha::UI::Form::Builder::Item; use Koha::Result::Boolean; +use Koha::Serial::Items; +use Koha::Subscriptions; use Encode qw( encode_utf8 ); use List::MoreUtils qw( any uniq ); @@ -695,8 +698,18 @@ if ($op) { # now, build existiing item list my @items; +my %warning_messages; for my $item ( $biblio->items->as_list, $biblio->host_items->as_list ) { my $i = $item->columns_to_str; + my $i_order = GetOrderFromItemnumber( $i->{itemnumber} ); + my $i_serialid = Koha::Serial::Items->find( { itemnumber => $i->{itemnumber} }, { prefetch => 'serialid' } ); + if ($i_order) { + $warning_messages{ $i->{itemnumber} } = + sprintf( 'There is an order (ordernumber %s) on this item', $i_order->{ordernumber} ); + } + if ($i_serialid) { + $warning_messages{ $i->{itemnumber} } = 'A subscription is linked to this item'; + } $i->{nomod} = 1 unless $patron->can_edit_items_from( $item->homebranch ); push @items, $i; } @@ -822,6 +835,7 @@ $template->param( barcode => $current_item->{barcode}, op => $nextop, popup => scalar $input->param('popup') ? 1 : 0, + warning_messages => \%warning_messages, C4::Search::enabled_staff_search_views, ); $template->{'VARS'}->{'searchid'} = $searchid; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc index 81a5d33da79..e696a1bec15 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/html_helpers.inc @@ -336,7 +336,9 @@ [% FOREACH item IN items %] [% SET can_be_edited = !item.nomod && !( Koha.Preference('IndependentBranches') && ! logged_in_user && item.homebranch != Branches.GetLoggedInBranchname() ) %] - + [% SET current_itemnumber = item.itemnumber %] + [% SET linked_order = linked_orders_subscriptions.$current_itemnumber %] + [% SET linked_subscription = linked_orders_subscriptions.$current_itemnumber.subscription %] [% item.index + 1 | html %] [% IF checkboxes_edit %] @@ -357,6 +359,12 @@ [% ELSE %] [% IF item.safe_to_delete %] + [% IF linked_order.ordernumber %] + + [% END %] + [% IF linked_subscription %] + + [% END %] [% ELSE %] [% SET messages = item.safe_to_delete.messages %] [% FOR m IN messages %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt index 32c79d0fa49..bd4ad470efa 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt @@ -118,6 +118,8 @@ [% FOREACH item IN items %] [% SET can_be_edited = ! ( Koha.Preference('IndependentBranches') && ! logged_in_user.is_superlibrarian && item.homebranch != Branches.GetLoggedInBranchname() ) %] + [% SET current_itemnumber = item.itemnumber %] + [% SET warn_message = warning_messages.$current_itemnumber %] [% SET tr_class = '' %] [% IF item.itemnumber == itemnumber AND op == 'cud-saveitem' %] [% UNLESS can_be_edited %] @@ -187,7 +189,12 @@ - Delete + + Delete + [% IF warn_message %] + + [% END %] + [% END %] [% END %] diff --git a/tools/batchMod.pl b/tools/batchMod.pl index 75607c0f059..d44c4e97bfc 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -25,6 +25,7 @@ use C4::Auth qw( get_template_and_user haspermission ); use C4::Output qw( output_html_with_http_headers ); use C4::Circulation qw( barcodedecode ); use C4::Context; +use C4::Acquisition qw( GetOrderFromItemnumber ); use MARC::File::XML; use List::MoreUtils qw( uniq ); use Encode qw( encode_utf8 ); @@ -40,6 +41,8 @@ use Koha::BackgroundJob::BatchDeleteItem; use Koha::BackgroundJob::BatchUpdateItem; use Koha::UI::Form::Builder::Item; use Koha::UI::Table::Builder::Items; +use Koha::Serial::Items; +use Koha::Serials; my $input = CGI->new; my $dbh = C4::Context->dbh; @@ -89,6 +92,7 @@ my $nextop = ""; my $display_items; my @messages; +my %linked_orders_subscriptions; if ( $op eq "cud-action" ) { @@ -258,7 +262,22 @@ if ( $op eq "cud-show" || $op eq "show" ) { } else { if ( defined $biblionumber && !@itemnumbers ) { my $biblio = Koha::Biblios->find($biblionumber); - @itemnumbers = $biblio ? $biblio->items->get_column('itemnumber') : (); + if(!@itemnumbers) { + @itemnumbers = $biblio ? $biblio->items->get_column('itemnumber') : (); + } + foreach my $itemnumber (@itemnumbers) { + $linked_orders_subscriptions{$itemnumber} = []; + my $order = GetOrderFromItemnumber($itemnumber); + my $serial_id = Koha::Serial::Items->search( { itemnumber => $itemnumber } )->get_column('serialid'); + if ($order) { + $linked_orders_subscriptions{$itemnumber} = + { ordernumber => $order->{ordernumber}, basket => $order->{basketno} }; + } + if ($serial_id) { + my $subscription_id = Koha::Serials->search( { serialid => $serial_id } )->get_column('subscriptionid'); + $linked_orders_subscriptions{$itemnumber} = { subscription => $subscription_id }; + } + } } if ( my $list = $input->param('barcodelist') ) { my @barcodelist = grep /\S/, ( split /[$split_chars]/, $list ); @@ -331,9 +350,10 @@ if ( $op eq "cud-show" || $op eq "show" ) { # what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit. $template->param( - subfields => $subfields, - notfoundbarcodes => \@notfoundbarcodes, - notfounditemnumbers => \@notfounditemnumbers + subfields => $subfields, + notfoundbarcodes => \@notfoundbarcodes, + notfounditemnumbers => \@notfounditemnumbers, + linked_orders_subscriptions => \%linked_orders_subscriptions, ); $nextop = "cud-action"; $template->param( show => 1 ); -- 2.39.5