Skip to content

Commit 92b306e

Browse files
committed
Update remotes to fetch filtered by created_via
1 parent be286c4 commit 92b306e

File tree

9 files changed

+45
-14
lines changed

9 files changed

+45
-14
lines changed

Modules/Sources/NetworkingCore/Remote/OrdersRemote.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class OrdersRemote: Remote {
2222
/// This method will convert it to UTC ISO 8601 before calling the REST API.
2323
/// - customerID: If given, limit response to orders placed by a customer.
2424
/// - productID: If given, limit response to orders including the given product.
25+
/// - createdVia: If given, limit response to orders created via the specified source (e.g. "pos-rest-api" for Point of Sale).
2526
/// - pageNumber: Number of page that should be retrieved.
2627
/// - pageSize: Number of Orders to be retrieved per page.
2728
/// - completion: Closure to be executed upon completion.
@@ -33,6 +34,7 @@ public class OrdersRemote: Remote {
3334
modifiedAfter: Date? = nil,
3435
customerID: Int64? = nil,
3536
productID: Int64? = nil,
37+
createdVia: String? = nil,
3638
pageNumber: Int = Defaults.pageNumber,
3739
pageSize: Int = Defaults.pageSize,
3840
completion: @escaping (Result<[Order], Error>) -> Void) {
@@ -66,6 +68,10 @@ public class OrdersRemote: Remote {
6668
parameters[ParameterKeys.product] = productID
6769
}
6870

71+
if let createdVia {
72+
parameters[ParameterKeys.createdVia] = createdVia
73+
}
74+
6975
return parameters
7076
}()
7177

@@ -470,6 +476,7 @@ public extension OrdersRemote {
470476
static let usesGMTDates: String = "dates_are_gmt"
471477
static let customer = "customer"
472478
static let product = "product"
479+
static let createdVia = "created_via"
473480
}
474481

475482
enum ParameterValues {

Modules/Sources/Yosemite/Actions/OrderAction.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public enum OrderAction: Action {
3333
/// doesn't matter. It will be converted to UTC later.
3434
/// - customerID: Only include orders placed by the given customer.
3535
/// - productID: Only include orders with `lineItems` including the given product.
36+
/// - createdVia: Only include orders created via the specified source (e.g. "pos-rest-api" for Point of Sale).
3637
///
3738
case fetchFilteredOrders(
3839
siteID: Int64,
@@ -42,6 +43,7 @@ public enum OrderAction: Action {
4243
modifiedAfter: Date? = nil,
4344
customerID: Int64? = nil,
4445
productID: Int64? = nil,
46+
createdVia: String? = nil,
4547
writeStrategy: OrdersStorageWriteStrategy,
4648
pageSize: Int,
4749
onCompletion: (TimeInterval, Result<[Order], Error>) -> Void
@@ -58,6 +60,7 @@ public enum OrderAction: Action {
5860
/// doesn't matter. It will be converted to UTC later.
5961
/// - customerID: Only include orders placed by the given customer.
6062
/// - productID: Only include orders with `lineItems` including the given product.
63+
/// - createdVia: Only include orders created via the specified source (e.g. "pos-rest-api" for Point of Sale).
6164
///
6265
case synchronizeOrders(siteID: Int64,
6366
statuses: [String]?,
@@ -66,6 +69,7 @@ public enum OrderAction: Action {
6669
modifiedAfter: Date? = nil,
6770
customerID: Int64? = nil,
6871
productID: Int64? = nil,
72+
createdVia: String? = nil,
6973
pageNumber: Int,
7074
pageSize: Int,
7175
onCompletion: (TimeInterval, Error?) -> Void)

Modules/Sources/Yosemite/Model/Mocks/ActionHandlers/MockOrderActionHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ struct MockOrderActionHandler: MockActionHandler {
1010

1111
func handle(action: ActionType) {
1212
switch action {
13-
case .fetchFilteredOrders(let siteID, _, _, _, _, _, _, let writeStrategy, let pageSize, let onCompletion):
13+
case .fetchFilteredOrders(let siteID, _, _, _, _, _, _, _, let writeStrategy, let pageSize, let onCompletion):
1414
fetchFilteredAndAllOrders(siteID: siteID,
1515
writeStrategy: writeStrategy,
1616
pageSize: pageSize,
@@ -25,7 +25,7 @@ struct MockOrderActionHandler: MockActionHandler {
2525
} else {
2626
onCompletion(.failure(NSError(domain: "", code: 0)))
2727
}
28-
case .updateOrderStatus(let siteID, let orderID, let status, let onCompletion):
28+
case .updateOrderStatus(_, _, _, let onCompletion):
2929
onCompletion(nil)
3030

3131
default: unimplementedAction(action: action)

Modules/Sources/Yosemite/Stores/OrderStore.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,31 +37,32 @@ public class OrderStore: Store {
3737
retrieveOrderRemotely(siteID: siteID, orderID: orderID, onCompletion: onCompletion)
3838
case .searchOrders(let siteID, let keyword, let pageNumber, let pageSize, let onCompletion):
3939
searchOrders(siteID: siteID, keyword: keyword, pageNumber: pageNumber, pageSize: pageSize, onCompletion: onCompletion)
40-
case let .fetchFilteredOrders(siteID, statuses, after, before, modifiedAfter, customerID, productID, writeStrategy, pageSize, onCompletion):
40+
case let .fetchFilteredOrders(siteID, statuses, after, before, modifiedAfter, customerID, productID, createdVia, writeStrategy, pageSize, onCompletion):
4141
fetchFilteredOrders(siteID: siteID,
4242
statuses: statuses,
4343
after: after,
4444
before: before,
4545
modifiedAfter: modifiedAfter,
4646
customerID: customerID,
4747
productID: productID,
48+
createdVia: createdVia,
4849
writeStrategy: writeStrategy,
4950
pageSize: pageSize,
5051
onCompletion: onCompletion)
51-
case let .synchronizeOrders(siteID, statuses, after, before, modifiedAfter, customerID, productID, pageNumber, pageSize, onCompletion):
52+
case let .synchronizeOrders(siteID, statuses, after, before, modifiedAfter, customerID, productID, createdVia, pageNumber, pageSize, onCompletion):
5253
synchronizeOrders(siteID: siteID,
5354
statuses: statuses,
5455
after: after,
5556
before: before,
5657
modifiedAfter: modifiedAfter,
5758
customerID: customerID,
5859
productID: productID,
60+
createdVia: createdVia,
5961
pageNumber: pageNumber,
6062
pageSize: pageSize,
6163
onCompletion: onCompletion)
6264
case .updateOrderStatus(let siteID, let orderID, let statusKey, let onCompletion):
6365
updateOrder(siteID: siteID, orderID: orderID, status: statusKey, onCompletion: onCompletion)
64-
6566
case let .updateOrder(siteID, order, giftCard, fields, onCompletion):
6667
updateOrder(siteID: siteID, order: order, giftCard: giftCard, fields: fields, onCompletion: onCompletion)
6768
case let .updateOrderOptimistically(siteID, order, fields, onCompletion):
@@ -70,7 +71,6 @@ public class OrderStore: Store {
7071
createSimplePaymentsOrder(siteID: siteID, status: status, amount: amount, taxable: taxable, onCompletion: onCompletion)
7172
case let .createOrder(siteID, order, giftCard, onCompletion):
7273
createOrder(siteID: siteID, order: order, giftCard: giftCard, onCompletion: onCompletion)
73-
7474
case let .updateSimplePaymentsOrder(siteID, orderID, feeID, status, amount, amountName, taxable, orderNote, email, onCompletion):
7575
updateSimplePaymentsOrder(siteID: siteID,
7676
orderID: orderID,
@@ -148,6 +148,7 @@ private extension OrderStore {
148148
modifiedAfter: Date?,
149149
customerID: Int64?,
150150
productID: Int64?,
151+
createdVia: String?,
151152
writeStrategy: OrderAction.OrdersStorageWriteStrategy,
152153
pageSize: Int,
153154
onCompletion: @escaping (TimeInterval, Result<[Order], Error>) -> Void) {
@@ -161,6 +162,7 @@ private extension OrderStore {
161162
modifiedAfter: modifiedAfter,
162163
customerID: customerID,
163164
productID: productID,
165+
createdVia: createdVia,
164166
pageNumber: pageNumber,
165167
pageSize: pageSize) { [weak self] result in
166168
switch result {
@@ -189,6 +191,7 @@ private extension OrderStore {
189191
modifiedAfter: Date?,
190192
customerID: Int64?,
191193
productID: Int64?,
194+
createdVia: String?,
192195
pageNumber: Int,
193196
pageSize: Int,
194197
onCompletion: @escaping (TimeInterval, Error?) -> Void) {
@@ -200,6 +203,7 @@ private extension OrderStore {
200203
modifiedAfter: modifiedAfter,
201204
customerID: customerID,
202205
productID: productID,
206+
createdVia: createdVia,
203207
pageNumber: pageNumber,
204208
pageSize: pageSize) { [weak self] result in
205209
switch result {

WooCommerce/Classes/ViewRelated/Filters/FilterListViewController.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,9 @@ private extension FilterListViewController {
267267
guard let self = self else {
268268
return
269269
}
270-
if selectedOption.description != selected.selectedValue.description {
271-
selected.selectedValue = selectedOption
272-
self.updateUI(numberOfActiveFilters: self.viewModel.filterTypeViewModels.numberOfActiveFilters)
273-
self.listSelector.reloadData()
274-
}
270+
selected.selectedValue = selectedOption
271+
self.updateUI(numberOfActiveFilters: self.viewModel.filterTypeViewModels.numberOfActiveFilters)
272+
self.listSelector.reloadData()
275273
}
276274

277275
switch selected.listSelectorConfig {

WooCommerce/Classes/ViewRelated/Orders/Order Filters/FilterOrderListViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ final class FilterOrderListViewModel: FilterListViewModel {
159159
dateRangeFilterViewModel.selectedValue = filter.dateRange
160160
productFilterViewModel.selectedValue = filter.product
161161
customerFilterViewModel.selectedValue = filter.customer
162+
salesChannelFilterViewModel.selectedValue = filter.salesChannel
162163
analytics.track(event: .FilterHistory.trackPastFilterApplied(source: source))
163164
}
164165

@@ -268,7 +269,7 @@ extension FilterOrderListViewModel.OrderListFilter {
268269
let salesChannelOptions: [FilterOrderListViewModel.SalesChannelFilter] = [.any, .pointOfSale]
269270
return FilterTypeViewModel(title: title,
270271
listSelectorConfig: .staticOptions(options: salesChannelOptions),
271-
selectedValue: filters.salesChannel)
272+
selectedValue: filters.salesChannel ?? .any)
272273
}
273274
}
274275
}

WooCommerce/Classes/ViewRelated/Orders/OrderListSyncActionUseCase.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ struct OrderListSyncActionUseCase {
6363
let endDate = filters?.dateRange?.computedEndDate
6464
let productID = filters?.product?.id
6565
let customerID = filters?.customer?.id
66+
let createdVia = filters?.salesChannel == .pointOfSale ? "pos-rest-api" : nil
6667

6768
if pageNumber == Defaults.pageFirstIndex {
6869
let deleteAllBeforeSaving = reason == SyncReason.pullToRefresh || reason == SyncReason.newFiltersApplied
@@ -76,6 +77,7 @@ struct OrderListSyncActionUseCase {
7677
modifiedAfter: modifiedAfter,
7778
customerID: customerID,
7879
productID: productID,
80+
createdVia: createdVia,
7981
writeStrategy: deleteAllBeforeSaving ? .deleteAllBeforeSaving : .save,
8082
pageSize: pageSize,
8183
onCompletion: { timeInterval, result in
@@ -96,6 +98,7 @@ struct OrderListSyncActionUseCase {
9698
before: endDate,
9799
customerID: customerID,
98100
productID: productID,
101+
createdVia: createdVia,
99102
pageNumber: pageNumber,
100103
pageSize: pageSize,
101104
onCompletion: completionHandler

WooCommerce/Classes/ViewRelated/Orders/OrderListViewModel.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,23 @@ final class OrderListViewModel {
250250
return NSCompoundPredicate(andPredicateWithSubpredicates: predicates)
251251
}()
252252

253+
let predicateSalesChannel: NSPredicate? = {
254+
guard let salesChannelFilter = filters?.salesChannel else {
255+
return nil
256+
}
257+
258+
switch salesChannelFilter {
259+
case .pointOfSale:
260+
let predicate = NSPredicate(format: "createdVia == %@", "pos-rest-api")
261+
return predicate
262+
case .any:
263+
return nil
264+
}
265+
}()
266+
253267
let siteIDPredicate = NSPredicate(format: "siteID = %lld", siteID)
254-
let queryPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [siteIDPredicate, predicateStatus, predicateDateRanges])
268+
let allPredicates = [siteIDPredicate, predicateStatus, predicateDateRanges, predicateSalesChannel].compactMap { $0 }
269+
let queryPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: allPredicates)
255270

256271
return FetchResultSnapshotsProvider<StorageOrder>.Query(
257272
sortDescriptor: NSSortDescriptor(keyPath: \StorageOrder.dateCreated, ascending: false),

WooCommerce/Classes/ViewRelated/Orders/OrdersRootViewController.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,6 @@ final class OrdersRootViewController: UIViewController {
312312
let viewModel = FilterOrderListViewModel(filters: filters, allowedStatuses: allowedStatuses, siteID: siteID)
313313
let filterOrderListViewController = FilterListViewController(viewModel: viewModel, onFilterAction: { [weak self] filters in
314314
self?.filters = filters
315-
316315
self?.analytics.track(event: .OrdersFilter.onFilterOrders(filters: filters))
317316
}, onClearAction: {
318317
}, onDismissAction: {

0 commit comments

Comments
 (0)