Skip to content

Commit f67e7de

Browse files
Add PayAtLocation Booking status
1 parent 8b48ed1 commit f67e7de

File tree

4 files changed

+44
-9
lines changed

4 files changed

+44
-9
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/BookingMapper.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class BookingMapper @Inject constructor(
4444
name = order.productInfo?.name ?: "-",
4545
customerName = order.customerInfo?.fullName(),
4646
attendanceStatus = BookingAttendanceStatus.BOOKED,
47-
status = status.toUiModel()
47+
status = status.toUiModel(order.status, order.paymentInfo?.paymentMethodId)
4848
)
4949
}
5050

@@ -95,14 +95,23 @@ class BookingMapper @Inject constructor(
9595
)
9696
}
9797

98-
private fun BookingEntity.Status.toUiModel(): BookingStatus = when (this) {
99-
BookingEntity.Status.Paid -> BookingStatus.Paid
100-
BookingEntity.Status.PendingConfirmation -> BookingStatus.PendingConfirmation
101-
BookingEntity.Status.Cancelled -> BookingStatus.Cancelled
102-
BookingEntity.Status.Complete -> BookingStatus.Complete
103-
BookingEntity.Status.Confirmed -> BookingStatus.Confirmed
104-
BookingEntity.Status.Unpaid -> BookingStatus.Unpaid
105-
is BookingEntity.Status.Unknown -> BookingStatus.Unknown(this.key)
98+
private fun BookingEntity.Status.toUiModel(
99+
orderStatus: String?,
100+
paymentMethod: String?,
101+
): BookingStatus {
102+
return if (orderStatus == "completed" && paymentMethod == "cod") {
103+
BookingStatus.PayAtLocation
104+
} else {
105+
when (this) {
106+
BookingEntity.Status.Paid -> BookingStatus.Paid
107+
BookingEntity.Status.PendingConfirmation -> BookingStatus.PendingConfirmation
108+
BookingEntity.Status.Cancelled -> BookingStatus.Cancelled
109+
BookingEntity.Status.Complete -> BookingStatus.Complete
110+
BookingEntity.Status.Confirmed -> BookingStatus.Confirmed
111+
BookingEntity.Status.Unpaid -> BookingStatus.Unpaid
112+
is BookingEntity.Status.Unknown -> BookingStatus.Unknown(this.key)
113+
}
114+
}
106115
}
107116

108117
private fun BookingCustomerInfo.fullName(): String? {

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/compose/BookingStatusTag.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ fun BookingStatusTag(
2525
}
2626

2727
sealed interface BookingStatus {
28+
data object PayAtLocation : BookingStatus
2829
data object Unpaid : BookingStatus
2930
data object PendingConfirmation : BookingStatus
3031
data object Confirmed : BookingStatus
@@ -43,6 +44,7 @@ private fun BookingStatus.text(): String {
4344
BookingStatus.Paid -> stringResource(R.string.booking_payment_status_paid)
4445
BookingStatus.Cancelled -> stringResource(R.string.booking_payment_status_cancelled)
4546
BookingStatus.Complete -> stringResource(R.string.booking_payment_status_complete)
47+
BookingStatus.PayAtLocation -> stringResource(R.string.booking_payment_status_pay_at_location)
4648
is BookingStatus.Unknown -> key
4749
}
4850
}

WooCommerce/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4211,6 +4211,7 @@
42114211
<string name="booking_payment_status_cancelled">Cancelled</string>
42124212
<string name="booking_payment_status_confirmed">Confirmed</string>
42134213
<string name="booking_payment_status_complete">Complete</string>
4214+
<string name="booking_payment_status_pay_at_location">Pay at location</string>
42144215
<string name="booking_attendance_status_booked">Booked</string>
42154216
<string name="booking_attendance_status_checked_in">Checked-in</string>
42164217
<string name="booking_attendance_status_cancelled">Cancelled</string>

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/bookings/BookingMapperTest.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,29 @@ class BookingMapperTest : BaseUnitTest() {
169169
assertThat(model.total).isEqualTo("$110.00")
170170
}
171171

172+
@Test
173+
fun `given completed order with COD payment method, when mapped to summary model, then status is PayAtLocation`() {
174+
// GIVEN
175+
val booking = sampleBooking().let { original ->
176+
val paymentInfo = BookingPaymentInfo(
177+
paymentMethodId = "cod",
178+
paymentMethodTitle = "Cash on Delivery",
179+
subtotal = BigDecimal("55.00"),
180+
subtotalTax = BigDecimal("0.00"),
181+
total = BigDecimal("55.00"),
182+
totalTax = BigDecimal("0.00")
183+
)
184+
val orderWithPayment = original.order.copy(paymentInfo = paymentInfo, status = "completed")
185+
original.copy(order = orderWithPayment)
186+
}
187+
188+
// WHEN
189+
val model = mapper.run { booking.toBookingSummaryModel() }
190+
191+
// THEN
192+
assertThat(model.status).isEqualTo(BookingStatus.PayAtLocation)
193+
}
194+
172195
private fun sampleBooking(
173196
status: BookingEntity.Status = BookingEntity.Status.Confirmed,
174197
start: Instant = Instant.parse("2025-07-05T11:00:00Z"),

0 commit comments

Comments
 (0)