From a946521c5ab8ec93e1ffa1131ba4f069205f0322 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Thu, 29 Jan 2026 23:34:50 +0530 Subject: [PATCH] Use expected checkout for booking detail expected pay --- .../controller/BookingFlow.kt | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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