From 28f57de65d12e53fd5befc04507e7f79eddfc2d7 Mon Sep 17 00:00:00 2001 From: Thibaud Guillot Date: Mon, 6 May 2024 12:50:01 +0200 Subject: [PATCH] Bug 36789: Transform a booking into checkout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Directly from the bookings list, you can perform a checkout with booked item. Test plan: 1) Got an item booked :) 2) Click on transform to checkout 3) Normally you will be redirected to circulation.pl checkout view with form infos from booking. 4) If issue is confirmed, the booking will be deleted. Sponsored by: Association de Gestion des Ĺ’uvres Sociales d'Inria (AGOS) Signed-off-by: David Nind Signed-off-by: Olivier V --- C4/Circulation.pm | 6 ++++++ bookings/list.pl | 10 ++++++++-- circ/circulation.pl | 5 ++++- .../intranet-tmpl/prog/en/modules/bookings/list.tt | 1 + .../prog/en/modules/circ/circulation.tt | 12 ++++++++++-- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 80cead8a96..7161415d64 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -63,6 +63,7 @@ use Koha::Exceptions::Checkout; use Koha::Plugins; use Koha::Recalls; use Koha::Library::Hours; +use Koha::Bookings; use Carp qw( carp ); use List::MoreUtils qw( any ); use Scalar::Util qw( looks_like_number blessed ); @@ -1551,6 +1552,7 @@ sub AddIssue { my $auto_renew = $params && $params->{auto_renew}; my $cancel_recall = $params && $params->{cancel_recall}; my $recall_id = $params && $params->{recall_id}; + my $booking_id = $params && $params->{booking_id}; my $dbh = C4::Context->dbh; my $barcodecheck = CheckValidBarcode($barcode); @@ -1732,6 +1734,10 @@ sub AddIssue { q{DELETE tmp_holdsqueue, hold_fill_targets FROM tmp_holdsqueue LEFT JOIN hold_fill_targets USING ( itemnumber ) WHERE itemnumber = ?}, undef, $item_object->id ); + + if ($booking_id) { + Koha::Bookings->find( { booking_id => $booking_id } )->delete(); + } } $issue->discard_changes; $patron->update_lastseen('check_out'); diff --git a/bookings/list.pl b/bookings/list.pl index 6333287e04..dcf12bbcfb 100755 --- a/bookings/list.pl +++ b/bookings/list.pl @@ -21,8 +21,14 @@ use Modern::Perl; use CGI qw ( -utf8 ); +use Koha::Biblios; +use Koha::Bookings; +use Koha::Patrons; +use Koha::Items; +use Koha::CirculationRules; + use C4::Output qw( output_html_with_http_headers ); -use C4::Auth qw( get_template_and_user ); +use C4::Auth qw( get_template_and_user ); my $input = CGI->new; my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user( @@ -35,7 +41,7 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user( ); my $biblionumber = $input->param('biblionumber'); -my $biblio = Koha::Biblios->find($biblionumber); +my $biblio = Koha::Biblios->find( { biblionumber => $biblionumber } ); $template->param( biblionumber => $biblionumber, diff --git a/circ/circulation.pl b/circ/circulation.pl index 968470e6f1..99f73ecf4b 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -57,6 +57,7 @@ use Koha::SearchEngine; use Koha::SearchEngine::Search; use Koha::Patron::Modifications; use Koha::Token; +use Koha::Bookings; use List::MoreUtils qw( uniq ); @@ -68,6 +69,7 @@ my $query = CGI->new; my $borrowernumber = $query->param('borrowernumber'); my $barcodes = []; my $barcode = $query->param('barcode'); +my $booking_id = $query->param('booking_id'); # Barcode given by user could be '0' if ( $barcode || ( defined($barcode) && $barcode eq '0' ) ) { @@ -543,7 +545,7 @@ if ( @$barcodes && $op eq 'cud-checkout' ) { { onsite_checkout => $onsite_checkout, auto_renew => $session->param('auto_renew'), switch_onsite_checkout => $switch_onsite_checkout, cancel_recall => $cancel_recall, - recall_id => $recall_id, + recall_id => $recall_id, booking_id => $booking_id } ); $template_params->{issue} = $issue; @@ -787,6 +789,7 @@ $template->param( nopermission => scalar $query->param('nopermission'), autoswitched => $autoswitched, logged_in_user => $logged_in_user, + booking_id => $booking_id || '', ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt index 6a1061403f..9a4f20a78c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt @@ -389,6 +389,7 @@ if (!is_cancelled) { result += ''.format(row.booking_id, biblionumber, row.item_id, row.patron_id, row.pickup_library_id, row.start_date, row.end_date, _("Edit")); result += ''.format(row.booking_id, _("Cancel")); + result += `
`; } [% END %] return result; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index a3c9d73f1b..8c2d9aee0c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -9,6 +9,7 @@ [% USE ItemTypes %] [% USE Price %] [% USE AuthorisedValues %] +[% USE JSON.Escape %] [% PROCESS 'i18n.inc' %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] @@ -284,6 +285,7 @@ [% FOREACH conf IN sessionConfirmationKeys %] [% END %] + [% IF (forceallow) %][% END %] @@ -399,6 +401,7 @@ [% FOREACH conf IN sessionConfirmationKeys %] [% END %] + [% IF (forceallow) %][% END %] @@ -436,7 +439,8 @@ - + + [% END %] @@ -452,6 +456,7 @@ + [% IF CAN_user_circulate_force_checkout or HIGHHOLDS or ADDITIONAL_MATERIALS %] [% IF ( RENEW_ISSUE ) %] @@ -1066,7 +1071,10 @@ if ( $("#onsite_checkout").prop('checked') ) { duedatespec_fp.setDate("[% today_due_date_and_time | $KohaDates dateformat => 'iso', with_hours => 1 %]"); } else { - duedatespec_fp.setDate(""); + var booking_id = [% booking_id.json %]; + if (!booking_id) { + duedatespec_fp.setDate(""); + } } } } -- 2.25.1