Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
f6a6cdd
Cleanup: Remove unused available flag from revenue response payload
ParaskP7 Oct 2, 2025
9906fdc
Cleanup: Remove unnecessary rows affected from on revenue stats changed
ParaskP7 Oct 2, 2025
e0ec99d
Refactor: Make getXyzRevenueStats suspend functions
ParaskP7 Oct 2, 2025
23c1552
Migrate: 'WCRevenueStatsModel' from wellsql to room
ParaskP7 Oct 2, 2025
97ac561
Db: Drop 'WCRevenueStatsModel' table from 'wp-fluxc'
ParaskP7 Oct 2, 2025
937ac1c
Analysis: Suppress unit test naming rule closer to revenue stats test
ParaskP7 Oct 2, 2025
c44e959
Merge branch 'trunk' of github.com:woocommerce/woocommerce-android in…
ParaskP7 Oct 8, 2025
5c457ba
Refactor: Make revenue range id not empty by default
ParaskP7 Oct 8, 2025
1fe4788
Migration: Introduce type converter for stats granularity
ParaskP7 Oct 8, 2025
92d5229
Test: Reduce duplicate fakes within wc stats store test
ParaskP7 Oct 8, 2025
d057e20
Merge branch 'trunk' of github.com:woocommerce/woocommerce-android in…
ParaskP7 Oct 8, 2025
6798713
Analysis: Fix detect issues on type converter tests
ParaskP7 Oct 8, 2025
20ec4e4
Merge branch 'trunk' of github.com:woocommerce/woocommerce-android in…
ParaskP7 Oct 9, 2025
d54dc9e
Refactor: Move stats time range data class to libs commons
ParaskP7 Oct 9, 2025
0cb4a44
Refactor: Move to revenue range id extension function to libs commons
ParaskP7 Oct 9, 2025
e61a21b
Refactor: Move as revenue range id extension function to libs commons
ParaskP7 Oct 9, 2025
d6c69bb
Merge branch 'trunk' of github.com:woocommerce/woocommerce-android in…
ParaskP7 Oct 9, 2025
1a9768c
Merge branch 'trunk' of github.com:woocommerce/woocommerce-android in…
ParaskP7 Oct 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import com.woocommerce.android.wear.util.DateUtils
import com.woocommerce.commons.DataParameters.ORDERS_COUNT
import com.woocommerce.commons.DataParameters.TOTAL_REVENUE
import com.woocommerce.commons.DataParameters.VISITORS_TOTAL
import com.woocommerce.commons.stats.StatsTimeRange
import com.woocommerce.commons.stats.StatsUtils.toRevenueRangeId
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
import org.wordpress.android.fluxc.model.SiteModel
Expand Down Expand Up @@ -61,7 +63,8 @@ class StatsRepository @Inject constructor(
site = selectedSite,
granularity = StatsGranularity.DAYS,
startDate = todayRange.start.formatToYYYYmmDDhhmmss(),
endDate = todayRange.end.formatToYYYYmmDDhhmmss()
endDate = todayRange.end.formatToYYYYmmDDhhmmss(),
revenueRangeId = StatsTimeRange(todayRange.start, todayRange.end).toRevenueRangeId("Wear")
)
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
package com.woocommerce.android.wear.ui.stats.range

import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date

@Parcelize
data class StatsTimeRange(
val start: Date,
val end: Date
) : Parcelable

