feat(android): browse field inventory as strict hierarchy
This commit is contained in:
@@ -49,6 +49,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
|
|
||||||
var inventory: List<FieldInventoryItem> by mutableStateOf(emptyList())
|
var inventory: List<FieldInventoryItem> by mutableStateOf(emptyList())
|
||||||
private set
|
private set
|
||||||
|
var inventoryParentId: String? by mutableStateOf(null)
|
||||||
|
private set
|
||||||
var fieldTypes: List<FieldType> by mutableStateOf(emptyList())
|
var fieldTypes: List<FieldType> by mutableStateOf(emptyList())
|
||||||
private set
|
private set
|
||||||
var selectedFieldAsset: FieldAssetDetail? by mutableStateOf(null)
|
var selectedFieldAsset: FieldAssetDetail? by mutableStateOf(null)
|
||||||
@@ -96,6 +98,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
visits = emptyList()
|
visits = emptyList()
|
||||||
visit = null
|
visit = null
|
||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
|
inventoryParentId = null
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
clearActState()
|
clearActState()
|
||||||
@@ -112,6 +115,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
fun openVisit(id: String) = launchBusy {
|
fun openVisit(id: String) = launchBusy {
|
||||||
visit = repository.visit(id)
|
visit = repository.visit(id)
|
||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
|
inventoryParentId = visit?.operationalArea?.id
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
clearFindingState()
|
clearFindingState()
|
||||||
@@ -121,6 +125,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
fun closeVisitView() {
|
fun closeVisitView() {
|
||||||
visit = null
|
visit = null
|
||||||
inventory = emptyList()
|
inventory = emptyList()
|
||||||
|
inventoryParentId = null
|
||||||
fieldTypes = emptyList()
|
fieldTypes = emptyList()
|
||||||
selectedFieldAsset = null
|
selectedFieldAsset = null
|
||||||
clearActState()
|
clearActState()
|
||||||
@@ -132,6 +137,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
val id = visit?.id ?: return
|
val id = visit?.id ?: return
|
||||||
launchBusy {
|
launchBusy {
|
||||||
visit = repository.startVisit(id)
|
visit = repository.startVisit(id)
|
||||||
|
inventoryParentId = visit?.operationalArea?.id
|
||||||
notice = "Inspección iniciada."
|
notice = "Inspección iniciada."
|
||||||
loadActsInternal(id, selectDraft = true)
|
loadActsInternal(id, selectDraft = true)
|
||||||
loadVisitsInternal()
|
loadVisitsInternal()
|
||||||
@@ -189,25 +195,34 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun searchInventory(search: String, parentId: String? = null) {
|
fun searchInventory(search: String, parentId: String? = null) {
|
||||||
val id = visit?.id ?: return
|
val currentVisit = visit ?: return
|
||||||
launchBusy {
|
launchBusy {
|
||||||
inventory = repository.fieldInventory(id, search, parentId).data
|
val effectiveParentId = parentId ?: inventoryParentId ?: currentVisit.operationalArea?.id
|
||||||
|
inventory = repository.fieldInventory(currentVisit.id, search, effectiveParentId).data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadFieldTypes(parentId: String? = null) {
|
fun loadFieldTypes(parentId: String? = null) {
|
||||||
val id = visit?.id ?: return
|
val currentVisit = visit ?: return
|
||||||
launchBusy {
|
launchBusy {
|
||||||
fieldTypes = repository.fieldTypes(id, parentId).data
|
val effectiveParentId = parentId ?: currentVisit.operationalArea?.id
|
||||||
|
inventoryParentId = effectiveParentId
|
||||||
|
fieldTypes = repository.fieldTypes(currentVisit.id, parentId).data
|
||||||
|
inventory = repository.fieldInventory(currentVisit.id, null, effectiveParentId).data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun reloadCurrentInventory(visitId: String) {
|
||||||
|
val effectiveParentId = inventoryParentId ?: visit?.operationalArea?.id
|
||||||
|
inventory = repository.fieldInventory(visitId, null, effectiveParentId).data
|
||||||
|
}
|
||||||
|
|
||||||
fun selectExisting(item: FieldInventoryItem) {
|
fun selectExisting(item: FieldInventoryItem) {
|
||||||
val visitId = visit?.id ?: return
|
val visitId = visit?.id ?: return
|
||||||
launchBusy {
|
launchBusy {
|
||||||
selectedFieldAsset = repository.selectFieldAsset(visitId, item.id)
|
selectedFieldAsset = repository.selectFieldAsset(visitId, item.id)
|
||||||
notice = "Inventario agregado a la Inspección."
|
notice = "Inventario agregado a la Inspección."
|
||||||
inventory = repository.fieldInventory(visitId, null, null).data
|
reloadCurrentInventory(visitId)
|
||||||
val draft = selectedDraftAct()
|
val draft = selectedDraftAct()
|
||||||
if (selectedFieldAsset?.capture?.readyForFinding == true && draft != null) {
|
if (selectedFieldAsset?.capture?.readyForFinding == true && draft != null) {
|
||||||
selectedAct = actsRepository.ensureAsset(draft.id, item.id)
|
selectedAct = actsRepository.ensureAsset(draft.id, item.id)
|
||||||
@@ -236,7 +251,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (type.familyRequired && familyId == null) {
|
if (type.familyRequired && familyId == null) {
|
||||||
error = "Elegí una familia técnica o la opción Otro / no catalogado."
|
error = "Elegí una clasificación técnica o la opción Otro / no catalogado."
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
launchBusy {
|
launchBusy {
|
||||||
@@ -254,7 +269,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
)
|
)
|
||||||
selectedFieldAsset = repository.createFieldAsset(visitId, request)
|
selectedFieldAsset = repository.createFieldAsset(visitId, request)
|
||||||
notice = "Inventario creado con GPS. Falta la fotografía obligatoria. Si ya existía, podés fusionarlo antes de continuar."
|
notice = "Inventario creado con GPS. Falta la fotografía obligatoria. Si ya existía, podés fusionarlo antes de continuar."
|
||||||
inventory = repository.fieldInventory(visitId, null, null).data
|
reloadCurrentInventory(visitId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +293,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
)
|
)
|
||||||
selectedFieldAsset = repository.selectFieldAsset(visitId, result.canonical.id)
|
selectedFieldAsset = repository.selectFieldAsset(visitId, result.canonical.id)
|
||||||
notice = "Fusión registrada. Se conserva ${result.canonical.code} y la historia de ${result.source.code} permanece trazable."
|
notice = "Fusión registrada. Se conserva ${result.canonical.code} y la historia de ${result.source.code} permanece trazable."
|
||||||
inventory = repository.fieldInventory(visitId, null, null).data
|
reloadCurrentInventory(visitId)
|
||||||
val draft = selectedDraftAct()
|
val draft = selectedDraftAct()
|
||||||
if (selectedFieldAsset?.capture?.readyForFinding == true && draft != null) {
|
if (selectedFieldAsset?.capture?.readyForFinding == true && draft != null) {
|
||||||
selectedAct = actsRepository.ensureAsset(draft.id, result.canonical.id)
|
selectedAct = actsRepository.ensureAsset(draft.id, result.canonical.id)
|
||||||
@@ -311,7 +326,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
} else {
|
} else {
|
||||||
"Fotografía registrada."
|
"Fotografía registrada."
|
||||||
}
|
}
|
||||||
inventory = repository.fieldInventory(visitId, null, null).data
|
reloadCurrentInventory(visitId)
|
||||||
val draft = selectedDraftAct()
|
val draft = selectedDraftAct()
|
||||||
if (response.capture.readyForFinding && draft != null) {
|
if (response.capture.readyForFinding && draft != null) {
|
||||||
selectedAct = actsRepository.ensureAsset(draft.id, asset.id)
|
selectedAct = actsRepository.ensureAsset(draft.id, asset.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user