diff --git a/android-app/app/src/main/java/com/korexlabs/dhinspeccion/MainViewModel.kt b/android-app/app/src/main/java/com/korexlabs/dhinspeccion/MainViewModel.kt index 5124554..96a0be7 100644 --- a/android-app/app/src/main/java/com/korexlabs/dhinspeccion/MainViewModel.kt +++ b/android-app/app/src/main/java/com/korexlabs/dhinspeccion/MainViewModel.kt @@ -151,11 +151,15 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } } - fun createActForSelectedInventory() { + fun createActForSelectedInventory(urgency: String = "NON_URGENT") { val currentVisit = visit ?: return val asset = selectedFieldAsset?.asset if (currentVisit.status != "IN_PROGRESS") { - error = "La inspección debe estar en curso para crear un Acta." + error = "La Inspección debe estar en curso para crear un Acta." + return + } + if (urgency !in setOf("URGENT", "NON_URGENT")) { + error = "Elegí si el Acta es urgente o no urgente." return } if (asset == null) { @@ -163,15 +167,21 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { return } if (acts.any { it.status == "DRAFT" }) { - error = "Ya existe un Acta en borrador. Cerrala o cancelala antes de crear la siguiente." + error = "Ya existe un Acta en borrador. Bloqueala o cancelala antes de crear la siguiente." return } launchBusy { - val created = actsRepository.create(currentVisit.id, asset.id, currentVisit.code) + val created = actsRepository.create( + currentVisit.id, + asset.id, + currentVisit.code, + urgency, + ) selectedAct = created actClosure = actsRepository.closure(created.id) loadActsInternal(currentVisit.id, selectDraft = false) - notice = "${created.code} creada. Los Hallazgos nuevos quedarán vinculados explícitamente a esta Acta." + val urgencyLabel = if (urgency == "URGENT") "urgente" else "no urgente" + notice = "${created.code} creada como $urgencyLabel. Los Hallazgos nuevos quedarán vinculados explícitamente a esta Acta." if (selectedFieldAsset?.capture?.readyForFinding == true) { loadFindingOptionsInternal(currentVisit.id, asset.id, created.id) } @@ -196,7 +206,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val visitId = visit?.id ?: return launchBusy { 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 val draft = selectedDraftAct() if (selectedFieldAsset?.capture?.readyForFinding == true && draft != null) { @@ -222,7 +232,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { ) { val visitId = visit?.id ?: return if (visit?.status != "IN_PROGRESS") { - error = "La inspección debe estar en curso para dar de alta Inventario." + error = "La Inspección debe estar en curso para dar de alta Inventario." return } if (type.familyRequired && familyId == null) { @@ -449,26 +459,21 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { absenceReason = reason.trim(), ), ) - notice = "Ausencia del responsable registrada." + notice = "Ausencia del responsable registrada. La manifestación de empresa quedará pendiente y deberá resolverse antes de sellar el Acta." } } fun prepareSelectedAct() { val actId = selectedAct?.id ?: return launchBusy { - actClosure = actsRepository.prepare(actId) + actClosure = actsRepository.lock(actId) refreshSelectedActInternal(actId) - notice = "Acta preparada. Su contenido quedó congelado para las firmas." + notice = "Acta bloqueada. Su contenido quedó inmutable; ahora deben resolverse las firmas y manifestaciones." } } fun reopenSelectedAct() { - val actId = selectedAct?.id ?: return - launchBusy { - actClosure = actsRepository.reopen(actId) - refreshSelectedActInternal(actId) - notice = "Acta reabierta. Podés corregirla antes de volver a preparar." - } + error = "Un Acta bloqueada es inmutable y no puede volver a borrador." } fun signSelectedActAsInspector( @@ -507,13 +512,17 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { fun recordCompanyOutcome(status: String, reason: String) { val actId = selectedAct?.id ?: return + if (status != "REFUSED") { + error = "La ausencia no resuelve la manifestación de la empresa. Registrá una firma o una negativa." + return + } if (reason.trim().length < 10) { error = "Indicá un motivo de al menos 10 caracteres." return } launchBusy { actClosure = actsRepository.companyOutcome(actId, status, reason) - notice = if (status == "ABSENT") "Ausencia de empresa asentada." else "Negativa a firmar asentada." + notice = "Negativa a firmar asentada." } } @@ -521,11 +530,11 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val currentVisit = visit ?: return val actId = selectedAct?.id ?: return launchBusy { - actClosure = actsRepository.closeAct(actId) + actClosure = actsRepository.seal(actId) refreshSelectedActInternal(actId) loadActsInternal(currentVisit.id, selectDraft = false) clearFindingState() - notice = "${selectedAct?.code ?: "Acta"} cerrada e inmutable. Podés crear otra Acta o finalizar la inspección." + notice = "${selectedAct?.code ?: "Acta"} SELLADA e inmutable. Podés crear otra Acta o continuar hacia el cierre de la Inspección." } } @@ -534,7 +543,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { launchBusy { visit = actsRepository.closeVisit(visitId) loadVisitsInternal() - notice = "Inspección cerrada. Las Actas y documentos quedan disponibles para oficina." + notice = "Inspección cerrada. Todas sus Actas quedaron SELLADAS y disponibles para el circuito de oficina." } }