feat: flujo de registro de pluviometria (Fase 1, carga de datos)
Segundo flujo de POST: fecha una sola vez y luego los milimetros de cada finca.
collect_for_each gana tres piezas que este flujo necesitaba:
- ask_date pregunta la fecha antes del bucle (Hoy/Ayer/Anteayer/Otra), en vez
de repetirla por item o asumir hoy.
- exclude_values descarta el "Todas las fincas" (id 0) que el catalogo antepone
para los informes y que aca no es una finca real.
- El payload pasa de un array plano a {fecha, fincas:[{id,label,valor}]}, que es
lo que BotEntradaProcesador::pluviosidad() espera; ademas manda telefono y
nombre, que el controller usa para la trazabilidad en bot_entrada.
Nota: el procesador ACTUALIZA la fila de pluviosidad del dia y falla si no
existe. Queda pendiente confirmar con Palmas360 quien las crea.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
0e72aa3d5a
commit
76ee42b96e
@@ -296,6 +296,59 @@ $enMenu = function (array $config, string $cat, string $id): bool {
|
||||
check('cat 1 lo ve en su menú', $enMenu($config, '1', 'registrar_ausentismo'), true);
|
||||
check('cat 3 lo ve en enviar información', $enMenu($config, '3', 'registrar_ausentismo'), true);
|
||||
|
||||
echo "\nPluviometría (POST)\n";
|
||||
|
||||
$plu = $flows['registrar_pluviometria'] ?? [];
|
||||
check('pide la fecha antes del bucle', $plu['ask_date'] ?? false, true);
|
||||
check('excluye "Todas las fincas"', $plu['exclude_values'] ?? [], ['0']);
|
||||
check('postea a pluvio_upload', $plu['endpoint_key'] ?? null, 'pluvio_upload');
|
||||
check('endpoint pluvio_upload registrado', isset($eps['pluvio_upload']), true);
|
||||
|
||||
// Espejo de exclude_values: el catálogo antepone id 0 = "🌐 Todas las fincas"
|
||||
$catalogo = [
|
||||
['id' => '0', 'label' => '🌐 Todas las fincas'],
|
||||
['id' => '4', 'label' => 'REPOSO'],
|
||||
['id' => '7', 'label' => 'ROSA BLANCA'],
|
||||
];
|
||||
$reales = array_values(array_filter($catalogo,
|
||||
fn($i) => !in_array((string)$i['id'], array_map('strval', $plu['exclude_values']), true)));
|
||||
check('solo pregunta por fincas reales', array_column($reales, 'label'), ['REPOSO', 'ROSA BLANCA']);
|
||||
|
||||
// Espejo de submitForeach(): forma que exige BotEntradaProcesador::pluviosidad()
|
||||
$armarBody = function (array $fe, string $from, string $nombre): array {
|
||||
$lecturas = [];
|
||||
foreach ($fe['collected'] as $id => $row) {
|
||||
$lecturas[] = ['id' => (string)$id, 'label' => $row['label'], 'valor' => $row['valor']];
|
||||
}
|
||||
return [
|
||||
'fecha' => $fe['fecha'] ?? date('Y-m-d'),
|
||||
'telefono' => $from,
|
||||
'nombre' => $nombre,
|
||||
($fe['items_key'] ?? 'fincas') => $lecturas,
|
||||
];
|
||||
};
|
||||
|
||||
$body = $armarBody([
|
||||
'fecha' => '2026-08-01',
|
||||
'items_key' => $plu['items_key'] ?? 'fincas',
|
||||
'collected' => [
|
||||
'4' => ['label' => 'REPOSO', 'valor' => '35'],
|
||||
'7' => ['label' => 'ROSA BLANCA', 'valor' => '12'],
|
||||
],
|
||||
], '573001565293', 'Usite');
|
||||
|
||||
// El procesador lee $d['fincas'] y $d['fecha']; el controller, telefono y nombre
|
||||
check('la clave es "fincas", no "lecturas"', array_key_exists('fincas', $body), true);
|
||||
check('manda la fecha elegida', $body['fecha'], '2026-08-01');
|
||||
check('manda trazabilidad', [$body['telefono'], $body['nombre']], ['573001565293', 'Usite']);
|
||||
check('cada lectura lleva id, label y valor',
|
||||
array_keys($body['fincas'][0]), ['id', 'label', 'valor']);
|
||||
check('los ids son los de finca', array_column($body['fincas'], 'id'), ['4', '7']);
|
||||
|
||||
// Sin fecha elegida cae a hoy, no a null
|
||||
check('sin fecha usa hoy',
|
||||
$armarBody(['collected' => []], 'x', 'y')['fecha'], date('Y-m-d'));
|
||||
|
||||
echo "\nask_finca\n";
|
||||
$af = $flows['ask_finca'];
|
||||
check('no repregunta si ya hay finca', $af['skip_if_set'] ?? false, true);
|
||||
|
||||
Reference in New Issue
Block a user