From 66a6f78837f0fcdd86cf99a731c0f0dac81849aa Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 30 Mar 2020 16:11:51 +0200 Subject: [PATCH] Bug 25020: Preserve time part when batch extending due dates When selecting a new hard due date, we should keep the time part of the original checkouts. Test plan: 1 - Checkout an item specifying a date due 2 - Checkout an item without specifying a date due 3 - Use Tools->Batch extend due date 4 - Select a hard due date 5 - On the confirmation screen you should see that the time part has been kept 6 - Confirm 7 - Make sure the correct values hava been inserted in DB 8 - Try now using the other option, give a number of days 9 - Repeat 4-7 --- .../modules/tools/batch_extend_due_dates.tt | 6 +-- tools/batch_extend_due_dates.pl | 47 +++++++++++++++---- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_extend_due_dates.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_extend_due_dates.tt index 1286337220..e572b2b3d7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_extend_due_dates.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batch_extend_due_dates.tt @@ -134,11 +134,7 @@ [% checkout.issuedate | $KohaDates %] [% Branches.GetName( checkout.branchcode ) | html %] - [% IF new_hard_due_date %] - [% new_hard_due_date | $KohaDates %] - [% ELSE %] - [% new_due_dates.shift | $KohaDates %] - [% END %] + [% new_due_dates.shift | $KohaDates as_due_date => 1 %] [% END %] diff --git a/tools/batch_extend_due_dates.pl b/tools/batch_extend_due_dates.pl index caec5bd230..572e57bdc9 100755 --- a/tools/batch_extend_due_dates.pl +++ b/tools/batch_extend_due_dates.pl @@ -25,7 +25,7 @@ use CGI; use C4::Auth qw( get_template_and_user ); use C4::Output qw( output_html_with_http_headers ); use Koha::Checkouts; -use Koha::DateUtils qw( dt_from_string ); +use Koha::DateUtils qw( dt_from_string output_pref ); my $input = new CGI; my $op = $input->param('op') // q|form|; @@ -52,6 +52,8 @@ elsif ( $op eq 'list' ) { my $new_hard_due_date = $input->param('new_hard_due_date'); my $due_date_days = $input->param('due_date_days'); + $new_hard_due_date &&= dt_from_string($new_hard_due_date); + my $dtf = Koha::Database->new->schema->storage->datetime_parser; my $search_params; if (@categorycodes) { @@ -99,12 +101,17 @@ elsif ( $op eq 'list' ) { ); my @new_due_dates; - if ( not $new_hard_due_date && $due_date_days ) { - while ( my $checkout = $checkouts->next ) { - my $due_date = dt_from_string( $checkout->date_due ); - push @new_due_dates, $due_date->add( days => $due_date_days ); - } + while ( my $checkout = $checkouts->next ) { + push @new_due_dates, + output_pref({ dt => calc_new_due_date( + { + due_date => dt_from_string($checkout->date_due), + new_hard_due_date => $new_hard_due_date, + add_days => $due_date_days + } + ), dateformat => 'iso' }); } + $template->param( checkouts => $checkouts, new_hard_due_date => $new_hard_due_date @@ -126,8 +133,13 @@ elsif ( $op eq 'modify' ) { my $checkouts = Koha::Checkouts->search( { issue_id => { -in => \@issue_ids } } ); while ( my $checkout = $checkouts->next ) { - my $new_due_date = $new_hard_due_date - || dt_from_string( $checkout->date_due )->add( days => $due_date_days ); + my $new_due_date = calc_new_due_date( + { + due_date => dt_from_string($checkout->date_due), + new_hard_due_date => $new_hard_due_date, + add_days => $due_date_days + } + ); # Update checkout's due date $checkout->date_due($new_due_date)->store; @@ -142,4 +154,23 @@ elsif ( $op eq 'modify' ) { ); } +sub calc_new_due_date { + my ($params) = @_; + my $due_date = $params->{due_date}; + my $new_hard_due_date = $params->{new_hard_due_date}; + my $add_days = $params->{add_days}; + + my $new; + if ( $new_hard_due_date ) { + $new = $new_hard_due_date->clone->set( + hour => $due_date->hour, + minute => $due_date->minute, + second => $due_date->second, + ) + } else { + $new = $due_date->clone->add( days => $add_days ); + } + return $new; +} + output_html_with_http_headers $input, $cookie, $template->output; -- 2.20.1