Cómo crear un cliente desde una reserva
Crea o reutiliza una ficha de cliente desde el editor interno de una reserva en Marea Gran Via y enlázala a la reserva que se está creando o completando.
En este artículo
Este flujo se usa cuando el operador registra una reserva desde el detalle de una ocurrencia de servicio y necesita capturar el cliente en el mismo formulario. Al guardar, Antylogic crea o reutiliza la ficha `Customer` a partir del teléfono y envía su `id` como `reservation.customer_id`.
La pantalla no ofrece un selector de cliente existente en este editor. La reutilización ocurre durante el guardado por `phone_e164`, y el alta del cliente y la reserva se persisten en llamadas separadas.
Antes de empezar
- Trabajar dentro de Grupo Marea Demo y la ubicación Marea Gran Via.
- Tener `reservation:view` o `reservation:manage` para abrir el detalle de la ocurrencia; para abrir y guardar el editor hace falta `reservation:manage`.
- Tener `customer:manage` para que el guardado inline pueda crear o reutilizar el cliente; la pantalla también carga clientes con `customer:view`.
- Existe una ocurrencia de servicio accesible desde `/:orgId/:locationId/reservations/:occurrenceId?returnRoute=LocationReservationsCalendar&returnMode=week`.
- Para una reserva nueva, el operador puede pulsar `Nueva reserva`; para edición inline, existe una reserva sin `customer_id` vinculado.
Instrucciones
- 1.
Abrir el detalle de la ocurrencia
Entra en el detalle del servicio desde la agenda de reservas o con la ruta de la ocurrencia. La pantalla debe cargar el contexto del servicio, la lista de reservas, asignaciones de mesas y clientes disponibles.
- 2.
Abrir el editor de reserva
Pulsa `Nueva reserva` para crear una reserva o abre una reserva existente sin cliente desde la lista `Reservas` o desde el cronograma. El editor muestra `Nombre cliente` y `Teléfono cliente` dentro del formulario de reserva.
- 3.
Rellenar los datos del cliente
Introduce nombre y teléfono. Al guardar, la app envía esos datos a `POST /api/app/{orgId}/{locationId}/customers`; si ya existe un cliente local con el mismo `phone_e164`, el sistema reutiliza esa ficha y puede actualizar el nombre.
- 4.
Completar la reserva
Rellena comensales, estado, hora, duración y mesas cuando el modo de mesas lo requiera. En una reserva nueva creada desde este editor, la reserva se guarda con `channel: 'phone'`.
- 5.
Guardar y comprobar el cierre
Pulsa `Crear` o `Guardar`. La app recibe el `id` del cliente, lo incluye como `customer_id` en el alta o actualización de la reserva, refresca la ocurrencia y la lista de clientes, y cierra el editor si todo termina correctamente.
Validaciones y límites
- Si faltan `orgId`, `locationId` u `occurrenceId`, la pantalla muestra un estado de no encontrado y no ejecuta el flujo.
- Sin `reservation:view` ni `reservation:manage`, el usuario ve `No tienes permisos para ver reservas.`
- `Nombre cliente` es obligatorio; si queda vacío, la pantalla muestra `El nombre del cliente es obligatorio.`
- `Teléfono cliente` es obligatorio; si queda vacío, la pantalla muestra `El teléfono del cliente es obligatorio.` No se encontró validación de formato E.164 más allá del teclado `phone-pad`.
- `partySize` debe ser numérico y mayor que 0 antes de crear cliente o reserva.
- Si el modo de mesas no es `indifferent`, debe haber al menos una mesa válida seleccionada.
- `POST /customers` requiere `customer:manage`; si el permiso falta, el operador puede abrir el editor con `reservation:manage`, pero el guardado inline fallará al crear el cliente.
- El cliente se asigna a la ubicación del contexto backend; cualquier `location_id` enviado desde UI no decide el alcance.
- El backend de reservas acepta `customer_id` solo si el cliente existe y pertenece a la misma ubicación o es global.
- Cliente y reserva se guardan en llamadas separadas. Si se crea el cliente pero falla el `POST` o `PUT` de reservas, el editor muestra el error y permanece abierto, sin rollback compartido.
- Si la actualización de la reserva requiere `confirm_manual_mode`, el cliente puede haberse creado antes de la confirmación; el vínculo con la reserva se persiste solo cuando el operador confirma.
Resultado esperado
La reserva queda creada o actualizada con `customer_id` enlazado al cliente creado o reutilizado, la ocurrencia se refresca, `customersQuery` vuelve a cargar y el editor se cierra cuando el guardado termina sin errores.