From c8f00b0d5188e1d1c5a4f3ca6847f5297ca0471d Mon Sep 17 00:00:00 2001 From: Emmi Takkinen Date: Wed, 22 Jan 2025 13:50:26 +0200 Subject: [PATCH 2/2] Bug 36135: Add more API functionality to display holds to modify --- admin/columns_settings.yml | 47 +- .../en/modules/tools/batch_modify_holds.tt | 788 ++++++++++++------ tools/batch_modify_holds.pl | 102 +-- 3 files changed, 568 insertions(+), 369 deletions(-) mode change 100644 => 100755 tools/batch_modify_holds.pl diff --git a/admin/columns_settings.yml b/admin/columns_settings.yml index 2a632acc25..4a9bcbc70a 100644 --- a/admin/columns_settings.yml +++ b/admin/columns_settings.yml @@ -1955,7 +1955,52 @@ modules: columnname: suspend - columnname: print_slip - + holds_to_modify: + default_display_length: 20 + columns: + - + columnname: checkbox + cannot_be_toggled: 1 + cannot_be_modified: 1 + - + columnname: expiration_date + - + columnname: title + - + columnname: barcode + - + columnname: patron + - + columnname: status + - + columnname: pickup_library + - + columnname: suspended + - + columnname: suspended_until + - + columnname: notes + modified_holds: + default_display_length: 20 + columns: + - + columnname: expiration_date + - + columnname: title + - + columnname: barcode + - + columnname: patron + - + columnname: status + - + columnname: pickup_library + - + columnname: suspended + - + columnname: suspended_until + - + columnname: notes holdsratios: holds-ratios: default_display_length: 20 diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_modify_holds.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_modify_holds.tt index 7a926bfb93..380b94685b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_modify_holds.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_modify_holds.tt @@ -5,6 +5,8 @@ [% USE Categories %] [% USE KohaDates %] [% USE ItemTypes %] +[% USE TablesSettings %] +[% USE To %] [% PROCESS 'html_helpers.inc' %] [% INCLUDE 'doc-head-open.inc' %] @@ -37,194 +39,143 @@
-
+

Batch modify holds

- - [% IF view == 'form' %] -
-
- Hold search criteria: - NOTE! Column patron_expiration_date is used as a main filter for expiration date field. Otherwise column expirationdate is used. -
    -
  1. - - -
  2. -
  3. - - -
  4. -
  5. - - -
  6. -
  7. - - -
  8. -
  9. - - -
  10. -
  11. - - -
  12. -
  13. - - -
  14. -
  15. - - -
  16. -
-
+ [% IF view == "form" %] +
+ [% ELSIF view == "report" %] +
+
+
+
- - - Cancel -
- - - [% ELSIF view == 'list' %] - [% IF holds.count %] -
- [% INCLUDE 'csrf-token.inc' %] -

Found [% holds.count | html %][% IF holds.count > 1 %]holds[% ELSE %]hold[% END %]to modify.

-
- - - - - - - - - - - - - - - -
Hold IDExpiration dateTitleBarcodeStatusHold pickup librarySuspendedSuspended untilNote
- + Return to batch hold modification + +
+ [% END %] +
-
- - +
- -
- + +
@@ -232,132 +183,419 @@ [% Asset.js("js/tools-menu.js") | $raw %] [% INCLUDE 'calendar.inc' %] [% INCLUDE 'datatables.inc' %] + [% INCLUDE 'js-patron-format.inc' %] [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %] [% END %] diff --git a/tools/batch_modify_holds.pl b/tools/batch_modify_holds.pl old mode 100644 new mode 100755 index 8d3f29a59a..e174b133a5 --- a/tools/batch_modify_holds.pl +++ b/tools/batch_modify_holds.pl @@ -19,10 +19,11 @@ # use Modern::Perl; - use CGI; -use C4::Auth qw( get_template_and_user ); +use JSON qw( to_json ); + +use C4::Auth qw( get_template_and_user ); use C4::Output qw( output_html_with_http_headers ); use Koha::DateUtils qw( dt_from_string ); @@ -44,98 +45,13 @@ my @hold_ids; if ( $op eq 'form' ) { $template->param( view => 'form', ); -} elsif ( $op eq 'list' ) { - - my @reserve_ids = $input->multi_param('reserve_ids'); - my $expirationdate_from = $input->param('expirationdate_from'); - my $expirationdate_to = $input->param('expirationdate_to'); - my @branchcodes = $input->multi_param('branchcodes'); - my @found_status = $input->multi_param('found_status'); - my $suspend_status = $input->param('suspend_status'); - my $suspend_until_from = $input->param('suspend_until_from'); - my $suspend_until_to = $input->param('suspend_until_to'); - my $reservenotes = $input->param('reservenotes'); - - my $search_params; - - if (@reserve_ids) { - $search_params->{'me.reserve_id'} = { -in => \@reserve_ids }; - } else { - if ( $expirationdate_from && $expirationdate_to ) { - my $expirationdate_params = { - -or => { - patron_expiration_date => { - -between => [ - $expirationdate_from, - $expirationdate_to - ] - }, - expirationdate => { - -between => [ - $expirationdate_from, - $expirationdate_to - ] - } - } - }; - - $search_params = $expirationdate_params; - } - - if (@branchcodes) { - $search_params->{'me.branchcode'} = { -in => \@branchcodes }; - } - - if (@found_status) { - my $found_params = {}; - - # if NULL is used as filter, use it as "is" param - if ( grep { $_ eq "NULL" } @found_status ) { - $found_params->{'-or'}{'-is'} = undef; - $found_params->{'-or'}{'-in'} = \@found_status; - } else { - $found_params = { -in => \@found_status }; - } - - $search_params->{'me.found'} = $found_params; - } - - if ( $suspend_status ne "none" ) { - $search_params->{'me.suspend'} = $suspend_status; - } - - if ( $suspend_until_from && $suspend_until_to ) { - $search_params->{'me.suspend_until'} = { - -between => [ - $suspend_until_from, - $suspend_until_to, - ] - }; - } - - if ($reservenotes) { - $search_params->{'me.reservenotes'} = { -like => "%" . $reservenotes . "%" }; - } - } - - my $holds = Koha::Holds->search( - $search_params, - { join => [ "item", "biblio" ] } - ); - - $template->param( - holds => $holds, - view => 'list', - ); } - -if ( $op eq 'cud-modify' ) { - +elsif ( $op eq 'cud-modify' ) { my $new_expiration_date = $input->param('new_expiration_date'); my $new_pickup_loc = $input->param('new_pickup_loc'); my $new_suspend_status = $input->param('new_suspend_status'); my $new_suspend_date = $input->param('new_suspend_date'); - my $new_reserve_note = $input->param('new_reserve_note'); + my $new_hold_note = $input->param('new_hold_note'); @hold_ids = $input->multi_param('hold_id'); @@ -153,7 +69,7 @@ if ( $op eq 'cud-modify' ) { } if ( $new_suspend_status && !$hold->is_found ) { - if ( $new_suspend_status eq "suspend" ) { + if ( $new_suspend_status ) { $hold->suspend(1)->store; if ($new_suspend_date) { $hold->suspend_until($new_suspend_date)->store; @@ -166,13 +82,13 @@ if ( $op eq 'cud-modify' ) { } } - if ($new_reserve_note) { - $hold->reservenotes($new_reserve_note)->store; + if ($new_hold_note) { + $hold->reservenotes($new_hold_note)->store; } } $template->param( - updated_holds => $holds_to_update, + updated_holds => to_json(\@hold_ids), view => 'report', ); -- 2.34.1