Dodaj potwierdzanie odczytów tachografu
This commit is contained in:
@@ -12,6 +12,7 @@ import okhttp3.RequestBody.Companion.toRequestBody
|
|||||||
import pl.firmatpp.kierowca.data.api.ApiFactory
|
import pl.firmatpp.kierowca.data.api.ApiFactory
|
||||||
import pl.firmatpp.kierowca.data.api.MobileDriverApi
|
import pl.firmatpp.kierowca.data.api.MobileDriverApi
|
||||||
import pl.firmatpp.kierowca.data.model.BootstrapResponse
|
import pl.firmatpp.kierowca.data.model.BootstrapResponse
|
||||||
|
import pl.firmatpp.kierowca.data.model.AcknowledgeTachographReminderBody
|
||||||
import pl.firmatpp.kierowca.data.model.BroadcastAuthBody
|
import pl.firmatpp.kierowca.data.model.BroadcastAuthBody
|
||||||
import pl.firmatpp.kierowca.data.model.BroadcastAuthResponse
|
import pl.firmatpp.kierowca.data.model.BroadcastAuthResponse
|
||||||
import pl.firmatpp.kierowca.data.model.CancelLeaveRequestBody
|
import pl.firmatpp.kierowca.data.model.CancelLeaveRequestBody
|
||||||
@@ -33,6 +34,7 @@ import pl.firmatpp.kierowca.data.model.RoutePointsResponse
|
|||||||
import pl.firmatpp.kierowca.data.model.RouteResponse
|
import pl.firmatpp.kierowca.data.model.RouteResponse
|
||||||
import pl.firmatpp.kierowca.data.model.StartRouteBody
|
import pl.firmatpp.kierowca.data.model.StartRouteBody
|
||||||
import pl.firmatpp.kierowca.data.model.SyncStateResponse
|
import pl.firmatpp.kierowca.data.model.SyncStateResponse
|
||||||
|
import pl.firmatpp.kierowca.data.model.TachographReminderDto
|
||||||
import pl.firmatpp.kierowca.data.model.VerifyOtpBody
|
import pl.firmatpp.kierowca.data.model.VerifyOtpBody
|
||||||
import pl.firmatpp.kierowca.data.upload.DispatchSheetUploadEntity
|
import pl.firmatpp.kierowca.data.upload.DispatchSheetUploadEntity
|
||||||
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
||||||
@@ -56,6 +58,12 @@ class DriverRepository(
|
|||||||
suspend fun bootstrap(date: String? = null): BootstrapResponse =
|
suspend fun bootstrap(date: String? = null): BootstrapResponse =
|
||||||
api.bootstrap(authHeader(requireToken()), date)
|
api.bootstrap(authHeader(requireToken()), date)
|
||||||
|
|
||||||
|
suspend fun acknowledgeTachographReminder(taskIds: List<String>): TachographReminderDto =
|
||||||
|
api.acknowledgeTachographReminder(
|
||||||
|
authHeader(requireToken()),
|
||||||
|
AcknowledgeTachographReminderBody(taskIds),
|
||||||
|
).tachographReminder
|
||||||
|
|
||||||
suspend fun route(routeId: String): RouteResponse =
|
suspend fun route(routeId: String): RouteResponse =
|
||||||
api.route(authHeader(requireToken()), routeId)
|
api.route(authHeader(requireToken()), routeId)
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package pl.firmatpp.kierowca.data.api
|
|||||||
import okhttp3.MultipartBody
|
import okhttp3.MultipartBody
|
||||||
import okhttp3.RequestBody
|
import okhttp3.RequestBody
|
||||||
import pl.firmatpp.kierowca.data.model.BootstrapResponse
|
import pl.firmatpp.kierowca.data.model.BootstrapResponse
|
||||||
|
import pl.firmatpp.kierowca.data.model.AcknowledgeTachographReminderBody
|
||||||
|
import pl.firmatpp.kierowca.data.model.AcknowledgeTachographReminderResponse
|
||||||
import pl.firmatpp.kierowca.data.model.BroadcastAuthBody
|
import pl.firmatpp.kierowca.data.model.BroadcastAuthBody
|
||||||
import pl.firmatpp.kierowca.data.model.BroadcastAuthResponse
|
import pl.firmatpp.kierowca.data.model.BroadcastAuthResponse
|
||||||
import pl.firmatpp.kierowca.data.model.CancelLeaveRequestBody
|
import pl.firmatpp.kierowca.data.model.CancelLeaveRequestBody
|
||||||
@@ -67,6 +69,12 @@ interface MobileDriverApi {
|
|||||||
@Query("date") date: String?,
|
@Query("date") date: String?,
|
||||||
): BootstrapResponse
|
): BootstrapResponse
|
||||||
|
|
||||||
|
@POST("mobile/driver/tachograph-reminder/acknowledge")
|
||||||
|
suspend fun acknowledgeTachographReminder(
|
||||||
|
@Header("Authorization") authorization: String,
|
||||||
|
@Body body: AcknowledgeTachographReminderBody,
|
||||||
|
): AcknowledgeTachographReminderResponse
|
||||||
|
|
||||||
@GET("mobile/driver/leave-request-types")
|
@GET("mobile/driver/leave-request-types")
|
||||||
suspend fun leaveRequestTypes(
|
suspend fun leaveRequestTypes(
|
||||||
@Header("Authorization") authorization: String,
|
@Header("Authorization") authorization: String,
|
||||||
|
|||||||
@@ -106,6 +106,23 @@ data class TachographReminderDto(
|
|||||||
val visible: Boolean = false,
|
val visible: Boolean = false,
|
||||||
val title: String? = null,
|
val title: String? = null,
|
||||||
val message: String? = null,
|
val message: String? = null,
|
||||||
|
val confirmationLabel: String? = null,
|
||||||
|
val tasks: List<TachographReminderTaskDto>? = null,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class TachographReminderTaskDto(
|
||||||
|
val id: String,
|
||||||
|
val type: String,
|
||||||
|
val label: String,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class AcknowledgeTachographReminderBody(
|
||||||
|
val taskIds: List<String>,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class AcknowledgeTachographReminderResponse(
|
||||||
|
val ok: Boolean,
|
||||||
|
val tachographReminder: TachographReminderDto,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class DispatchSheetPhotoDto(
|
data class DispatchSheetPhotoDto(
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ import androidx.compose.material3.Button
|
|||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
import androidx.compose.material3.Card
|
import androidx.compose.material3.Card
|
||||||
import androidx.compose.material3.CardDefaults
|
import androidx.compose.material3.CardDefaults
|
||||||
|
import androidx.compose.material3.Checkbox
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.DatePicker
|
import androidx.compose.material3.DatePicker
|
||||||
import androidx.compose.material3.DatePickerDialog
|
import androidx.compose.material3.DatePickerDialog
|
||||||
@@ -409,6 +410,7 @@ fun DriverApp(
|
|||||||
state = state,
|
state = state,
|
||||||
onRefresh = viewModel::refreshRoutesSilently,
|
onRefresh = viewModel::refreshRoutesSilently,
|
||||||
onDate = viewModel::selectRouteDate,
|
onDate = viewModel::selectRouteDate,
|
||||||
|
onTachographReminderComplete = viewModel::acknowledgeTachographReminder,
|
||||||
onProfile = viewModel::openProfile,
|
onProfile = viewModel::openProfile,
|
||||||
onPhotoQueue = viewModel::openPhotoQueue,
|
onPhotoQueue = viewModel::openPhotoQueue,
|
||||||
onDispatchSheetUpload = viewModel::uploadDispatchSheetPhoto,
|
onDispatchSheetUpload = viewModel::uploadDispatchSheetPhoto,
|
||||||
@@ -1156,6 +1158,7 @@ private fun RoutesScreen(
|
|||||||
state: DriverUiState,
|
state: DriverUiState,
|
||||||
onRefresh: () -> Unit,
|
onRefresh: () -> Unit,
|
||||||
onDate: (String) -> Unit,
|
onDate: (String) -> Unit,
|
||||||
|
onTachographReminderComplete: (List<String>) -> Unit,
|
||||||
onProfile: () -> Unit,
|
onProfile: () -> Unit,
|
||||||
onPhotoQueue: () -> Unit,
|
onPhotoQueue: () -> Unit,
|
||||||
onDispatchSheetUpload: (Uri, String, PhotoUploadMetadata) -> Unit,
|
onDispatchSheetUpload: (Uri, String, PhotoUploadMetadata) -> Unit,
|
||||||
@@ -1167,6 +1170,7 @@ private fun RoutesScreen(
|
|||||||
var cameraUri by remember { mutableStateOf<Uri?>(null) }
|
var cameraUri by remember { mutableStateOf<Uri?>(null) }
|
||||||
var showPreciseLocationPermissionDialog by remember { mutableStateOf(false) }
|
var showPreciseLocationPermissionDialog by remember { mutableStateOf(false) }
|
||||||
var showRouteDatePicker by remember { mutableStateOf(false) }
|
var showRouteDatePicker by remember { mutableStateOf(false) }
|
||||||
|
var showTachographConfirmation by remember { mutableStateOf(false) }
|
||||||
val cameraLauncher = rememberLauncherForActivityResult(ActivityResultContracts.TakePicture()) { ok ->
|
val cameraLauncher = rememberLauncherForActivityResult(ActivityResultContracts.TakePicture()) { ok ->
|
||||||
val capturedUri = cameraUri
|
val capturedUri = cameraUri
|
||||||
if (
|
if (
|
||||||
@@ -1281,7 +1285,11 @@ private fun RoutesScreen(
|
|||||||
}
|
}
|
||||||
if (shouldShowTachographReminderCard(state.tachographReminder)) {
|
if (shouldShowTachographReminderCard(state.tachographReminder)) {
|
||||||
item {
|
item {
|
||||||
TachographReminderCard(state.tachographReminder)
|
TachographReminderCard(
|
||||||
|
reminder = state.tachographReminder,
|
||||||
|
submitting = state.tachographReminderSubmitting,
|
||||||
|
onConfirm = { showTachographConfirmation = true },
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (shouldShowDispatchSheetReminderCard(state.dispatchSheetReminder)) {
|
if (shouldShowDispatchSheetReminderCard(state.dispatchSheetReminder)) {
|
||||||
@@ -1365,6 +1373,18 @@ private fun RoutesScreen(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showTachographConfirmation) {
|
||||||
|
TachographReminderConfirmationDialog(
|
||||||
|
reminder = state.tachographReminder,
|
||||||
|
submitting = state.tachographReminderSubmitting,
|
||||||
|
onDismiss = { showTachographConfirmation = false },
|
||||||
|
onConfirm = { taskIds ->
|
||||||
|
showTachographConfirmation = false
|
||||||
|
onTachographReminderComplete(taskIds)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -2259,7 +2279,11 @@ private fun DispatchSheetReminderCard(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun TachographReminderCard(reminder: TachographReminderDto?) {
|
private fun TachographReminderCard(
|
||||||
|
reminder: TachographReminderDto?,
|
||||||
|
submitting: Boolean,
|
||||||
|
onConfirm: () -> Unit,
|
||||||
|
) {
|
||||||
if (!shouldShowTachographReminderCard(reminder)) return
|
if (!shouldShowTachographReminderCard(reminder)) return
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
@@ -2300,9 +2324,125 @@ private fun TachographReminderCard(reminder: TachographReminderDto?) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Button(
|
||||||
|
onClick = onConfirm,
|
||||||
|
enabled = !submitting,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(start = 18.dp, end = 18.dp, bottom = 18.dp)
|
||||||
|
.height(52.dp),
|
||||||
|
colors = ButtonDefaults.buttonColors(containerColor = TppTheme.colors.forest),
|
||||||
|
shape = MaterialTheme.shapes.medium,
|
||||||
|
) {
|
||||||
|
if (submitting) {
|
||||||
|
CircularProgressIndicator(
|
||||||
|
modifier = Modifier.size(20.dp),
|
||||||
|
color = Color.White,
|
||||||
|
strokeWidth = 2.dp,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Icon(
|
||||||
|
Icons.Outlined.CheckCircle,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = Color.White,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Spacer(Modifier.width(10.dp))
|
||||||
|
Text(
|
||||||
|
reminder?.confirmationLabel?.takeIf { it.isNotBlank() } ?: "Wykonano",
|
||||||
|
color = Color.White,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun TachographReminderConfirmationDialog(
|
||||||
|
reminder: TachographReminderDto?,
|
||||||
|
submitting: Boolean,
|
||||||
|
onDismiss: () -> Unit,
|
||||||
|
onConfirm: (List<String>) -> Unit,
|
||||||
|
) {
|
||||||
|
val tasks = reminder?.tasks.orEmpty()
|
||||||
|
val taskIds = tasks.map { it.id }
|
||||||
|
var selectedIds by remember(taskIds) {
|
||||||
|
mutableStateOf(defaultTachographConfirmationSelection(tasks))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tasks.isEmpty()) {
|
||||||
|
LaunchedEffect(Unit) { onDismiss() }
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { if (!submitting) onDismiss() },
|
||||||
|
title = {
|
||||||
|
Text(
|
||||||
|
"Potwierdź wykonanie",
|
||||||
|
color = TppTheme.colors.ink,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
text = {
|
||||||
|
Column(verticalArrangement = Arrangement.spacedBy(10.dp)) {
|
||||||
|
Text(
|
||||||
|
if (tasks.size == 1) {
|
||||||
|
"Potwierdź wykonanie poniższej czynności."
|
||||||
|
} else {
|
||||||
|
"Zaznacz, które czynności zostały wykonane."
|
||||||
|
},
|
||||||
|
color = TppTheme.colors.muted,
|
||||||
|
)
|
||||||
|
tasks.forEach { task ->
|
||||||
|
val checked = task.id in selectedIds
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(TppTheme.colors.panel, RoundedCornerShape(10.dp))
|
||||||
|
.clickable(enabled = !submitting) {
|
||||||
|
selectedIds = if (checked) selectedIds - task.id else selectedIds + task.id
|
||||||
|
}
|
||||||
|
.padding(horizontal = 10.dp, vertical = 6.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
) {
|
||||||
|
Checkbox(
|
||||||
|
checked = checked,
|
||||||
|
onCheckedChange = { isChecked ->
|
||||||
|
selectedIds = if (isChecked) selectedIds + task.id else selectedIds - task.id
|
||||||
|
},
|
||||||
|
enabled = !submitting,
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
task.label,
|
||||||
|
modifier = Modifier.weight(1f),
|
||||||
|
color = TppTheme.colors.ink,
|
||||||
|
fontWeight = FontWeight.SemiBold,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(
|
||||||
|
onClick = { onConfirm(taskIds.filter { it in selectedIds }) },
|
||||||
|
enabled = selectedIds.isNotEmpty() && !submitting,
|
||||||
|
) {
|
||||||
|
Text("Potwierdź")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dismissButton = {
|
||||||
|
TextButton(
|
||||||
|
onClick = onDismiss,
|
||||||
|
enabled = !submitting,
|
||||||
|
) {
|
||||||
|
Text("Anuluj")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun OperationalQueueBanner(state: DriverUiState, onPhotoQueue: () -> Unit) {
|
private fun OperationalQueueBanner(state: DriverUiState, onPhotoQueue: () -> Unit) {
|
||||||
val count = state.pendingOperationalItems
|
val count = state.pendingOperationalItems
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import pl.firmatpp.kierowca.data.model.DriverRouteDto
|
|||||||
import pl.firmatpp.kierowca.data.model.DispatchSheetReminderDto
|
import pl.firmatpp.kierowca.data.model.DispatchSheetReminderDto
|
||||||
import pl.firmatpp.kierowca.data.model.RoutePhotoDto
|
import pl.firmatpp.kierowca.data.model.RoutePhotoDto
|
||||||
import pl.firmatpp.kierowca.data.model.TachographReminderDto
|
import pl.firmatpp.kierowca.data.model.TachographReminderDto
|
||||||
|
import pl.firmatpp.kierowca.data.model.TachographReminderTaskDto
|
||||||
import pl.firmatpp.kierowca.data.model.driverLifecycleStatus
|
import pl.firmatpp.kierowca.data.model.driverLifecycleStatus
|
||||||
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
||||||
import pl.firmatpp.kierowca.data.upload.PhotoUploadStatus
|
import pl.firmatpp.kierowca.data.upload.PhotoUploadStatus
|
||||||
@@ -676,7 +677,11 @@ fun shouldShowTachographReminderCard(reminder: TachographReminderDto?): Boolean
|
|||||||
reminder?.enabled == true &&
|
reminder?.enabled == true &&
|
||||||
reminder.visible &&
|
reminder.visible &&
|
||||||
!reminder.title.isNullOrBlank() &&
|
!reminder.title.isNullOrBlank() &&
|
||||||
!reminder.message.isNullOrBlank()
|
!reminder.message.isNullOrBlank() &&
|
||||||
|
!reminder.tasks.isNullOrEmpty()
|
||||||
|
|
||||||
|
fun defaultTachographConfirmationSelection(tasks: List<TachographReminderTaskDto>): Set<String> =
|
||||||
|
if (tasks.size == 1) setOf(tasks.single().id) else emptySet()
|
||||||
|
|
||||||
fun dispatchSheetPrimaryActionLabel(reminder: DispatchSheetReminderDto?, hasQueuedUpload: Boolean): String =
|
fun dispatchSheetPrimaryActionLabel(reminder: DispatchSheetReminderDto?, hasQueuedUpload: Boolean): String =
|
||||||
when {
|
when {
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ data class DriverUiState(
|
|||||||
val queuedPhotoUploads: List<PhotoUploadEntity> = emptyList(),
|
val queuedPhotoUploads: List<PhotoUploadEntity> = emptyList(),
|
||||||
val dispatchSheetReminder: DispatchSheetReminderDto? = null,
|
val dispatchSheetReminder: DispatchSheetReminderDto? = null,
|
||||||
val tachographReminder: TachographReminderDto? = null,
|
val tachographReminder: TachographReminderDto? = null,
|
||||||
|
val tachographReminderSubmitting: Boolean = false,
|
||||||
val appUpdate: AppUpdateDto? = null,
|
val appUpdate: AppUpdateDto? = null,
|
||||||
val dispatchSheetUploads: List<DispatchSheetUploadEntity> = emptyList(),
|
val dispatchSheetUploads: List<DispatchSheetUploadEntity> = emptyList(),
|
||||||
val leaveRequestsConfig: LeaveRequestsConfig? = null,
|
val leaveRequestsConfig: LeaveRequestsConfig? = null,
|
||||||
@@ -472,6 +473,39 @@ class DriverViewModel(application: Application) : AndroidViewModel(application)
|
|||||||
loadRoutes(date = date, showLoading = true, navigateToRoutes = true)
|
loadRoutes(date = date, showLoading = true, navigateToRoutes = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun acknowledgeTachographReminder(taskIds: List<String>) {
|
||||||
|
val snapshot = _state.value
|
||||||
|
if (taskIds.isEmpty() || snapshot.tachographReminderSubmitting) return
|
||||||
|
if (!snapshot.isOnline) {
|
||||||
|
_state.update { it.copy(error = "Potwierdzenie odczytu wymaga połączenia z internetem.") }
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModelScope.launch {
|
||||||
|
_state.update {
|
||||||
|
it.copy(
|
||||||
|
tachographReminderSubmitting = true,
|
||||||
|
error = null,
|
||||||
|
feedback = null,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
runCatching { repository.acknowledgeTachographReminder(taskIds) }
|
||||||
|
.onSuccess { reminder ->
|
||||||
|
_state.update {
|
||||||
|
it.copy(
|
||||||
|
tachographReminder = reminder,
|
||||||
|
feedback = "Zapisano potwierdzenie odczytu.",
|
||||||
|
error = null,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.onFailure { throwable ->
|
||||||
|
_state.update { it.withApiError(throwable) }
|
||||||
|
}
|
||||||
|
_state.update { it.copy(tachographReminderSubmitting = false) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun dismissRouteDayLiveUpdate() {
|
fun dismissRouteDayLiveUpdate() {
|
||||||
_state.update { it.copy(routeDayLiveUpdateMessage = null) }
|
_state.update { it.copy(routeDayLiveUpdateMessage = null) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import pl.firmatpp.kierowca.data.model.DriverRouteDto
|
|||||||
import pl.firmatpp.kierowca.data.model.DispatchSheetReminderDto
|
import pl.firmatpp.kierowca.data.model.DispatchSheetReminderDto
|
||||||
import pl.firmatpp.kierowca.data.model.RoutePhotoDto
|
import pl.firmatpp.kierowca.data.model.RoutePhotoDto
|
||||||
import pl.firmatpp.kierowca.data.model.TachographReminderDto
|
import pl.firmatpp.kierowca.data.model.TachographReminderDto
|
||||||
|
import pl.firmatpp.kierowca.data.model.TachographReminderTaskDto
|
||||||
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
import pl.firmatpp.kierowca.data.upload.PhotoUploadEntity
|
||||||
import pl.firmatpp.kierowca.data.upload.RouteActionEntity
|
import pl.firmatpp.kierowca.data.upload.RouteActionEntity
|
||||||
import pl.firmatpp.kierowca.data.upload.RouteActionStatus
|
import pl.firmatpp.kierowca.data.upload.RouteActionStatus
|
||||||
@@ -420,6 +421,7 @@ class DriverUiRulesTest {
|
|||||||
visible = true,
|
visible = true,
|
||||||
title = "Odczyt tachografu",
|
title = "Odczyt tachografu",
|
||||||
message = "Pamiętaj o odczycie.",
|
message = "Pamiętaj o odczycie.",
|
||||||
|
tasks = listOf(tachographTask()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -430,6 +432,7 @@ class DriverUiRulesTest {
|
|||||||
visible = true,
|
visible = true,
|
||||||
title = "Odczyt tachografu",
|
title = "Odczyt tachografu",
|
||||||
message = "Pamiętaj o odczycie.",
|
message = "Pamiętaj o odczycie.",
|
||||||
|
tasks = listOf(tachographTask()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -440,12 +443,26 @@ class DriverUiRulesTest {
|
|||||||
visible = false,
|
visible = false,
|
||||||
title = "Odczyt tachografu",
|
title = "Odczyt tachografu",
|
||||||
message = "Pamiętaj o odczycie.",
|
message = "Pamiętaj o odczycie.",
|
||||||
|
tasks = listOf(tachographTask()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
assertFalse(shouldShowTachographReminderCard(null))
|
assertFalse(shouldShowTachographReminderCard(null))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun preselectsOnlySingleTachographConfirmationTask() {
|
||||||
|
val driverCard = tachographTask()
|
||||||
|
val vehicle = TachographReminderTaskDto(
|
||||||
|
id = "vehicle:12:2026-07-31",
|
||||||
|
type = "vehicle_tachograph",
|
||||||
|
label = "Tachograf pojazdu",
|
||||||
|
)
|
||||||
|
|
||||||
|
assertEquals(setOf(driverCard.id), defaultTachographConfirmationSelection(listOf(driverCard)))
|
||||||
|
assertEquals(emptySet<String>(), defaultTachographConfirmationSelection(listOf(driverCard, vehicle)))
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun explainsOfflineStateWithoutCachedSync() {
|
fun explainsOfflineStateWithoutCachedSync() {
|
||||||
assertEquals(
|
assertEquals(
|
||||||
@@ -853,4 +870,11 @@ class DriverUiRulesTest {
|
|||||||
photo = null,
|
photo = null,
|
||||||
canUpload = dueToday,
|
canUpload = dueToday,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun tachographTask(): TachographReminderTaskDto =
|
||||||
|
TachographReminderTaskDto(
|
||||||
|
id = "driver-card:1:2026-07-31",
|
||||||
|
type = "driver_card",
|
||||||
|
label = "Karta kierowcy",
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user