F2.4 Android: gestionar evidencias por Hallazgo
This commit is contained in:
@@ -10,6 +10,7 @@ import com.korexlabs.dhinspeccion.data.CreateFieldFindingRequest
|
|||||||
import com.korexlabs.dhinspeccion.data.CreateFieldInventoryRequest
|
import com.korexlabs.dhinspeccion.data.CreateFieldInventoryRequest
|
||||||
import com.korexlabs.dhinspeccion.data.DhRepository
|
import com.korexlabs.dhinspeccion.data.DhRepository
|
||||||
import com.korexlabs.dhinspeccion.data.FieldAssetDetail
|
import com.korexlabs.dhinspeccion.data.FieldAssetDetail
|
||||||
|
import com.korexlabs.dhinspeccion.data.FieldFindingEvidence
|
||||||
import com.korexlabs.dhinspeccion.data.FieldFindingItem
|
import com.korexlabs.dhinspeccion.data.FieldFindingItem
|
||||||
import com.korexlabs.dhinspeccion.data.FieldFindingOptionsResponse
|
import com.korexlabs.dhinspeccion.data.FieldFindingOptionsResponse
|
||||||
import com.korexlabs.dhinspeccion.data.FieldFindingsRepository
|
import com.korexlabs.dhinspeccion.data.FieldFindingsRepository
|
||||||
@@ -51,6 +52,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
private set
|
private set
|
||||||
var lastCreatedFinding: FieldFindingItem? by mutableStateOf(null)
|
var lastCreatedFinding: FieldFindingItem? by mutableStateOf(null)
|
||||||
private set
|
private set
|
||||||
|
var fieldFindingEvidence: Map<String, List<FieldFindingEvidence>> by mutableStateOf(emptyMap())
|
||||||
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (session != null) loadVisits()
|
if (session != null) loadVisits()
|
||||||
@@ -82,8 +85,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
fieldFindingOptions = null
|
clearFindingState()
|
||||||
lastCreatedFinding = null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,8 +100,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
fieldFindingOptions = null
|
clearFindingState()
|
||||||
lastCreatedFinding = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun closeVisitView() {
|
fun closeVisitView() {
|
||||||
@@ -107,8 +108,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
fieldFindingOptions = null
|
clearFindingState()
|
||||||
lastCreatedFinding = null
|
|
||||||
loadVisits()
|
loadVisits()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,26 +252,76 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
lastCreatedFinding = response.finding
|
lastCreatedFinding = response.finding
|
||||||
notice = "Hallazgo ${response.finding.code} registrado."
|
notice = "Hallazgo ${response.finding.code} registrado. Podés agregar evidencia fotográfica."
|
||||||
fieldFindingOptions = findingsRepository.options(visitId, assetId)
|
loadFindingOptionsInternal(visitId, assetId, keepLastCreated = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun uploadFindingPhoto(
|
||||||
|
findingId: String,
|
||||||
|
file: File,
|
||||||
|
latitude: Double,
|
||||||
|
longitude: Double,
|
||||||
|
accuracyM: Double?,
|
||||||
|
title: String? = null,
|
||||||
|
description: String? = null,
|
||||||
|
) {
|
||||||
|
launchBusy {
|
||||||
|
findingsRepository.uploadObservationPhoto(
|
||||||
|
findingId = findingId,
|
||||||
|
file = file,
|
||||||
|
latitude = latitude,
|
||||||
|
longitude = longitude,
|
||||||
|
accuracyM = accuracyM,
|
||||||
|
title = title,
|
||||||
|
description = description,
|
||||||
|
)
|
||||||
|
loadEvidenceInternal(findingId)
|
||||||
|
notice = "Evidencia fotográfica registrada con GPS."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun reloadFindingEvidence(findingId: String) {
|
||||||
|
launchBusy { loadEvidenceInternal(findingId) }
|
||||||
|
}
|
||||||
|
|
||||||
fun clearFindingFlow() {
|
fun clearFindingFlow() {
|
||||||
fieldFindingOptions = null
|
fieldFindingOptions = null
|
||||||
lastCreatedFinding = null
|
lastCreatedFinding = null
|
||||||
|
fieldFindingEvidence = emptyMap()
|
||||||
error = null
|
error = null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clearSelectedFieldAsset() {
|
fun clearSelectedFieldAsset() {
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
fieldFindingOptions = null
|
clearFindingState()
|
||||||
lastCreatedFinding = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun loadFindingOptionsInternal(visitId: String, assetId: String) {
|
private suspend fun loadFindingOptionsInternal(
|
||||||
fieldFindingOptions = findingsRepository.options(visitId, assetId)
|
visitId: String,
|
||||||
|
assetId: String,
|
||||||
|
keepLastCreated: Boolean = false,
|
||||||
|
) {
|
||||||
|
val options = findingsRepository.options(visitId, assetId)
|
||||||
|
fieldFindingOptions = options
|
||||||
|
if (!keepLastCreated) lastCreatedFinding = null
|
||||||
|
val loaded = linkedMapOf<String, List<FieldFindingEvidence>>()
|
||||||
|
for (finding in options.findings) {
|
||||||
|
loaded[finding.id] = findingsRepository.evidence(finding.id).data
|
||||||
|
}
|
||||||
|
fieldFindingEvidence = loaded
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun loadEvidenceInternal(findingId: String) {
|
||||||
|
fieldFindingEvidence = fieldFindingEvidence + (
|
||||||
|
findingId to findingsRepository.evidence(findingId).data
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun clearFindingState() {
|
||||||
|
fieldFindingOptions = null
|
||||||
lastCreatedFinding = null
|
lastCreatedFinding = null
|
||||||
|
fieldFindingEvidence = emptyMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun launchBusy(block: suspend () -> Unit) {
|
private fun launchBusy(block: suspend () -> Unit) {
|
||||||
|
|||||||
Reference in New Issue
Block a user