F3.2 Android: permitir Actas READY paralelas y delegar cierre al servidor
This commit is contained in:
@@ -148,14 +148,20 @@ fun MobileActsScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val hasOpenAct = model.acts.any { it.status == "DRAFT" || it.status == "READY" }
|
val hasDraftAct = model.acts.any { it.status == "DRAFT" }
|
||||||
if (visit.status == "IN_PROGRESS" && !hasOpenAct) {
|
if (visit.status == "IN_PROGRESS" && !hasDraftAct) {
|
||||||
Card(
|
Card(
|
||||||
Modifier.fillMaxWidth(),
|
Modifier.fillMaxWidth(),
|
||||||
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer),
|
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer),
|
||||||
) {
|
) {
|
||||||
Column(Modifier.padding(12.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
Column(Modifier.padding(12.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||||
Text("Nueva Acta", fontWeight = FontWeight.Bold)
|
Text("Nueva Acta", fontWeight = FontWeight.Bold)
|
||||||
|
if (model.acts.any { it.status == "READY" }) {
|
||||||
|
Text(
|
||||||
|
"Puede existir una nueva Acta en borrador aunque haya Actas preparadas pendientes de firma de empresa. Sólo se permite un borrador a la vez.",
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
)
|
||||||
|
}
|
||||||
val selectedInventory = model.selectedFieldAsset?.asset
|
val selectedInventory = model.selectedFieldAsset?.asset
|
||||||
if (selectedInventory == null) {
|
if (selectedInventory == null) {
|
||||||
Text("Primero elegí una Instalación o Subinstalación desde Inventario de campo. Ese registro será el primer elemento del Acta.")
|
Text("Primero elegí una Instalación o Subinstalación desde Inventario de campo. Ese registro será el primer elemento del Acta.")
|
||||||
@@ -361,17 +367,13 @@ fun MobileActsScreen(
|
|||||||
if (visit.status == "IN_PROGRESS" && model.acts.isNotEmpty()) {
|
if (visit.status == "IN_PROGRESS" && model.acts.isNotEmpty()) {
|
||||||
HorizontalDivider()
|
HorizontalDivider()
|
||||||
val drafts = model.acts.count { it.status == "DRAFT" }
|
val drafts = model.acts.count { it.status == "DRAFT" }
|
||||||
val readyMissingInspector = model.acts.any { summary ->
|
|
||||||
if (summary.status != "READY") false
|
|
||||||
else if (selected?.id == summary.id) {
|
|
||||||
model.actClosure?.signatures?.none { it.signerType == "INSPECTOR" && it.status == "SIGNED" } ?: true
|
|
||||||
} else true
|
|
||||||
}
|
|
||||||
Text("Finalizar inspección", style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold)
|
Text("Finalizar inspección", style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.Bold)
|
||||||
Text("No puede quedar ninguna Acta en borrador. Cada Acta preparada debe tener firma de inspector.")
|
Text(
|
||||||
|
"No puede quedar ninguna Acta en borrador. Al cerrar, el servidor verifica que cada Acta preparada tenga firma de inspector; si falta alguna, indicará cuál debe completarse.",
|
||||||
|
)
|
||||||
Button(
|
Button(
|
||||||
onClick = { model.closeInspection() },
|
onClick = { model.closeInspection() },
|
||||||
enabled = !model.busy && drafts == 0 && !readyMissingInspector,
|
enabled = !model.busy && drafts == 0,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
) { Text("Cerrar inspección y salir de la empresa") }
|
) { Text("Cerrar inspección y salir de la empresa") }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user