From 475f778c706bd3abb862d680d238a6146fb18840 Mon Sep 17 00:00:00 2001 From: Thibaud Guillot <thibaud.guillot@biblibre.com> 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 also see triangles if order or subscription is linked. Sponsored by: BibLibre fix --- cataloguing/additem.pl | 20 ++++++++++++--- .../prog/en/includes/html_helpers.inc | 20 +++++++++++++-- .../prog/en/modules/cataloguing/additem.tt | 13 +++++++++- tools/batchMod.pl | 25 ++++++++++++++++--- 4 files changed, 69 insertions(+), 9 deletions(-) diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 3d361ec1e63..c965811e4b5 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -30,8 +30,9 @@ use C4::Biblio qw( GetFrameworkCode GetMarcFromKohaField GetMarcStructure I use C4::Circulation qw( barcodedecode LostItem ); 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::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 ); @@ -680,8 +683,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 = $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; } @@ -807,6 +820,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 fc0f4cae1e7..cfd46275207 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 @@ <tbody> [% 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 %] <tr> <td>[% item.index + 1 | html %]</td> [% IF checkboxes_edit %] @@ -347,6 +349,12 @@ [% ELSE %] <td> <input type="checkbox" name="itemnumber" value="[% item.itemnumber | html %]" id="row[% item.itemnumber | html %]" checked="checked" data-is-onloan="[% item.is_checked_out | html %]" /> + [% IF linked_order.ordernumber %] + <i class="fa fa-warning warn" Title="There is an order (ordernumber [% linked_order.ordernumber | html %]) on this item"></i> + [% END %] + [% IF linked_subscription %] + <i class="fa fa-warning warn" Title="There is a subscription linked (subscription id [% linked_subscription | html %])"></i> + [% END %] </td> [% END %] [% ELSIF checkboxes_delete %] @@ -356,7 +364,15 @@ </td> [% ELSE %] [% IF item.safe_to_delete %] - <td><input type="checkbox" name="itemnumber" value="[% item.itemnumber | html %]" id="row[% item.itemnumber | html %]" checked="checked" /></td> + <td> + <input type="checkbox" name="itemnumber" value="[% item.itemnumber | html %]" id="row[% item.itemnumber | html %]" checked="checked" /> + [% IF linked_order.ordernumber %] + <i class="fa fa-warning warn" Title="There is an order (ordernumber [% linked_order.ordernumber | html %]) on this item"></i> + [% END %] + [% IF linked_subscription %] + <i class="fa fa-warning warn" Title="There is a subscription linked (subscription id [% linked_subscription | html %])"></i> + [% END %] + </td> [% 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 90fe28057ea..5b1f9a8f834 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt @@ -117,6 +117,8 @@ [% FOREACH item IN items %] [% SET can_be_edited = ! ( Koha.Preference('IndependentBranches') && ! logged_in_user.is_superlibrarian && item.homebranch != Branches.GetLoggedInBranchname() ) %] [% SET tr_class = '' %] + [% SET current_itemnumber = item.itemnumber %] + [% SET warn_message = warning_messages.$current_itemnumber %] [% IF item.itemnumber == itemnumber %] [% UNLESS can_be_edited %] [% SET tr_class='active' %] @@ -184,7 +186,16 @@ <input type="hidden" name="itemnumber" value="[% item.itemnumber | html %]" /> <input type="hidden" name="searchid" value="[% searchid | html %]" /> </form> - <a class="dropdown-item delete" data-item="[% item.itemnumber | html %]" href="#">Delete</a> + <a + class="dropdown-item delete" + data-item="[% item.itemnumber | html %]" + href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&biblionumber=[% item.biblionumber | html %]&itemnumber=[% item.itemnumber | html %]&searchid=[% searchid | html %]" + onclick="return confirm_deletion();" + >Delete + [% IF warn_message %] + <i class="fa fa-warning warn" Title="[% warn_message | html %]"></i> + [% END %] + </a> </li> [% END %] [% END %] diff --git a/tools/batchMod.pl b/tools/batchMod.pl index 92f19d29298..3ea19b52ccf 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 ); @@ -39,6 +40,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; @@ -87,6 +90,7 @@ my $nextop = ""; my $display_items; my @messages; +my %linked_orders_subscriptions; if ( $op eq "cud-action" ) { @@ -232,6 +236,20 @@ if ( $op eq "cud-show" || $op eq "show" ) { if ( defined $biblionumber && !@itemnumbers ) { my $biblio = Koha::Biblios->find($biblionumber); @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 ); @@ -295,9 +313,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