Allow guest document delete when reused guest has active booking
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s
This commit is contained in:
@@ -2539,6 +2539,7 @@ GUEST + DOCUMENT + RATING APIS
|
||||
|
||||
- Deletes document row + file.
|
||||
- Allowed only when booking is OPEN or CHECKED_IN.
|
||||
- Reused guest flow: if the document's linked booking is closed but the same guest has another OPEN/CHECKED_IN booking in that property, delete is allowed.
|
||||
|
||||
Request body:
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.android.trisolarisserver.component.auth.PropertyAccess
|
||||
import com.android.trisolarisserver.repo.booking.BookingRepo
|
||||
import com.android.trisolarisserver.repo.guest.GuestDocumentRepo
|
||||
import com.android.trisolarisserver.repo.guest.GuestRepo
|
||||
import com.android.trisolarisserver.models.booking.BookingStatus
|
||||
import com.android.trisolarisserver.models.booking.GuestDocument
|
||||
import com.android.trisolarisserver.models.property.Role
|
||||
import com.android.trisolarisserver.repo.property.AppUserRepo
|
||||
@@ -192,9 +193,13 @@ class GuestDocuments(
|
||||
val document = guestDocumentRepo.findByIdAndPropertyIdAndGuestId(documentId, propertyId, guestId)
|
||||
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Document not found")
|
||||
val status = document.booking.status
|
||||
if (status != com.android.trisolarisserver.models.booking.BookingStatus.OPEN &&
|
||||
status != com.android.trisolarisserver.models.booking.BookingStatus.CHECKED_IN
|
||||
) {
|
||||
val linkedBookingOpenOrCheckedIn = status == BookingStatus.OPEN || status == BookingStatus.CHECKED_IN
|
||||
val guestHasOpenOrCheckedInBooking = bookingRepo.existsByPropertyIdAndPrimaryGuestIdAndStatusIn(
|
||||
propertyId = propertyId,
|
||||
primaryGuestId = guestId,
|
||||
status = listOf(BookingStatus.OPEN, BookingStatus.CHECKED_IN)
|
||||
)
|
||||
if (!linkedBookingOpenOrCheckedIn && !guestHasOpenOrCheckedInBooking) {
|
||||
throw ResponseStatusException(
|
||||
HttpStatus.BAD_REQUEST,
|
||||
"Documents can only be deleted for OPEN or CHECKED_IN bookings"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.android.trisolarisserver.repo.booking
|
||||
|
||||
import com.android.trisolarisserver.models.booking.Booking
|
||||
import com.android.trisolarisserver.models.booking.BookingStatus
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.data.jpa.repository.EntityGraph
|
||||
import java.util.UUID
|
||||
@@ -16,4 +17,10 @@ interface BookingRepo : JpaRepository<Booking, UUID> {
|
||||
|
||||
@EntityGraph(attributePaths = ["property", "primaryGuest", "createdBy"])
|
||||
fun findDetailedById(id: UUID): java.util.Optional<Booking>
|
||||
|
||||
fun existsByPropertyIdAndPrimaryGuestIdAndStatusIn(
|
||||
propertyId: UUID,
|
||||
primaryGuestId: UUID,
|
||||
status: Collection<BookingStatus>
|
||||
): Boolean
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user