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

Signed-off-by: Andrew Fuerste Henry <andrew@bywatersolutions.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 6a729b4442)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
(cherry picked from commit 4530773512)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Pedro Amorim 2025-08-13 11:28:41 +00:00 committed by Fridolin Somers
parent 15f12c32c9
commit 774cbf2386
No known key found for this signature in database
GPG Key ID: 9A8E73E2A8B96537
1 changed files with 6 additions and 1 deletions

View File

@ -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;