From 7c3e13114fd189c49e86b8d6c200ffb3c27bb498 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Fri, 14 Jan 2022 18:25:26 -0600 Subject: Refactored reports code into ReportController.kt and added extra report periods --- .../mx/trackermap/TrackerMap/utils/Formatter.kt | 8 ++- .../mx/trackermap/TrackerMap/utils/ReportDates.kt | 79 ++++++++++++++++++++++ 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt (limited to 'shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils') diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/Formatter.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/Formatter.kt index af4e14d..878418e 100644 --- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/Formatter.kt +++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/Formatter.kt @@ -5,9 +5,11 @@ import kotlin.math.round class Formatter { companion object { - fun formatDate(date: String): String { - return date.substring(0 until date.indexOf('+')) - .toLocalDateTime().toString().replace('T', ' ') + fun formatDate(str: String): String { + val timezone = TimeZone.currentSystemDefault() + val date = str.toInstant().toLocalDateTime(timezone).toString() + return date + .replace('T', ' ').trim('Z') } fun formatSpeed(speed: Double, unit: SpeedUnit): String { diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt new file mode 100644 index 0000000..360cce8 --- /dev/null +++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/ReportDates.kt @@ -0,0 +1,79 @@ +package mx.trackermap.TrackerMap.utils + +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.datetime.* + +@DelicateCoroutinesApi +class ReportDates { + enum class ReportPeriod { + TODAY, LAST_24, YESTERDAY, THIS_WEEK, LAST_7, THIS_MONTH, LAST_30 + } + + companion object { + private fun formatDateTime(dateTime: LocalDateTime, timezone: TimeZone) = + dateTime.toInstant(timezone).toString() + + fun getDates(period: ReportPeriod): Pair { + val timezone = TimeZone.currentSystemDefault() + val clock = Clock.System + val instant = clock.now() + val dateTime = instant.toLocalDateTime(timezone) + val date = dateTime.date + + var currentDate: LocalDateTime? = null + var previousDate: LocalDateTime? = null + when (period) { + ReportPeriod.TODAY -> { + previousDate = date.atTime(0, 0) + currentDate = dateTime + } + ReportPeriod.LAST_24 -> { + previousDate = instant + .minus(1, DateTimeUnit.DAY, timezone) + .toLocalDateTime(timezone) + currentDate = dateTime + } + ReportPeriod.YESTERDAY -> { + val yesterday = instant + .minus(1, DateTimeUnit.DAY, timezone) + .toLocalDateTime(timezone).date + previousDate = yesterday.atTime(0, 0) + currentDate = yesterday.atTime(23, 59) + } + ReportPeriod.THIS_WEEK -> { + previousDate = instant + .minus(date.dayOfWeek.isoDayNumber - 1, DateTimeUnit.DAY, timezone) + .toLocalDateTime(timezone).date + .atTime(0, 0) + currentDate = dateTime + } + ReportPeriod.LAST_7 -> { + previousDate = instant + .minus(1, DateTimeUnit.WEEK, timezone) + .toLocalDateTime(timezone).date + .atTime(0, 0) + currentDate = dateTime + } + ReportPeriod.THIS_MONTH -> { + previousDate = instant + .minus(date.dayOfMonth - 1, DateTimeUnit.DAY, timezone) + .toLocalDateTime(timezone).date + .atTime(0, 0) + currentDate = dateTime + } + ReportPeriod.LAST_30 -> { + previousDate = instant + .minus(1, DateTimeUnit.MONTH, timezone) + .toLocalDateTime(timezone).date + .atTime(0, 0) + currentDate = dateTime + } + } + + return Pair( + formatDateTime(currentDate, timezone), + formatDateTime(previousDate, timezone) + ) + } + } +} \ No newline at end of file -- cgit v1.2.3