[WOOMOB-2397][POS Refunds M2] Part 1: Refunded items data layer#15488
[WOOMOB-2397][POS Refunds M2] Part 1: Refunded items data layer#15488samiuelson merged 13 commits intotrunkfrom
Conversation
Introduce LineItemsState sealed interface to support loading/loaded states for line items. Add WooPosGetNonRefundedItems and WooPosGroupRefundedItems use-cases, wire them into WooPosOrderDetailsMapper and WooPosOrdersViewModel. Includes minimal UI adaptation for the new LineItemsState type.
Generated by 🚫 Danger |
|
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 11 out of 11 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt
Show resolved
Hide resolved
...src/main/kotlin/com/woocommerce/android/ui/woopos/orders/details/WooPosOrderDetailsMapper.kt
Outdated
Show resolved
Hide resolved
...src/main/kotlin/com/woocommerce/android/ui/woopos/orders/details/WooPosGroupRefundedItems.kt
Outdated
Show resolved
Hide resolved
...src/main/kotlin/com/woocommerce/android/ui/woopos/orders/details/WooPosOrderDetailsMapper.kt
Show resolved
Hide resolved
...rc/main/kotlin/com/woocommerce/android/ui/woopos/orders/details/WooPosGetNonRefundedItems.kt
Show resolved
Hide resolved
...rc/main/kotlin/com/woocommerce/android/ui/woopos/orders/details/WooPosGetNonRefundedItems.kt
Show resolved
Hide resolved
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
When mapOrderDetailsWithoutActions sets lineItems to Loading for orders with refunds, sideLoadBookings early-returns. After sideLoadActions replaces lineItems with Loaded, booking side-loading was never retried.
The copy() was inheriting price from items.first() which doesn't match the aggregated total/quantity. Now recomputes price = total / quantity.
Aligns with buildRefundedLineItems which already passes order.currency to formatPrice for consistency.
…ed items Zero-quantity items with no refunds are now preserved instead of being filtered out. Also uses BigDecimal math (multiply then divide) instead of Float division for proration to avoid precision loss.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #15488 +/- ##
============================================
+ Coverage 39.52% 39.55% +0.03%
- Complexity 11203 11220 +17
============================================
Files 2250 2252 +2
Lines 129313 129413 +100
Branches 18091 18115 +24
============================================
+ Hits 51115 51195 +80
- Misses 72987 72992 +5
- Partials 5211 5226 +15 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
| .fold(0) { acc, item -> acc + item.quantity } | ||
|
|
||
| return order.items.mapNotNull { item -> | ||
| val refundedQty = abs(refundedByItemId[item.itemId] ?: 0).toFloat() |
There was a problem hiding this comment.
❓ If quantity can be negative, shouldn't we invoke abs inside the fold on line 19 instead?

Description
Adds data layer support for refunded line items in POS order details. This is the first of two PRs for WOOMOB-2397.
Changes:
LineItemsStatesealed interface (Loading/Loaded) for line items in order details staterefundedLineItemsfield to order detailsWooPosGetNonRefundedItemsuse-case for filtering out fully refunded itemsWooPosGroupRefundedItemsuse-case for aggregating refund data per order itemWooPosOrderDetailsMapperandWooPosOrdersViewModelFunctional change: refunded products are now now shown inside Products section in POS Order Details. They are going to be shown in a dedicated Refunded Products section instead.
Testing instructions
💡 To test the feature E2E, check out the final PR: #15489
Images/Gif
N/A (data layer only, no visual changes)