From a7aa842cbba290cc61f27e79301125863e8998b6 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Mon, 2 Feb 2026 08:25:14 +0530 Subject: [PATCH] Close booking on single-stay specific checkout --- .../controller/booking/BookingFlow.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt b/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt index dfecb29..228aad1 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt @@ -566,9 +566,18 @@ class BookingFlow( if (booking.status != BookingStatus.CHECKED_IN) { throw ResponseStatusException(HttpStatus.CONFLICT, "Booking not checked in") } + val staysForBooking = roomStayRepo.findByBookingId(bookingId) + val singleStayBooking = staysForBooking.size == 1 val stay = roomStayRepo.findByIdAndBookingId(roomStayId, bookingId) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Room stay not found for booking") if (stay.toAt != null) { + if (singleStayBooking) { + booking.status = BookingStatus.CHECKED_OUT + booking.checkoutAt = stay.toAt + booking.updatedAt = OffsetDateTime.now() + bookingRepo.save(booking) + bookingEvents.emit(propertyId, bookingId) + } return } @@ -597,7 +606,7 @@ class BookingFlow( ) val remainingActive = roomStayRepo.findActiveByBookingId(bookingId) - if (remainingActive.isEmpty()) { + if (singleStayBooking || remainingActive.isEmpty()) { booking.status = BookingStatus.CHECKED_OUT booking.checkoutAt = checkOutAt booking.updatedAt = now