From c38c43a16ebf27fb579c5385a2057ab4890c7d59 Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Wed, 13 Aug 2025 11:28:41 +0000 Subject: [PATCH] Bug 40644: Only count checkouts that have not yet been counted as bookings Test plan: 1) Have a record with 8 items. 2) Place a booking on 6 of the items (6 bookings total) for a full month (e.g. August) 3) Check-out all 6 of those bookings 4) Attempt to place a new booking for one of the 2 free items for end of month, e.g. (Aug 26 -> Aug 28). 5) It will fail with error "Booking conflicts". This is because the code is adding 6 checkouts with 6 bookings = 12 which is higher than 8 bookable items. 6) With this patch, check-outs that refer to an existing booking are excluded, so the check becomes if 8 - 6 > 0 (which passes the check) rather than 8 - 12 > 0 (which fails the check) Run existing tests: prove t/db_dependent/Koha/Item.t prove t/db_dependent/Koha/Biblio.t prove t/db_dependent/Koha/Booking.t --- Koha/Biblio.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 4c88bcd8a58..3ab87b9ea85 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -394,7 +394,12 @@ sub check_booking { ? $existing_bookings->search( { booking_id => { '!=' => $booking_id } } )->count : $existing_bookings->count; - my $checkouts = $self->current_checkouts->search( { date_due => { '>=' => $dtf->format_datetime($start_date) } } ); + my $checkouts = $self->current_checkouts->search( + { + date_due => { '>=' => $dtf->format_datetime($start_date) }, + "me.itemnumber" => { '-not_in' => $existing_bookings->_resultset->get_column('item_id')->as_query } + } + ); $booked_count += $checkouts->count; return ( ( $total_bookable - $booked_count ) > 0 ) ? 1 : 0; -- 2.39.5