From 81f3b056533b1cabd17cdca58c0ac5015870312b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 7 Jul 2026 23:03:58 +0200 Subject: [PATCH] Keep confirmed route actions in driver status projection --- .../kierowca/data/upload/RouteActionDao.kt | 4 ++-- .../kierowca/ui/DriverRouteProjection.kt | 10 +++++++--- .../kierowca/ui/DriverRouteProjectionTest.kt | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/pl/firmatpp/kierowca/data/upload/RouteActionDao.kt b/app/src/main/java/pl/firmatpp/kierowca/data/upload/RouteActionDao.kt index 2955970..14d3c30 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/data/upload/RouteActionDao.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/data/upload/RouteActionDao.kt @@ -18,7 +18,7 @@ interface RouteActionDao { """ SELECT * FROM route_actions WHERE routeId = :routeId - AND status IN ('PENDING', 'WAITING_FOR_PHOTOS', 'SYNCING', 'FAILED_RETRYABLE', 'FAILED_CONFLICT', 'FAILED_PERMANENT') + AND status IN ('PENDING', 'WAITING_FOR_PHOTOS', 'SYNCING', 'CONFIRMED', 'FAILED_RETRYABLE', 'FAILED_CONFLICT', 'FAILED_PERMANENT') ORDER BY createdAtEpochMillis DESC """, ) @@ -27,7 +27,7 @@ interface RouteActionDao { @Query( """ SELECT * FROM route_actions - WHERE status IN ('PENDING', 'WAITING_FOR_PHOTOS', 'SYNCING', 'FAILED_RETRYABLE', 'FAILED_CONFLICT', 'FAILED_PERMANENT') + WHERE status IN ('PENDING', 'WAITING_FOR_PHOTOS', 'SYNCING', 'CONFIRMED', 'FAILED_RETRYABLE', 'FAILED_CONFLICT', 'FAILED_PERMANENT') ORDER BY createdAtEpochMillis DESC """, ) diff --git a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverRouteProjection.kt b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverRouteProjection.kt index 1539849..2063ce0 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/ui/DriverRouteProjection.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/ui/DriverRouteProjection.kt @@ -21,14 +21,18 @@ internal val routeActionVisibleStatuses = setOf( RouteActionStatus.FailedPermanent, ) +private val routeActionProjectionStatuses = routeActionVisibleStatuses + RouteActionStatus.Confirmed + fun projectDriverRoute(route: DriverRouteDto, actions: List): ProjectedDriverRoute { val visible = actions .filter { it.routeId == route.id && it.status in routeActionVisibleStatuses } + val projectable = actions + .filter { it.routeId == route.id && it.status in routeActionProjectionStatuses } var projectedRoute = route var loadingWeightPending = false var unloadingWeightPending = false - visible + projectable .sortedWith(compareBy { it.createdAtEpochMillis }.thenBy { it.clientActionId }) .forEach { action -> when (action.action) { @@ -38,7 +42,7 @@ fun projectDriverRoute(route: DriverRouteDto, actions: List): loadingWeight = action.weight, trackingStatus = "active", ) - loadingWeightPending = true + loadingWeightPending = action.status != RouteActionStatus.Confirmed } RouteActionType.Finish -> { projectedRoute = projectedRoute.copy( @@ -47,7 +51,7 @@ fun projectDriverRoute(route: DriverRouteDto, actions: List): trackingStatus = "finished", completedAt = action.occurredAt, ) - unloadingWeightPending = true + unloadingWeightPending = action.status != RouteActionStatus.Confirmed } } } diff --git a/app/src/test/java/pl/firmatpp/kierowca/ui/DriverRouteProjectionTest.kt b/app/src/test/java/pl/firmatpp/kierowca/ui/DriverRouteProjectionTest.kt index caffe12..f6ed1e7 100644 --- a/app/src/test/java/pl/firmatpp/kierowca/ui/DriverRouteProjectionTest.kt +++ b/app/src/test/java/pl/firmatpp/kierowca/ui/DriverRouteProjectionTest.kt @@ -57,6 +57,22 @@ class DriverRouteProjectionTest { assertEquals("finished", projection.route.trackingStatus) } + @Test + fun confirmedFinishStillProjectsPlannedRouteAsFinishedWithoutSyncCallout() { + val projection = projectDriverRoute( + route = route(status = "ZAPLANOWANA"), + actions = listOf( + action(RouteActionType.Finish, RouteActionStatus.Confirmed, weight = 11.8, createdAt = 2000), + ), + ) + + assertEquals("ZAKOŃCZONA", projection.route.status) + assertEquals(11.8, projection.route.unloadingWeight) + assertEquals("finished", projection.route.trackingStatus) + assertFalse(projection.unloadingWeightPending) + assertEquals(emptyList(), projection.visibleActions) + } + @Test fun conflictKeepsLocalRouteValuesAndMarksStageAsAttention() { val projection = projectDriverRoute(