diff --git a/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt b/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt index fd616a0..fa3f4b9 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt @@ -245,6 +245,8 @@ data class DriverRouteDto( val id: String, val routeDate: String? = null, val unloadingDate: String? = null, + val ordering: Int? = null, + val dayOrderings: Map? = emptyMap(), val startsAt: String, val originName: String, val destinationName: String, diff --git a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverUiRules.kt b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverUiRules.kt index 5908c37..222454d 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverUiRules.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverUiRules.kt @@ -66,6 +66,9 @@ fun routeIsActiveToday( fun routeUnloadingDate(route: DriverRouteDto): String? = route.unloadingDate ?: route.routeDate +fun routeDayOrdering(route: DriverRouteDto, date: String): Int = + route.dayOrderings?.get(date) ?: route.ordering ?: Int.MAX_VALUE + fun routeScheduleDateLabel(date: String?): String = date ?.let { runCatching { LocalDate.parse(it).format(shortDateFormatter) }.getOrNull() } diff --git a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverViewModel.kt b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverViewModel.kt index 82e5931..7fd59f5 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverViewModel.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverViewModel.kt @@ -96,7 +96,10 @@ data class DriverUiState( val displayRoutes: List get() = projectDriverRoutes(routes, projectionActions) - .sortedBy { route -> if (route.status == "ZAKOŃCZONA") 1 else 0 } + .sortedWith( + compareBy { route -> if (route.status == "ZAKOŃCZONA") 1 else 0 } + .thenBy { route -> routeDayOrdering(route, selectedDate) }, + ) val selectedRouteProjection: ProjectedDriverRoute? get() = selectedRoute?.let { projectDriverRoute(it, projectionActions) } diff --git a/app/src/test/java/pl/firmatpp/kierowca/ui/DriverUiStateTest.kt b/app/src/test/java/pl/firmatpp/kierowca/ui/DriverUiStateTest.kt index 1f1db00..d61060a 100644 --- a/app/src/test/java/pl/firmatpp/kierowca/ui/DriverUiStateTest.kt +++ b/app/src/test/java/pl/firmatpp/kierowca/ui/DriverUiStateTest.kt @@ -83,6 +83,20 @@ class DriverUiStateTest { assertEquals(listOf("planned", "active", "completed"), state.displayRoutes.map { it.id }) } + @Test + fun displayRoutesUsesTheSelectedDayOrderingForMultiDayRoutes() { + val state = DriverUiState( + selectedDate = "2026-07-02", + routes = listOf( + route(id = "span", status = "ZAPLANOWANA", ordering = 0, dayOrderings = mapOf("2026-07-02" to 2)), + route(id = "above-first", status = "ZAPLANOWANA", ordering = 0, dayOrderings = mapOf("2026-07-02" to 0)), + route(id = "above-second", status = "ZAPLANOWANA", ordering = 1, dayOrderings = mapOf("2026-07-02" to 1)), + ), + ) + + assertEquals(listOf("above-first", "above-second", "span"), state.displayRoutes.map { it.id }) + } + private fun leaveRequest(id: String, status: String): DriverLeaveRequestDto = DriverLeaveRequestDto( id = id, @@ -92,10 +106,17 @@ class DriverUiStateTest { status = status, ) - private fun route(id: String = "1", status: String): DriverRouteDto = + private fun route( + id: String = "1", + status: String, + ordering: Int? = null, + dayOrderings: Map = emptyMap(), + ): DriverRouteDto = DriverRouteDto( id = id, routeDate = "2026-06-30", + ordering = ordering, + dayOrderings = dayOrderings, startsAt = "", originName = "Baza", destinationName = "Instalacja",