feat: carga de ciclos — apertura y cierre de lotes con seleccion multiple
Ultimo flujo de Fase 1. Pregunta ciclo, accion, fecha y lotes, y postea a
ciclos_{ciclo}_up con lote_ids[], que es el contrato que quedo en el ERP.
Pieza nueva del motor, multi_select: la lista acumula, cada toque marca o
desmarca con un check en la etiqueta, y "Listo" cierra. WhatsApp no tiene
casillas, asi que el estado se muestra redibujando. De las 10 filas, dos van
para "Ver mas" y "Listo".
Tambien resolverPorCampos(), que reemplaza {campo} con lo ya elegido tanto en
la clave del endpoint como en la URL del POST. Con eso los seis tipos de ciclo
y las dos acciones comparten tres entradas de endpoint en vez de dieciocho:
apertura ofrece los lotes de la finca y cierre solo los que estan abiertos.
Mantenimiento no aparece: no tiene tabla de ciclos ni apertura/cierre, es una
labor y va con Fase 2.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
576ea7de40
commit
e5326bda8c
@@ -231,6 +231,7 @@ $configJson = [
|
||||
['id' => 'subir_ciclo_cosecha', 'title' => '🌾 Ciclo cosecha', 'description' => 'Subir ciclo de cosecha'],
|
||||
['id' => 'registrar_ausentismo', 'title' => '👥 Ausentismo', 'description' => 'Registrar falta, incapacidad o permiso'],
|
||||
['id' => 'registrar_pluviometria','title' => '🌧️ Pluviometría', 'description' => 'Milímetros de lluvia por finca'],
|
||||
['id' => 'registrar_ciclo', 'title' => '🔄 Ciclos', 'description' => 'Abrir o cerrar lotes'],
|
||||
],
|
||||
],
|
||||
],
|
||||
@@ -471,6 +472,64 @@ $configJson = [
|
||||
'nlu_description' => 'Registrar pluviometría, lluvia o milímetros por finca',
|
||||
],
|
||||
|
||||
// Apertura y cierre de lotes, para los seis tipos de ciclo.
|
||||
// Mantenimiento no va acá: no tiene tabla de ciclos ni apertura/cierre,
|
||||
// es una labor. El orden sigue el de la pantalla web.
|
||||
'registrar_ciclo' => [
|
||||
'type' => 'collect_and_post',
|
||||
'endpoint_key' => 'ciclos_up',
|
||||
'header' => '🔄 Ciclos',
|
||||
'confirm' => true,
|
||||
'success_text' => '✅ Enviado a Palmas360.',
|
||||
'back' => 'enviar_informacion',
|
||||
'nlu_description' => 'Abrir o cerrar ciclos de lotes (cosecha, sanidad, censo, palmarum, tratamiento, polinización)',
|
||||
'fields' => [
|
||||
[
|
||||
'key' => 'ciclo',
|
||||
'label' => 'Ciclo',
|
||||
'type' => 'static_select',
|
||||
'prompt' => '¿Qué ciclo vas a registrar?',
|
||||
'options' => [
|
||||
['id' => 'cosecha', 'label' => '🌾 Cosecha'],
|
||||
['id' => 'polinizacion', 'label' => '🌸 Polinización'],
|
||||
['id' => 'sanidad', 'label' => '🐛 Plagas'],
|
||||
['id' => 'censo', 'label' => '📝 Censo'],
|
||||
['id' => 'palm', 'label' => '🌴 Palmarum'],
|
||||
['id' => 'tratamiento', 'label' => '💊 Tratamiento'],
|
||||
],
|
||||
],
|
||||
[
|
||||
'key' => 'accion',
|
||||
'label' => 'Acción',
|
||||
'type' => 'static_select',
|
||||
'prompt' => '¿Qué vas a hacer?',
|
||||
'options' => [
|
||||
['id' => 'apertura', 'label' => '📂 Abrir lotes'],
|
||||
['id' => 'cierre', 'label' => '📁 Cerrar lotes'],
|
||||
],
|
||||
],
|
||||
[
|
||||
'key' => 'fecha',
|
||||
'label' => 'Fecha',
|
||||
'type' => 'date_quick',
|
||||
'prompt' => '📅 ¿De qué fecha?',
|
||||
'other_validate' => 'date',
|
||||
'other_prompt' => 'Escribe la fecha (YYYY-MM-DD):',
|
||||
],
|
||||
[
|
||||
'key' => 'lote_ids',
|
||||
'label' => 'Lotes',
|
||||
'type' => 'multi_select',
|
||||
'prompt' => 'Elige los lotes (puedes marcar varios):',
|
||||
// Apertura ofrece los lotes de la finca; cierre, solo los abiertos
|
||||
'source_endpoint_key' => 'lotes_{accion}_dn',
|
||||
'value_field' => 'id',
|
||||
'label_field' => 'label',
|
||||
'empty_text' => '⚠️ No hay lotes disponibles para esta combinación.',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
// Upload
|
||||
'enviar_informacion' => ['type' => 'menu', 'menu' => 'submenu_subir_ciclos', 'nlu_skip' => true, 'back' => 'show_main_menu'],
|
||||
'subir_ciclo_cosecha' => ['type' => 'function', 'function' => 'upload_ciclo', 'nlu_description' => 'Subir o enviar un ciclo de cosecha', 'params' => ['ciclo' => 'cosecha']],
|
||||
@@ -504,6 +563,7 @@ $configJson = [
|
||||
['id' => 'subir_ciclo_cosecha', 'title' => '🌾 Subir cosecha', 'description' => 'Enviar ciclo de cosecha'],
|
||||
['id' => 'registrar_ausentismo', 'title' => '👥 Ausentismo', 'description' => 'Registrar falta, incapacidad o permiso'],
|
||||
['id' => 'registrar_pluviometria','title' => '🌧️ Pluviometría', 'description' => 'Milímetros de lluvia por finca'],
|
||||
['id' => 'registrar_ciclo', 'title' => '🔄 Ciclos', 'description' => 'Abrir o cerrar lotes'],
|
||||
],
|
||||
],
|
||||
],
|
||||
@@ -597,6 +657,13 @@ $endpoints = [
|
||||
['key' => 'novedades_ausentismo_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=novedades_ausentismo_dn'],
|
||||
['key' => 'ausentismos_up', 'dir' => 'upload', 'url' => $BASE . '?peticion=ausentismos_up'],
|
||||
['key' => 'pluvio_upload', 'dir' => 'upload', 'url' => $BASE . '?peticion=pluvio_upload'],
|
||||
|
||||
// ── Carga de ciclos ─────────────────────────────────────────────────────
|
||||
// {ciclo} y {accion} se resuelven con lo que el usuario ya eligió, así los
|
||||
// seis tipos y las dos acciones comparten estas tres entradas.
|
||||
['key' => 'lotes_apertura_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=lotes_x_finca&finca_id={finca_id}'],
|
||||
['key' => 'lotes_cierre_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=lotes_abiertos_dn&ciclo={ciclo}&finca_id={finca_id}'],
|
||||
['key' => 'ciclos_up', 'dir' => 'upload', 'url' => $BASE . '?peticion=ciclos_{ciclo}_up'],
|
||||
// Todos los lotes (PDF) por ciclo
|
||||
['key' => 'cosecha_todos_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=ciclos_cosecha_dn&finca_id={finca_id}'],
|
||||
['key' => 'polinizacion_todos_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=ciclos_polinizacion_dn&finca_id={finca_id}'],
|
||||
|
||||
Reference in New Issue
Block a user