diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt index 43f1918..d22d541 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt @@ -250,7 +250,7 @@ class BookingFlow( } val totalNightlyRate = roomsToShow.sumOf { it.nightlyRate ?: 0L } - val expectedPay = computeExpectedPay(stays, booking.property.timezone) + val expectedPay = computeExpectedPayTotal(stays, booking.expectedCheckoutAt, booking.property.timezone) val amountCollected = paymentRepo.sumAmountByBookingId(bookingId) val pending = expectedPay - amountCollected @@ -731,6 +731,26 @@ class BookingFlow( return total } + private fun computeExpectedPayTotal( + stays: List, + expectedCheckoutAt: OffsetDateTime?, + timezone: String? + ): Long { + if (stays.isEmpty()) return 0 + val now = nowForProperty(timezone) + var total = 0L + stays.forEach { stay -> + val rate = stay.nightlyRate ?: 0L + if (rate == 0L) return@forEach + val start = stay.fromAt.toLocalDate() + val endAt = stay.toAt ?: expectedCheckoutAt ?: now + val end = endAt.toLocalDate() + val nights = daysBetweenInclusive(start, end) + total += rate * nights + } + return total + } + private fun daysBetweenInclusive(start: java.time.LocalDate, end: java.time.LocalDate): Long { val diff = end.toEpochDay() - start.toEpochDay() return if (diff <= 0) 1L else diff