From dd9ea524f2a3b6a5c176d6a9e2fef23b0a94f62c 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) --- C4/Circulation.pm | 6 ++++ Koha/Booking.pm | 33 ++++++++++--------- bookings/list.pl | 10 ++++-- circ/circulation.pl | 5 ++- .../prog/en/modules/bookings/list.tt | 2 ++ .../prog/en/modules/circ/circulation.tt | 11 ++++++- 6 files changed, 48 insertions(+), 19 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index bff0b1e2f56..8d79e435ce4 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(); + } } $issue->discard_changes; $patron->update_lastseen('check_out'); diff --git a/Koha/Booking.pm b/Koha/Booking.pm index a0bc90140e3..8d0e874e5a9 100644 --- a/Koha/Booking.pm +++ b/Koha/Booking.pm @@ -350,28 +350,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( @@ -382,6 +383,8 @@ sub delete { } ); } + } + return $deleted; } diff --git a/bookings/list.pl b/bookings/list.pl index 6333287e041..dcf12bbcfb7 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 d1c2b3b0cfb..c67569f647d 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 f1c299a40c0..e0b11b815f8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/bookings/list.tt @@ -74,6 +74,7 @@ var update_success = 0; var bookings_table; var timeline; + var bookings_period_length = "[% bookings_period_length | html %]"; $(document).ready(function(){ var items = $.ajax({ @@ -277,6 +278,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 3c9c6cfcb98..1004161e6b7 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,11 @@ 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 %]; + console.log(booking_id); + if (!booking_id) { + duedatespec_fp.setDate(""); + } } } } -- 2.30.2