From 0788f99c2a8bc41407e79a3d80f8f61b789884c2 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 --- C4/Circulation.pm | 6 ++++ Koha/Booking.pm | 33 ++++++++++--------- bookings/list.pl | 10 ++++-- circ/circulation.pl | 5 ++- .../prog/en/modules/bookings/list.tt | 1 + .../prog/en/modules/circ/circulation.tt | 10 +++++- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index d8b75fe858..0965d5e21c 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 ); @@ -1546,6 +1547,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); @@ -1727,6 +1729,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({ 'transform_to_checkout' => 1 }); + } } $issue->discard_changes; $patron->update_lastseen('check_out'); diff --git a/Koha/Booking.pm b/Koha/Booking.pm index 0d0d1fc8aa..74431c3b8f 100644 --- a/Koha/Booking.pm +++ b/Koha/Booking.pm @@ -251,28 +251,29 @@ $booking->delete(); =cut sub delete { - my ( $self ) = @_; + my ( $self, $params ) = @_; my $deleted = $self->SUPER::delete($self); my $patron = Koha::Patrons->find( $self->patron_id ); my $item = Koha::Items->find( $self->item_id ); my $library = Koha::Libraries->find( $self->pickup_library_id ); + if ( not defined( $params->{'transform_to_checkout'} ) ) { my $letter = C4::Letters::GetPreparedLetter( - module => 'bookings', - letter_code => 'BOOKING_CANCELLATION', - message_transport_type => 'email', - branchcode => $patron->branchcode, - lang => $patron->lang, - tables => { - branches => $library->branchcode, - borrowers => $patron->borrowernumber, - items => $item->itemnumber, - biblio => $item->biblionumber, - biblioitems => $item->biblionumber, - bookings => $self->unblessed, - } - ); + module => 'bookings', + letter_code => 'BOOKING_CANCELLATION', + message_transport_type => 'email', + branchcode => $patron->branchcode, + lang => $patron->lang, + tables => { + branches => $library->branchcode, + borrowers => $patron->borrowernumber, + items => $item->itemnumber, + biblio => $item->biblionumber, + biblioitems => $item->biblionumber, + bookings => $self->unblessed, + } + ); if ($letter) { C4::Letters::EnqueueLetter( @@ -283,6 +284,8 @@ sub delete { } ); } + } + return $deleted; } 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 d1c2b3b0cf..c67569f647 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -56,6 +56,7 @@ use Koha::SearchEngine; use Koha::SearchEngine::Search; use Koha::Patron::Modifications; use Koha::Token; +use Koha::Bookings; use List::MoreUtils qw( uniq ); @@ -67,6 +68,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' @@ -514,7 +516,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; @@ -763,6 +765,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 f1c299a40c..c0fbf8ee0f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt @@ -277,6 +277,7 @@ [% IF CAN_user_circulate_manage_bookings %] result += ''; result += ''; + 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 c124dcb6cf..196a7bff7e 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' %] @@ -282,6 +283,7 @@
+ [% IF (forceallow) %][% END %] @@ -390,6 +392,7 @@ [% INCLUDE 'csrf-token.inc' %] + [% IF (forceallow) %][% END %] @@ -423,6 +426,7 @@ + [% END %] @@ -439,6 +443,7 @@ + [% IF CAN_user_circulate_force_checkout or HIGHHOLDS or ADDITIONAL_MATERIALS %] [% IF ( RENEW_ISSUE ) %] @@ -1049,7 +1054,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.39.2