abstract class StatsTimeRangeData(
referenceCalendar: Calendar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.woocommerce.android.wear.extensions.formatToMMMddYYYY
import com.woocommerce.android.wear.extensions.oneDayAgo
import com.woocommerce.android.wear.extensions.startOfCurrentDay
import com.woocommerce.android.wear.util.DateUtils
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Locale

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import com.woocommerce.android.ui.analytics.ranges.revenueStatsGranularity
import com.woocommerce.android.ui.analytics.ranges.visitorStatsGranularity
import com.woocommerce.android.ui.analytics.ranges.visitorSummaryStatsGranularity
import com.woocommerce.android.ui.dashboard.data.StatsRepository
import com.woocommerce.android.ui.dashboard.data.asRevenueRangeId
import com.woocommerce.commons.stats.StatsUtils.asRevenueRangeId
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ import com.woocommerce.android.ui.analytics.hub.sync.AnalyticsRepository.Product
import com.woocommerce.android.ui.analytics.hub.sync.AnalyticsRepository.RevenueResult.RevenueData
import com.woocommerce.android.ui.analytics.hub.sync.AnalyticsRepository.RevenueResult.RevenueError
import com.woocommerce.android.ui.analytics.ranges.NotSupportedGranularity
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.analytics.ranges.revenueStatsGranularity
import com.woocommerce.android.ui.analytics.ranges.visitorStatsGranularity
import com.woocommerce.android.ui.analytics.ranges.visitorSummaryStatsGranularity
import com.woocommerce.android.ui.dashboard.data.StatsRepository
import com.woocommerce.android.ui.dashboard.data.asRevenueRangeId
import com.woocommerce.commons.stats.StatsTimeRange
import com.woocommerce.commons.stats.StatsUtils.asRevenueRangeId
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.woocommerce.android.ui.analytics.ranges

import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar

abstract class StatsTimeRangeData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,13 @@ import com.woocommerce.android.ui.analytics.ranges.data.TodayRangeData
import com.woocommerce.android.ui.analytics.ranges.data.WeekToDateRangeData
import com.woocommerce.android.ui.analytics.ranges.data.YearToDateRangeData
import com.woocommerce.android.ui.analytics.ranges.data.YesterdayRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import kotlinx.parcelize.Parcelize
import org.wordpress.android.fluxc.store.WCStatsStore.StatsGranularity
import java.util.Calendar
import java.util.Date
import java.util.Locale

@Parcelize
data class StatsTimeRange(
val start: Date,
val end: Date
) : Parcelable

/**
* This class represents the date range selection for the Analytics Hub and the Stats screen
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentDay
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneDayAgo
import com.woocommerce.android.extensions.startOfCurrentDay
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentMonth
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneMonthAgo
import com.woocommerce.android.extensions.startOfCurrentMonth
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentQuarter
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneQuarterAgo
import com.woocommerce.android.extensions.startOfCurrentQuarter
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentWeek
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneWeekAgo
import com.woocommerce.android.extensions.startOfCurrentWeek
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentYear
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneYearAgo
import com.woocommerce.android.extensions.startOfCurrentYear
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentMonth
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneMonthAgo
import com.woocommerce.android.extensions.startOfCurrentMonth
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentQuarter
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneQuarterAgo
import com.woocommerce.android.extensions.startOfCurrentQuarter
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentDay
import com.woocommerce.android.extensions.formatToMMMddYYYY
import com.woocommerce.android.extensions.oneDayAgo
import com.woocommerce.android.extensions.startOfCurrentDay
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentWeek
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneWeekAgo
import com.woocommerce.android.extensions.startOfCurrentWeek
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentYear
import com.woocommerce.android.extensions.formatAsRangeWith
import com.woocommerce.android.extensions.oneYearAgo
import com.woocommerce.android.extensions.startOfCurrentYear
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.woocommerce.android.extensions.endOfCurrentDay
import com.woocommerce.android.extensions.formatToMMMddYYYY
import com.woocommerce.android.extensions.oneDayAgo
import com.woocommerce.android.extensions.startOfCurrentDay
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeData
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Calendar
import java.util.Date
import java.util.Locale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ class GetWidgetStats @Inject constructor(
visitorStatsGranularity = rangeSelection.visitorStatsGranularity,
forced = true,
includeVisitorStats = areVisitorStatsSupported,
site = siteModel
site = siteModel,
medium = "Widget",
)
fetchedStats.fold(
onSuccess = { stats ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import com.woocommerce.android.model.Coupon
import com.woocommerce.android.model.CouponPerformanceReport
import com.woocommerce.android.model.toAppModel
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.coupons.tracking.StoreManagementCouponCreationFlowTrackerEventProvider
import com.woocommerce.android.ui.woopos.home.items.coupons.creation.WooPosCouponCreationFlowTrackerEventProvider
import com.woocommerce.android.util.DateUtils
import com.woocommerce.android.util.WooLog
import com.woocommerce.commons.stats.StatsTimeRange
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
import com.woocommerce.android.model.DashboardWidget
import com.woocommerce.android.model.DashboardWidget.Type.COUPONS
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.compose.animations.SkeletonView
import com.woocommerce.android.ui.compose.rememberNavController
Expand All @@ -49,6 +48,7 @@ import com.woocommerce.android.ui.dashboard.coupons.DashboardCouponsViewModel.Da
import com.woocommerce.android.ui.dashboard.coupons.DashboardCouponsViewModel.State
import com.woocommerce.android.ui.dashboard.defaultHideMenuEntry
import com.woocommerce.android.viewmodel.MultiLiveEvent
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Date

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.analytics.AnalyticsTrackerWrapper
import com.woocommerce.android.model.CouponPerformanceReport
import com.woocommerce.android.model.DashboardWidget
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.coupons.CouponRepository
Expand All @@ -24,6 +23,7 @@ import com.woocommerce.android.util.CouponUtils
import com.woocommerce.android.util.WooLog
import com.woocommerce.android.viewmodel.MultiLiveEvent
import com.woocommerce.android.viewmodel.ScopedViewModel
import com.woocommerce.commons.stats.StatsTimeRange
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.woocommerce.android.ui.dashboard.data

import androidx.datastore.core.DataStore
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.mystore.data.CustomDateRange
import com.woocommerce.android.util.WooLog
import com.woocommerce.commons.stats.StatsTimeRange
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import com.woocommerce.android.extensions.semverCompareTo
import com.woocommerce.android.network.giftcard.GiftCardRestClient
import com.woocommerce.android.network.giftcard.toWCModel
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.util.CoroutineDispatchers
import com.woocommerce.android.util.GetWooCorePluginCachedVersion
import com.woocommerce.android.util.WooLog
import com.woocommerce.android.util.WooLog.T.DASHBOARD
import com.woocommerce.commons.stats.StatsTimeRange
import com.woocommerce.commons.stats.StatsUtils.toRevenueRangeId
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
Expand Down Expand Up @@ -63,7 +64,7 @@ class StatsRepository @Inject constructor(
range: StatsTimeRange,
granularity: StatsGranularity,
forced: Boolean,
revenueRangeId: String = ""
revenueRangeId: String,
): Result<WCRevenueStatsModel?> = fetchRevenueStats(
range = range,
granularity = granularity,
Expand All @@ -76,7 +77,7 @@ class StatsRepository @Inject constructor(
range: StatsTimeRange,
granularity: StatsGranularity,
forced: Boolean,
revenueRangeId: String = "",
revenueRangeId: String,
site: SiteModel
): Result<WCRevenueStatsModel?> {
val result = wcStatsStore.fetchRevenueStats(
Expand Down Expand Up @@ -308,13 +309,15 @@ class StatsRepository @Inject constructor(
* Even if the includeVisitorStats flag is set to true, errors fetching visitor
* will be handled as null and only errors fetching the revenue stats will be processed.
*/
@Suppress("LongParameterList")
suspend fun fetchStats(
range: StatsTimeRange,
revenueStatsGranularity: StatsGranularity,
visitorStatsGranularity: StatsGranularity,
forced: Boolean,
includeVisitorStats: Boolean,
site: SiteModel = selectedSite.get()
site: SiteModel = selectedSite.get(),
medium: String,
): Result<SiteStats> = coroutineScope {
val fetchVisitorStats = if (includeVisitorStats) {
async {
Expand All @@ -334,6 +337,7 @@ class StatsRepository @Inject constructor(
range = range,
granularity = revenueStatsGranularity,
forced = forced,
revenueRangeId = range.toRevenueRangeId(medium),
site = site
)
}
Expand Down Expand Up @@ -408,12 +412,3 @@ class StatsRepository @Inject constructor(
}
}
}

fun String.asRevenueRangeId(
startDate: Date,
endDate: Date
): String {
val startDateString = startDate.formatToYYYYmmDD()
val endDateString = endDate.formatToYYYYmmDD()
return "$this$startDateString$endDateString"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import com.woocommerce.android.extensions.formatToMMMMyyyy
import com.woocommerce.android.extensions.formatToYYYY
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.dashboard.data.asRevenueRangeId
import com.woocommerce.android.util.DateUtils
import com.woocommerce.commons.stats.StatsUtils.asRevenueRangeId
import javax.inject.Inject

class DashboardDateRangeFormatter @Inject constructor(private val dateUtils: DateUtils) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import androidx.lifecycle.lifecycleScope
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
import com.woocommerce.android.model.DashboardWidget
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.compose.rememberNavController
import com.woocommerce.android.ui.dashboard.DashboardDateRangeHeader
Expand All @@ -38,6 +37,7 @@ import com.woocommerce.android.ui.dashboard.defaultHideMenuEntry
import com.woocommerce.android.util.CurrencyFormatter
import com.woocommerce.android.util.DateUtils
import com.woocommerce.android.viewmodel.MultiLiveEvent
import com.woocommerce.commons.stats.StatsTimeRange
import java.util.Date

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import com.woocommerce.android.model.DashboardWidget
import com.woocommerce.android.tools.NetworkStatus
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.analytics.hub.sync.AnalyticsUpdateDataStore
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRange
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection
import com.woocommerce.android.ui.analytics.ranges.StatsTimeRangeSelection.SelectionType
import com.woocommerce.android.ui.dashboard.DashboardStatsUsageTracksEventEmitter
Expand All @@ -32,6 +31,7 @@ import com.woocommerce.android.util.DateUtils
import com.woocommerce.android.util.TimezoneProvider
import com.woocommerce.android.viewmodel.MultiLiveEvent
import com.woocommerce.android.viewmodel.ScopedViewModel
import com.woocommerce.commons.stats.StatsTimeRange
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
Expand Down
Loading