feat: Fase 3 con campos condicionales; fix del monitor del ERP
Cosecha, polinizacion y fertilizacion en un solo flujo en vez de tres: skip_if muestra el producto solo a las dos que lo llevan y el pase solo a polinizacion. El lote se pregunta antes que el producto porque la dosis depende de los dos — sale de la fertilizacion que se autorizo en su modulo, no la elige el usuario. ErpMonitor construia api_base_url + /health, que no existe en el ERP: la ruta correcta es ?peticion=ping y la URL sale de company_endpoints como el resto. Por eso el panel mostraba el ERP caido. Tampoco mandaba el Bearer. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
8399a86972
commit
42adeb64d0
@@ -580,6 +580,48 @@ foreach (['novedades_labor_dn', 'lotes_finca_dn', 'empleados_labor_dn', 'labores
|
||||
check("endpoint {$k} registrado", isset($eps[$k]), true);
|
||||
}
|
||||
|
||||
echo "\nFase 3 — campos según el tipo\n";
|
||||
|
||||
$f3 = $flows['registrar_labor_validada'] ?? [];
|
||||
$c3 = array_column($f3['fields'] ?? [], null, 'key');
|
||||
|
||||
check('ofrece los tres tipos',
|
||||
array_column($c3['tipo']['options'], 'id'), ['cosecha', 'polinizacion', 'fertilizacion']);
|
||||
check('el producto sale de la fertilización autorizada del lote',
|
||||
$c3['producto_id']['source_endpoint_key'] ?? null, 'productos_fertilizacion_dn');
|
||||
|
||||
/** Espejo de capShouldSkip() */
|
||||
$saltear = function (array $campo, array $col): bool {
|
||||
$si = $campo['skip_if'] ?? null;
|
||||
if (!$si) return false;
|
||||
$v = (string)($col[$si['field']] ?? '');
|
||||
if (isset($si['not_in'])) return !in_array($v, array_map('strval', $si['not_in']), true);
|
||||
if (isset($si['equals'])) return $v !== (string)$si['equals'];
|
||||
return false;
|
||||
};
|
||||
$pedidos = function (array $campos, string $tipo) use ($saltear): array {
|
||||
$col = ['tipo' => $tipo];
|
||||
return array_values(array_filter(array_keys($campos),
|
||||
fn($k) => !$saltear($campos[$k], $col)));
|
||||
};
|
||||
|
||||
// Los tres formularios del pedido, sin escribir tres flujos
|
||||
check('cosecha: sin producto ni pase',
|
||||
$pedidos($c3, 'cosecha'), ['tipo', 'novedad_id', 'fecha', 'lote_id', 'empleados', 'cantidad']);
|
||||
check('fertilización: con producto, sin pase',
|
||||
$pedidos($c3, 'fertilizacion'), ['tipo', 'novedad_id', 'fecha', 'lote_id', 'producto_id', 'empleados', 'cantidad']);
|
||||
check('polinización: con producto y pase',
|
||||
$pedidos($c3, 'polinizacion'), ['tipo', 'novedad_id', 'fecha', 'lote_id', 'producto_id', 'empleados', 'cantidad', 'fase_polinizacion']);
|
||||
|
||||
// El producto se pregunta despues del lote: la dosis depende de los dos
|
||||
$orden = array_keys($c3);
|
||||
check('el lote se pregunta antes que el producto',
|
||||
array_search('lote_id', $orden) < array_search('producto_id', $orden), true);
|
||||
|
||||
foreach (['novedades_labor3_dn', 'productos_fertilizacion_dn'] as $k) {
|
||||
check("endpoint {$k} registrado", isset($eps[$k]), true);
|
||||
}
|
||||
|
||||
echo "\nAlcance de fincas por número\n";
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user