Skip to content

Commit 3eff029

Browse files
Add PayAtLocation Booking status
1 parent eacf58a commit 3eff029

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
@@ -47,7 +47,7 @@ class BookingMapper @Inject constructor(
4747
name = order.productInfo?.name ?: "-",
4848
customerName = order.customerInfo?.fullName(),
4949
attendanceStatus = BookingAttendanceStatus.BOOKED,
50-
status = status.toUiModel()
50+
status = status.toUiModel(order.status, order.paymentInfo?.paymentMethodId)
5151
)
5252
}
5353

@@ -100,14 +100,23 @@ class BookingMapper @Inject constructor(
100100
)
101101
}
102102

103-
private fun BookingEntity.Status.toUiModel(): BookingStatus = when (this) {
104-
BookingEntity.Status.Paid -> BookingStatus.Paid
105-
BookingEntity.Status.PendingConfirmation -> BookingStatus.PendingConfirmation
106-
BookingEntity.Status.Cancelled -> BookingStatus.Cancelled
107-
BookingEntity.Status.Complete -> BookingStatus.Complete
108-
BookingEntity.Status.Confirmed -> BookingStatus.Confirmed
109-
BookingEntity.Status.Unpaid -> BookingStatus.Unpaid
110-
is BookingEntity.Status.Unknown -> BookingStatus.Unknown(this.key)
103+
private fun BookingEntity.Status.toUiModel(
104+
orderStatus: String?,
105+
paymentMethod: String?,
106+
): BookingStatus {
107+
return if (orderStatus == "completed" && paymentMethod == "cod") {
108+
BookingStatus.PayAtLocation
109+
} else {
110+
when (this) {
111+
BookingEntity.Status.Paid -> BookingStatus.Paid
112+
BookingEntity.Status.PendingConfirmation -> BookingStatus.PendingConfirmation
113+
BookingEntity.Status.Cancelled -> BookingStatus.Cancelled
114+
BookingEntity.Status.Complete -> BookingStatus.Complete
115+
BookingEntity.Status.Confirmed -> BookingStatus.Confirmed
116+
BookingEntity.Status.Unpaid -> BookingStatus.Unpaid
117+
is BookingEntity.Status.Unknown -> BookingStatus.Unknown(this.key)
118+
}
119+
}
111120
}
112121

113122
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
@@ -4212,6 +4212,7 @@
42124212
<string name="booking_payment_status_cancelled">Cancelled</string>
42134213
<string name="booking_payment_status_confirmed">Confirmed</string>
42144214
<string name="booking_payment_status_complete">Complete</string>
4215+
<string name="booking_payment_status_pay_at_location">Pay at location</string>
42154216
<string name="booking_attendance_status_booked">Booked</string>
42164217
<string name="booking_attendance_status_checked_in">Checked-in</string>
42174218
<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
@@ -227,6 +227,29 @@ class BookingMapperTest : BaseUnitTest() {
227227
)
228228
}
229229

230+
@Test
231+
fun `given completed order with COD payment method, when mapped to summary model, then status is PayAtLocation`() {
232+
// GIVEN
233+
val booking = sampleBooking().let { original ->
234+
val paymentInfo = BookingPaymentInfo(
235+
paymentMethodId = "cod",
236+
paymentMethodTitle = "Cash on Delivery",
237+
subtotal = BigDecimal("55.00"),
238+
subtotalTax = BigDecimal("0.00"),
239+
total = BigDecimal("55.00"),
240+
totalTax = BigDecimal("0.00")
241+
)
242+
val orderWithPayment = original.order.copy(paymentInfo = paymentInfo, status = "completed")
243+
original.copy(order = orderWithPayment)
244+
}
245+
246+
// WHEN
247+
val model = mapper.run { booking.toBookingSummaryModel() }
248+
249+
// THEN
250+
assertThat(model.status).isEqualTo(BookingStatus.PayAtLocation)
251+
}
252+
230253
private fun sampleBooking(
231254
status: BookingEntity.Status = BookingEntity.Status.Confirmed,
232255
start: Instant = Instant.parse("2025-07-05T11:00:00Z"),

0 commit comments

Comments
 (0)