Alta de reserva
/bookings/create abre un wizard para registrar una reserva a mano. CX lo usa para dar de alta reservas en nombre de un propietario o bloqueos a nombre de VIVLA. Sirve para los cuatro tipos: disfrute, alquiler, intercambio y Thirdhome.
Necesitas edit:bookings. Entras con Crear reserva desde Reservas. La flecha de la cabecera vuelve a la página anterior o, si no hay historial, a /bookings.
Si buscas el paso a paso para CX, ve a Crear una reserva.
El wizard valida el formulario, pero la API decide si la reserva es posible. Las reglas de cupos, última hora, alquiler y llaves están en El ciclo de reserva, Reservas de última hora, Alquiler, Llaves e intercambio y Reglas de reserva.
Cómo funciona el wizard
- Todos los pasos comparten un solo formulario (
react-hook-formcon el schema ZodcreateBookingSchema). - El primer paso elige el tipo. El tipo decide qué pasos vienen después (
buildFlowenflows.ts). - Algunos pasos aparecen o desaparecen según lo que rellenas. Por ejemplo, en alquiler Detalles de la estancia solo aparece si añades asistentes.
- Siguiente se desactiva mientras el paso actual tenga errores. Solo cuentan los campos de ese paso (
STEP_FIELDS). - Los pasos de elegir una opción (tipo, última hora, casa y propietario) avanzan solos al seleccionar.
- El pie muestra Paso NN de NN, Atrás y Siguiente. En el último paso, el botón pasa a ser Crear reserva.
- Los pasos opcionales llevan la etiqueta Opcional.
Pasos por tipo
Tipo
“¿Qué tipo de reserva vas a registrar?”. Cuatro tarjetas: Disfrute, Alquiler, Intercambio y Thirdhome. Es obligatorio.Última hora (solo disfrute)
“¿Es una reserva de última hora?”. Elige Reserva normal o Última hora. Es obligatorio en disfrute.Casa
“¿En qué casa se registra la reserva?”. Busca por nombre. Se muestran 5 casas y un contador del total. La casa elegida queda fija arriba mientras no busques otra cosa. Es obligatoria.Propietario
El título cambia según el tipo (por ejemplo, “¿Quién disfrutará la reserva?” o “¿Quién publica el alquiler?”). La lista son los propietarios de la casa elegida. Haz clic otra vez en el propietario seleccionado para quitarlo.- Es opcional. Si no eliges a nadie, el aviso Bloqueo a nombre de VIVLA explica que la reserva se registra a nombre de VIVLA.
- En disfrute de última hora es obligatorio. Lo indica el aviso Propietario obligatorio en última hora.
Fechas
“¿Qué fechas quieres reservar?”. Un calendario con los slots de la casa: dos meses en escritorio y uno en móvil.- Haz clic en el día de entrada y después en el de salida. Si vuelves a pulsar el día de entrada, la selección se reinicia.
- No puedes empezar en un día pasado ni en un slot ocupado o no disponible. Tampoco puedes cruzar días no disponibles.
- Puedes elegir como máximo 2 slots. La excepción es un disfrute sin propietario (bloqueo de VIVLA), que no tiene límite.
- Con propietario elegido, la barra Reservas disponibles del propietario muestra su disponibilidad por temporada.
- El bloque Resumen de la operación muestra Entrada, Salida, Slots y Temporada.
- Si la casa no tiene calendario, sale Calendario no disponible. Configúralo en el Calendar Manager.
Asistentes adicionales (disfrute)
“¿Quién más va a asistir?”. Es opcional. Añadir asistente abre un buscador con dos pestañas:- Usuarios Vivla: busca por nombre o email. Puedes elegir varios. El propietario elegido no aparece.
- Añadir externo: pide nombre, email y teléfono. Los tres son obligatorios.
Asistentes (alquiler)
“¿Quiénes serán los asistentes?”. Es opcional. Usa el mismo buscador. En externos, el email es opcional y el teléfono obligatorio.- El primer asistente que añades queda como Principal.
- Usa Marcar como principal para cambiarlo.
- Si hay asistentes pero ninguno principal, un aviso te pide marcar uno.
Estado y precio de la oferta (alquiler con asistentes)
Registra la oferta del asistente:- Cerrado: precio ya acordado. La reserva se aprueba directa.
- Abierto: oferta pendiente de aprobación por el propietario.
Propietario receptor (intercambio)
“¿A quién va dirigido el intercambio?”. Es opcional. Solo puedes elegir usuarios de Vivla, y nunca al propietario que publica.- Al elegir receptor, ves Llaves necesarias y Saldo del propietario receptor con Suficientes o Insuficientes.
- Si el saldo no llega, no puedes avanzar.
- Si no eliges receptor, las llaves se descuentan cuando un propietario tome la reserva.
Asistente de Thirdhome
“¿Quién es el asistente de Thirdhome?”. Es opcional. Campos: Nombre del huésped, Email y Teléfono (opcional). Si rellenas cualquiera, el nombre y un email válido pasan a ser obligatorios.Detalles de la estancia
Aparece siempre en disfrute. En los otros tipos, solo si hay asistentes, receptor o huésped de Thirdhome.- Día de entrada / Hora de entrada y Día de salida / Hora de salida. Vienen de las fechas elegidas en el calendario. Puedes salir del rango de slots: un aviso te lo recuerda.
- Adultos, Niños y Mascotas. El mínimo de adultos es el número de personas con nombre en la reserva. El panel lo ajusta solo.
- Notas de la estancia.
Notas
“Notas de la reserva”. Texto libre y opcional.Resumen
“Revisa todo antes de confirmar”. Muestra la casa con el tipo y tres bloques con botón Editar para volver al paso:- Estancia: check-in, check-out, noches, temporada y viajeros.
- Propietario: el título cambia según el tipo. Sin propietario, sale Bloqueo a nombre de VIVLA.
- Participantes: asistentes, receptor o huésped de Thirdhome, según el tipo.
Validaciones del formulario
Salen decreateBookingSchema (schema.ts).
Las personas externas se validan al pulsar Añadir en el buscador (
ExternalGuestInlineForm): nombre y teléfono siempre, email obligatorio en disfrute y opcional en alquiler.
Qué se envía a la API
Al confirmar,mapFormToRegisterBody construye el body y lo envía a POST /v2/admin/bookings/register. Hay un mapper por tipo en mappers/byType/.
Qué lleva
stay en cada tipo:
Detalles de
stay:
- Los usuarios de Vivla van como
userId. Los externos van comoname,emailyphone. checkInycheckOutsolo van si cambiaste días u horas en Detalles de la estancia.info(adults,kids,pets) solo va si alguna cifra es mayor que 0.noteses la nota de la estancia, distinta de la nota de la reserva.
booking-list) y el calendario (calendar-list) y navega a /bookings?bookingId=:id&viewMode=list.