Use expected checkout for booking detail expected pay
All checks were successful
build-and-deploy / build-deploy (push) Successful in 34s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 34s
This commit is contained in:
@@ -250,7 +250,7 @@ class BookingFlow(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val totalNightlyRate = roomsToShow.sumOf { it.nightlyRate ?: 0L }
|
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 amountCollected = paymentRepo.sumAmountByBookingId(bookingId)
|
||||||
val pending = expectedPay - amountCollected
|
val pending = expectedPay - amountCollected
|
||||||
|
|
||||||
@@ -731,6 +731,26 @@ class BookingFlow(
|
|||||||
return total
|
return total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun computeExpectedPayTotal(
|
||||||
|
stays: List<RoomStay>,
|
||||||
|
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 {
|
private fun daysBetweenInclusive(start: java.time.LocalDate, end: java.time.LocalDate): Long {
|
||||||
val diff = end.toEpochDay() - start.toEpochDay()
|
val diff = end.toEpochDay() - start.toEpochDay()
|
||||||
return if (diff <= 0) 1L else diff
|
return if (diff <= 0) 1L else diff
|
||||||
|
|||||||
Reference in New Issue
Block a user