From 1bafc533e9328480aef9d1c16dfb08c28f0e5ecc Mon Sep 17 00:00:00 2001 From: iamgabrielma Date: Wed, 19 Feb 2025 09:26:16 +0100 Subject: [PATCH] Updated milliseconds_since_order_sync_success We track this property when the order is created or updated --- .../POSCollectOrderPaymentAnalytics.swift | 24 +++++++++---------- .../WooAnalyticsEvent+PointOfSale.swift | 6 ++--- .../Models/PointOfSaleAggregateModel.swift | 20 +++++++++++++--- .../CollectOrderPaymentAnalytics.swift | 2 +- ...kCollectOrderPaymentAnalyticsTracker.swift | 2 +- ...POSCollectOrderPaymentAnalyticsTests.swift | 2 +- 6 files changed, 35 insertions(+), 21 deletions(-) diff --git a/WooCommerce/Classes/POS/Analytics/POSCollectOrderPaymentAnalytics.swift b/WooCommerce/Classes/POS/Analytics/POSCollectOrderPaymentAnalytics.swift index b6e0c8ff6aa..fdfc51a0a62 100644 --- a/WooCommerce/Classes/POS/Analytics/POSCollectOrderPaymentAnalytics.swift +++ b/WooCommerce/Classes/POS/Analytics/POSCollectOrderPaymentAnalytics.swift @@ -5,7 +5,7 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin var connectedReaderModel: String? private var customerInteractionStarted: Double = 0 - private var orderCreated: Double = 0 + private var orderSync: Double = 0 private var cardReaderReady: Double = 0 private var cardReaderTapped: Double = 0 private var checkoutTapCount: Int = 0 @@ -24,8 +24,8 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin // Property: milliseconds_since_customer_interaction_started let elapsedTimeSinceCustomerInteraction = calculateElapsedTimeInMilliseconds(since: customerInteractionStarted) - // Property: milliseconds_since_order_creation_success - let elapsedTimeSinceOrderCreation = calculateElapsedTimeInMilliseconds(since: orderCreated) + // Property: milliseconds_since_order_sync_success + let elapsedTimeSinceOrderSync = calculateElapsedTimeInMilliseconds(since: orderSync) // Property: milliseconds_since_reader_ready_to_collect_payment let elapsedTimeSinceCardReaderReady = calculateElapsedTimeInMilliseconds(since: cardReaderReady) @@ -35,7 +35,7 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin analytics.track(event: .PointOfSale.cardPresentCollectPaymentSuccess( millisecondsSinceCustomerIteractionStarted: elapsedTimeSinceCustomerInteraction, - millisecondsSinceOrderCreationSuccess: elapsedTimeSinceOrderCreation, + millisecondsSinceOrderSyncSuccess: elapsedTimeSinceOrderSync, millisecondsSinceReaderReadyToCollect: elapsedTimeSinceCardReaderReady, millisecondsSinceCardTapped: elapsedTimeSinceCardTapped, checkoutTapCount: checkoutTapCount @@ -69,15 +69,15 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin customerInteractionStarted = Date().timeIntervalSince1970 } - func trackOrderCreationSuccess() { - orderCreated = trackCurrentTime() + func trackOrderSyncSuccess() { + orderSync = trackCurrentTime() } func trackCardReaderReady() { cardReaderReady = trackCurrentTime() - // As a side effect of knowing when the reader is ready, we track the elapsed from order creation - trackElapsedTimeFromOrderCreationToCardReady() + // As a side effect of knowing when the reader is ready, we track the elapsed from order sync (created or updated) + trackElapsedTimeFromOrderSyncToCardReady() } // The Stripe SDK returns multiple `.processing` events, but we want to capture the first one in the stream only. @@ -97,8 +97,8 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin checkoutTapCount = 0 } - private func trackElapsedTimeFromOrderCreationToCardReady() { - let elapsedTime = cardReaderReady - orderCreated + private func trackElapsedTimeFromOrderSyncToCardReady() { + let elapsedTime = cardReaderReady - orderSync analytics.track(event: .PointOfSale.cardReaderReadyForCardPayment(waitingTime: elapsedTime)) } } @@ -119,7 +119,7 @@ private extension POSCollectOrderPaymentAnalytics { } private func resetAllCountersOnInteractionStarted() { - orderCreated = 0 + orderSync = 0 cardReaderReady = 0 cardReaderTapped = 0 resetCheckoutTapCountTracker() @@ -131,7 +131,7 @@ private extension POSCollectOrderPaymentAnalytics { // https://github.com/woocommerce/woocommerce-ios/issues/15149 extension CollectOrderPaymentAnalytics { func trackCustomerInteractionStarted() { } - func trackOrderCreationSuccess() { } + func trackOrderSyncSuccess() { } func trackCardReaderReady() { } func trackCardReaderTapped() { } func trackCheckoutTapped() { } diff --git a/WooCommerce/Classes/POS/Analytics/WooAnalyticsEvent+PointOfSale.swift b/WooCommerce/Classes/POS/Analytics/WooAnalyticsEvent+PointOfSale.swift index c60e2590027..f6db030e25a 100644 --- a/WooCommerce/Classes/POS/Analytics/WooAnalyticsEvent+PointOfSale.swift +++ b/WooCommerce/Classes/POS/Analytics/WooAnalyticsEvent+PointOfSale.swift @@ -13,7 +13,7 @@ extension WooAnalyticsEvent { static let itemType = "product_type" static let itemsInCart = "items_in_cart" static let millisecondsSinceCustomerInteractionStarted = "milliseconds_since_customer_interaction_started" - static let millisecondsSinceOrderCreationSuccess = "milliseconds_since_order_creation_success" + static let millisecondsSinceOrderSyncSuccess = "milliseconds_since_order_sync_success" static let millisecondsSinceReaderReadyToCollect = "milliseconds_since_reader_ready_to_collect_payment" static let millisecondsSinceCardTapped = "milliseconds_since_card_tapped" static let checkoutTapCount = "checkout_tap_count" @@ -46,13 +46,13 @@ extension WooAnalyticsEvent { } static func cardPresentCollectPaymentSuccess(millisecondsSinceCustomerIteractionStarted: Double, - millisecondsSinceOrderCreationSuccess: Double, + millisecondsSinceOrderSyncSuccess: Double, millisecondsSinceReaderReadyToCollect: Double, millisecondsSinceCardTapped: Double, checkoutTapCount: Int) -> WooAnalyticsEvent { WooAnalyticsEvent(statName: .collectPaymentSuccess, properties: [ Key.millisecondsSinceCustomerInteractionStarted: "\(millisecondsSinceCustomerIteractionStarted)", - Key.millisecondsSinceOrderCreationSuccess: "\(millisecondsSinceOrderCreationSuccess)", + Key.millisecondsSinceOrderSyncSuccess: "\(millisecondsSinceOrderSyncSuccess)", Key.millisecondsSinceReaderReadyToCollect: "\(millisecondsSinceReaderReadyToCollect)", Key.millisecondsSinceCardTapped: "\(millisecondsSinceCardTapped)", Key.checkoutTapCount: "\(checkoutTapCount)" diff --git a/WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift b/WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift index 173d8cdd115..08600840dc5 100644 --- a/WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift +++ b/WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift @@ -165,6 +165,22 @@ private extension PointOfSaleAggregateModel { collectOrderPaymentAnalyticsTracker.trackCustomerInteractionStarted() } } + + // Tracks when the order is created or updated successfully + // pdfdoF-6hn#comment-7625-p2 + func trackOrderSyncState(_ result: Result) { + switch result { + case .success(let syncState): + switch syncState { + case .newOrder, .orderUpdated: + collectOrderPaymentAnalyticsTracker.trackOrderSyncSuccess() + default: + break + } + case .failure: + break + } + } } // MARK: - Card payments @@ -453,9 +469,7 @@ extension PointOfSaleAggregateModel { let syncOrderResult = await orderController.syncOrder(for: cart, retryHandler: { [weak self] in await self?.checkOut() }) - if case .success(.newOrder) = syncOrderResult { - collectOrderPaymentAnalyticsTracker.trackOrderCreationSuccess() - } + trackOrderSyncState(syncOrderResult) await startPaymentWhenCardReaderConnected() } } diff --git a/WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentAnalytics.swift b/WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentAnalytics.swift index be9d61425d2..12b60825fe1 100644 --- a/WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentAnalytics.swift +++ b/WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentAnalytics.swift @@ -26,7 +26,7 @@ protocol CollectOrderPaymentAnalyticsTracking { func trackReceiptPrintFailed(error: Error) func trackCustomerInteractionStarted() - func trackOrderCreationSuccess() + func trackOrderSyncSuccess() func trackCardReaderReady() func trackCardReaderTapped() func trackCheckoutTapped() diff --git a/WooCommerce/WooCommerceTests/Mocks/MockCollectOrderPaymentAnalyticsTracker.swift b/WooCommerce/WooCommerceTests/Mocks/MockCollectOrderPaymentAnalyticsTracker.swift index 8032171ffa7..5c6e4aba671 100644 --- a/WooCommerce/WooCommerceTests/Mocks/MockCollectOrderPaymentAnalyticsTracker.swift +++ b/WooCommerce/WooCommerceTests/Mocks/MockCollectOrderPaymentAnalyticsTracker.swift @@ -58,7 +58,7 @@ final class MockCollectOrderPaymentAnalyticsTracker: CollectOrderPaymentAnalytic // no-op } - func trackOrderCreationSuccess() { + func trackOrderSyncSuccess() { // no-op } diff --git a/WooCommerce/WooCommerceTests/POS/Analytics/POSCollectOrderPaymentAnalyticsTests.swift b/WooCommerce/WooCommerceTests/POS/Analytics/POSCollectOrderPaymentAnalyticsTests.swift index a2e64fda77c..5ca22be7b87 100644 --- a/WooCommerce/WooCommerceTests/POS/Analytics/POSCollectOrderPaymentAnalyticsTests.swift +++ b/WooCommerce/WooCommerceTests/POS/Analytics/POSCollectOrderPaymentAnalyticsTests.swift @@ -17,7 +17,7 @@ struct POSCollectOrderPaymentAnalyticsTests { let capturedPaymentData = CardPresentCapturedPaymentData(paymentMethod: .cardPresent(details: .fake()), receiptParameters: nil) let expectedEvent = "card_present_collect_payment_success" let expectedProperties = [ - "milliseconds_since_order_creation_success", + "milliseconds_since_order_sync_success", "milliseconds_since_reader_ready_to_collect_payment", "milliseconds_since_card_tapped", "milliseconds_since_customer_interaction_started",