guía práctica

Hoteles, stock y liquidación

Alta de hoteles, stock, preasignación, prereservas, asignación masiva, coste hotelero y liquidación interna.

Hoteles, stock y liquidación

Esta guía explica cómo gestionar hoteles dentro de un torneo: alta de hoteles, stock de habitaciones, preasignación a clubs o equipos, prereservas, asignación masiva, reglas de coste y hoja de pago al hotel.

Toda esta parte es administrativa. Solo los usuarios con rol administrador ven el menú y las pantallas.

El concepto clave: lo que cobras vs. lo que pagas

El sistema tiene dos motores separados:

Motor Qué hace Dónde vive
Venta Lo que le cobras al club o a la familia por su habitación Reglas de precio del torneo, packs/ofertas, overrides de equipo y habitación
Coste hotelero Lo que tú pagas al hotel proveedor por esas habitaciones Reglas de coste por hotel, override de coste por habitación

La diferencia entre uno y otro es tu margen, que se ve en la pantalla de liquidación.

Una habitación sin hotel asignado sigue siendo válida: tiene su precio de venta pero coste 0. Nunca aparece en una hoja de pago al hotel.

Paso 1 — Alta de un hotel (ficha base)

La ficha base del hotel es reutilizable entre torneos y se crea una sola vez.

  1. En el menú superior, pulsa Hoteles.
  2. Pulsa Añadir hotel.
  3. Rellena: nombre (obligatorio), ciudad, contacto, teléfono, email, dirección, notas.
  4. Marca Activo (por defecto lo está).
  5. Guarda.

Si editas esta ficha más tarde, los torneos donde ya has vinculado este hotel no cambian automáticamente (ver paso 2).

Paso 2 — Vincular el hotel a un torneo

Hay dos formas: vincular hoteles de a uno (útil si quieres configurar check-in / notas en el acto) o marcar varios a la vez con una grilla (más rápido cuando arrancas un torneo con muchos hoteles).

Opción A — Vincular de a uno

  1. Entra en el torneo.
  2. En la cabecera, pulsa el kebab Alojamiento → Hoteles del torneo.
  3. En "Vincular un hotel al torneo", selecciona el hotel base y pulsa Vincular.
  4. El sistema crea una copia congelada (snapshot) con los datos del hotel en ese momento.

Opción B — Inscribir varios hoteles a la vez

  1. En la página Hoteles del torneo, pulsa el botón Inscribir hoteles.
  2. Se abre una grilla con todos los hoteles base activos. Los que ya están vinculados al torneo salen marcados.
  3. Marca o desmarca los que quieras. Puedes usar el buscador para filtrar por nombre, ciudad o dirección, o el "marcar todos" para seleccionar los visibles.
  4. Pulsa Guardar hoteles. El sistema crea el snapshot de los nuevos y desvincula los que desmarcaste.

Si desmarcas un hotel que ya tiene habitaciones asignadas, el guardado se rechaza con un aviso listando los hoteles conflictivos. Ninguna otra marca se aplica hasta que resuelvas ese caso (reasignas las habitaciones o desactivas el hotel desde su ficha).

En ambos casos, el resultado es el mismo: una copia congelada (snapshot) del hotel en ese torneo.

La tabla de hoteles vinculados muestra dos cifras por hotel:

  • Stock total: suma de todas las unidades configuradas (todos los tipos).
  • Stock disponible: cuánto queda libre tras descontar prereservas y habitaciones ya asignadas. Aparece en verde si hay unidades y en rojo si está a 0.

Cada fila tiene tres botones:

  • Ver detalle: abre una pantalla con cuatro bloques colapsables (todos abiertos por defecto, se cierran haciendo clic en la cabecera):
    • Resumen: tarjetas con habitaciones asignadas/total, personas alojadas/capacidad máxima, y una tarjeta por tipo de habitación con formato asignadas/total (p. ej. Individuales 14/20). Los bebés (menores de 3 años) no cuentan en "Personas alojadas" porque duermen en cuna.
    • Resumen de stock: tabla por tipo con total/reservado/asignado/disponible.
    • Habitaciones asignadas: lista de todas las habitaciones asignadas, agrupadas por club y equipo. Aquí están las acciones para eliminar club/equipo del hotel y reorganizar (ver más abajo).
    • Habitaciones reservadas: listado de las prereservas de stock activas (tipo, unidades, club o equipo destinatario, notas, estado). Es el desglose de la columna "Reservado" del bloque anterior. Las prereservas se crean y eliminan desde Editar / Stock.
  • Editar / Stock: configura stock, preasignaciones, prereservas y reglas de coste.
  • Desvincular: solo si el hotel no tiene habitaciones asignadas.

Acciones desde la página detalle del hotel

En la vista de detalle, agrupadas por club y equipo, tienes tres acciones nuevas:

  • Eliminar club del hotel (en la cabecera del grupo del club): desvincula todas las habitaciones de todos los equipos de ese club en este hotel. Las habitaciones NO se borran — simplemente dejan de estar asignadas al hotel y vuelven al listado de "sin hotel" para reasignarlas.
  • Eliminar del hotel (junto al nombre de cada equipo): lo mismo pero solo para un equipo concreto.
  • Reorganizar (junto a cada equipo): reajusta el tipo de cada habitación del equipo al que le toca por ocupantes reales. Útil cuando reservaste habitaciones como quintuples para apartar stock y ahora quieres que cada una vaya a su tamaño natural. Al pulsarlo aparece un diálogo con la opción "Permitir subir de tipo si no hay stock": si una habitación debería ser doble pero ya no hay dobles, se sube a triple (nunca baja). Los bebés menores de 3 años no cuentan para el cálculo del tipo.

Los ocupantes, precios custom y notas de las habitaciones se preservan en todas estas operaciones. Solo cambian los campos de hotel.

Paso 3 — Configurar el stock por tipo de habitación

Cada hotel tiene un inventario de habitaciones por tipo.

  1. En la lista de hoteles del torneo, pulsa Editar / Stock en la fila del hotel.
  2. En la sección "Stock por tipo de habitación":
    • Tipo: individual, doble, triple, cuádruple, quíntuple o séxtuple.
    • Unidades totales: cuántas tienes disponibles en ese hotel.
    • Prereservadas: bloqueo genérico sin destinatario (ej. reserva administrativa sin asignar todavía).
  3. Pulsa Añadir/actualizar tipo.

La columna Disponible se calcula así:

Disponible = Total − Prereservadas genéricas − Prereservas por club/equipo − Habitaciones ya asignadas

Si has asignado más habitaciones de las que hay en stock, la columna muestra un número negativo en rojo junto a la etiqueta (sobre-asignado). No se bloquea: el sistema solo te avisa para que sepas cuánto te has pasado. Lo mismo ocurre en la lista principal de hoteles del torneo — verás por ejemplo -2 / 50 cuando un tipo esté sobre-asignado.

Paso 4 (opcional) — Preasignar el hotel a clubs o equipos

Si ya sabes que un club o un equipo concreto debe ir a este hotel, configúralo:

  1. En la misma página de edición del hotel del torneo, sección Preasignaciones.
  2. Elige Alcance: club o equipo.
  3. Selecciona el club o el equipo concreto.
  4. Pulsa Añadir preasignación.

Al crear una habitación nueva para un equipo con preasignación, el selector de hotel aparece ya elegido con una etiqueta verde "Preasignado".

Una preasignación a nivel equipo gana sobre la de su club si hay ambas.

Auto-asignación al hotel preasignado

Cualquier habitación creada para un equipo con preasignación (familiar, de equipo, auto-generada o hecha a mano por un coordinador/entrenador) se vincula automáticamente a ese hotel con el tipo que le corresponde por ocupantes. No hace falta que el usuario vea el selector de hotel para que el stock quede al día.

  • Si al crear o editar la habitación no queda stock suficiente del tipo, la habitación se guarda igualmente pero aparece un banner amarillo avisando del exceso. Nunca se bloquea el guardado.
  • Al eliminar una habitación (o desvincular un club/equipo del hotel desde la página detalle), el stock se libera automáticamente y la acción queda registrada en auditoría.
  • Al auto-generar habitaciones de equipo (botón de la pantalla del equipo o masivo desde Gestionar habitaciones equipos), las habitaciones previas del equipo auto-generadas liberan su stock antes de recrearse, para que la cuenta nunca quede descuadrada.

Cambios de tamaño al editar ocupantes

Si un coordinador o entrenador edita una habitación y añade o quita acompañantes, el tipo de habitación (Doble/Triple/Cuádruple…) se recalcula automáticamente según la ocupación real de noche pico (viernes vs sábado, los bebés no cuentan). Ejemplo:

  • Habitación de 3 personas asignada como Triple → el coordinador añade un adulto → pasa a Cuádruple sin intervención del admin.
  • Habitación de 4 personas como Cuádruple → el coordinador quita 2 acompañantes → pasa a Doble automáticamente.

El stock del hotel se ajusta en el acto. Si el nuevo tipo está sobre-asignado, aparece el banner amarillo; si hay stock, la operación pasa en silencio.

Paso 5 (opcional) — Prereservar stock para un club o equipo

Si quieres bloquear N habitaciones para un club antes de crear las habitaciones reales:

  1. En la misma página, sección Prereservas de stock.
  2. Indica tipo, cantidad y alcance (club o equipo).
  3. Pulsa Añadir prereserva.

Esa cantidad se descuenta de la disponibilidad visible.

Paso 6 — Asignar hoteles a habitaciones

Hay tres formas.

a) Individual

  1. Entra en una habitación (desde el alojamiento del equipo).
  2. Si el torneo tiene hoteles vinculados, el formulario muestra dos selectores opcionales: Hotel y Tipo de habitación.
  3. Elige y guarda. Se descuenta stock.

b) Por habitaciones (muchas a la vez)

  1. En el torneo, kebab Alojamiento → Asignación por habitaciones.
  2. Filtra por club, equipo o estado (con/sin hotel) con la barra que hay encima de la tabla.
  3. Marca las habitaciones a asignar (checkbox o "seleccionar todas").
  4. Elige la acción "Asignar hotel" y el hotel destino.
  5. Elige el Tipo. Hay dos modos:
    • Auto (según ocupantes) — por defecto. Cada habitación va al tipo que le toca según su número de ocupantes (1→Individual, 2→Doble, 3→Triple, 4→Cuádruple, 5→Quíntuple, 6+→Séxtuple). Es el modo correcto el 99% de las veces.
    • Forzar un tipo concreto (ej. "Doble (forzar)"). Todas las habitaciones seleccionadas pasan a ese tipo, independientemente de cuántas personas haya dentro.
  6. Opciones adicionales:
    • Permitir subir de tipo si no hay stock del natural (upsize): si una habitación no cabe en su tipo (no hay stock o está agotado), se intenta meterla en el siguiente tamaño disponible. Por ejemplo: una doble sin stock → se coloca en triple si hay; si no, en cuádruple; etc. Nunca baja (una cuádruple no se mete en doble). Sin esta opción activada, las habitaciones sin stock en su tipo se quedan sin asignar.
    • Bloquear si no hay stock suficiente (hard-block): si un tipo tiene stock configurado pero agotado, con esta opción activada se salta la habitación en vez de sobrereservar.
  7. Pulsa Aplicar a seleccionadas.
  8. Al terminar, el mensaje de resultado muestra el desglose: "Asignadas 6 habitaciones. 2 subidas a tipo mayor (2 Triple). Sin stock configurado en el hotel: 1 Cuádruple."

El botón ojo 👁 en cada fila abre una ventana con el detalle de la habitación: ocupantes, hotel actual, pack aplicado. Se carga al vuelo; la pantalla no se ralentiza aunque haya miles de habitaciones.

c) Por equipos (aliado del DIFF_HOTEL)

Cuando quieres asignar todas las habitaciones de un equipo de una vez, o cuando un equipo tiene acompañantes en otro hotel distinto al de los jugadores:

  1. En el torneo, kebab Alojamiento → Asignación por equipos.
  2. La tabla muestra una fila por equipo con el desglose de habitaciones por tipo (Individual/Doble/Triple/Cuádruple/Quíntuple/Séxtuple/Total), una columna de Noches (1 viernes / 1 sábado / 2 / Mixto) y el estado hotel (Sin asignar / Parcial / Completo).
  3. Los equipos en modo "Familia y jugadores en hoteles diferentes" aparecen en dos filas: una para el alcance "Equipo" (habitaciones de jugadores) y otra para "Acompañantes" (habitaciones familiares). Se asignan por separado al hotel que corresponda.
  4. Pulsa el botón ojo 👁 de una fila para abrir la ventana de asignación. La ventana muestra cada habitación como un acordeón: al desplegarla ves la lista completa de ocupantes con su rol, edad, tipo (adulto / kid / bebé · cuna), y noches. Esto sirve tanto para inspeccionar composición como para decidir si conviene moverla a otro hotel.
  5. En la parte inferior, el formulario de asignación: hotel, tipo forzado (opcional), upsize y hard-block igual que la asignación por habitaciones.

Filtros y orden de la tabla

Encima de la tabla hay una barra con tres filtros:

  • Club — acota la vista a un solo club.
  • Estado hotel — Sin asignar / Parcial / Completo.
  • Tipología — "Sólo equipo" (habitaciones de jugadores), "Sólo acompañantes" (familiares), "Equipo + acompañantes" (los que duermen juntos) o "Todas".

Además, las cabeceras de columna son clickables: al pulsar sobre "Cuádr." (o "Doble", "Triple", etc.) la tabla se reordena por número de habitaciones de ese tipo. Útil si buscas cerrar un hotel con cuádruples: ordena de mayor a menor y vas asignando los equipos con más cuádruples primero.

Tipo natural y "sin espacio"

Las columnas de tipos (Indiv/Doble/Triple/Cuádr./Quínt./Séxt.) muestran siempre el tipo natural de la habitación, es decir, el que le tocaría por ocupantes — teniendo en cuenta en qué noche duerme cada uno. Una habitación con 3 personas el viernes y 2 el sábado cuenta como Triple, no como Quíntuple: nunca hay 5 camas ocupadas a la vez. Los bebés menores de 3 años cuentan como cuna, no como cama.

Si una habitación se asignó en el hotel con un tipo mayor al natural (opción de upsize), la tabla no lo marca con un chip — se ve habitación por habitación al abrir el ojo 👁, donde cada acordeón muestra el tipo natural y el tipo asignado cuando difieren.

La columna Estado sí muestra un aviso cuando hace falta intervenir:

  • Un chip rojo ⚠ N sin espacio significa que hay N habitaciones cuyo tipo natural actual ya no cabe en el tipo con el que fueron asignadas (ej. se añadió un jugador tras la asignación). La asignación no se recalcula automáticamente: el aviso te pide reasignar manualmente.

AJAX: no perder filtros ni scroll

Al asignar desde el ojo, la página no se recarga: la fila se actualiza en el sitio y los filtros/scroll se mantienen. Igual en la asignación por habitaciones. Si filtras por un club con 5 equipos y quieres meterlos todos en el mismo hotel, vas aplicando uno a uno sin volver al inicio.

Si algunas habitaciones no caben (ej. el hotel no tiene ni cuádruple ni quíntuple), el equipo se queda en estado Parcial y el sistema avisa del motivo exacto. Se puede terminar de asignar luego a otro hotel.

Regla común a las tres formas

  • Una habitación puede cambiarse de hotel o quitarse el hotel en cualquier momento. El stock se devuelve automáticamente al hotel anterior.
  • Si el hotel no tiene stock configurado para el tipo que toca y no está activa la opción de upsize, esa habitación se queda sin asignar. El sistema nunca crea "en silencio" stock inexistente.
  • El modo forzar un tipo sirve sobre todo para correcciones manuales; no es el flujo normal.
  • Cuando una acción consume stock por encima de lo disponible (p. ej., te pasas 1 doble al auto-asignar), el sistema nunca bloquea el guardado: solo avisa con un banner amarillo y deja que el admin decida si reorganiza. La columna Disponible del detalle del hotel pasa a negativo para reflejar el exceso.

Paso 7 — Reglas de coste del hotel (cuánto te cobra el hotel)

Son independientes del precio de venta al cliente.

  1. En la edición del hotel del torneo, sección Coste hotelero.
  2. Elige uno de los 3 modos:
Modo Cálculo Ejemplo
Precio fijo por habitación Un importe único por cada habitación de ese tipo Doble = 80€ planos
Precio por ocupante base × nº de ocupantes 30€ × cada persona
Precio por ocupante con tramo Los primeros N ocupantes al precio base; del ocupante N en adelante aplica descuento % o importe fijo Base 30€; desde el 3º ocupante, 50% descuento
  1. Filtros opcionales: tipo de habitación al que aplica, filtro por rol (jugador/entrenador/acompañante), edad mínima/máxima.
  2. La prioridad decide ante empates: gana la de mayor número.
  3. Pulsa Añadir regla de coste.

Si una habitación debe pagarse con un importe pactado puntual, entra en la habitación y usa el campo naranja Coste hotelero manual. Es un override que sustituye al cálculo automático.

Paso 8 — Liquidación interna del torneo

En el torneo, pulsa Liquidación (admins y directores del torneo).

Verás:

  • Totales: venta total, coste total y margen bruto del torneo (suman todos los equipos del torneo, aunque tengas filtros puestos en la tabla).
  • Coste por hotel (colapsable): un resumen y botón para descargar la hoja de pago en PDF de cada hotel.
  • Desglose por equipo (colapsable): tabla paginada con columna Miembros (formato J: 12 / E: 2 — jugadores y entrenadores del equipo, sin contar acompañantes), número de habitaciones (con/sin hotel), venta, pagado, pendiente, coste y margen equipo a equipo. Filtros por club y por estado de pago (Al día / Parcial / Pendiente / Cualquiera). Si hay habitaciones sin hotel, la celda "Sin hotel" sale con chip amarillo.
    • La columna Pendiente cambia de color y signo según el estado del equipo: en rojo cuando todavía falta por cobrar, en verde con signo + cuando el equipo ha pagado de más (saldo a favor), y en gris si está cuadrado. Así se detectan de un vistazo los casos que hay que devolver o compensar.
  • Kebab por fila: cada equipo tiene un menú de tres puntos con Añadir pago (abre modal rápido para registrar un pago sin salir de la página), Ver pagos (balance + historial) y Ver equipo. Pensado para registrar pagos de varios equipos seguidos sin navegar.
  • Aviso de habitaciones sin hotel: si hay habitaciones del torneo sin hotel asignado, aparece un botón amarillo arriba del todo con el número y un acceso directo a la asignación masiva filtrada a "sin hotel". Esas habitaciones no entran en ninguna hoja de pago hasta que las asignes.

Hoja de pago al hotel (PDF)

Cada hotel del torneo tiene su propia hoja de pago descargable desde la liquidación. Contiene:

  • Datos del hotel (congelados en el momento en que se vinculó al torneo).
  • Habitaciones asignadas a ese hotel, agrupadas por equipo.
  • Desglose de coste por habitación (regla aplicada o override manual).
  • Subtotal por equipo y total final a pagar al hotel.

Solo aparecen las habitaciones efectivamente asociadas a ese hotel. Las demás, aunque existan con su precio de venta, no salen en la hoja de pago.

Botonera del detalle del hotel

Arriba a la derecha de la página de detalle hay dos menús desplegables:

  • Exportar — descargas que produce el hotel.
  • Acciones — operaciones sobre el hotel (asignar extras, editar / stock).

Los desplegables solo muestran los ítems que aplican en cada momento: si el hotel no tiene habitaciones asignadas o no hay extras asignados a sus alojados, el menú Exportar se oculta entero.

Exportar equipos y personas del hotel (Excel)

Desde Exportar → Equipos y personas (Excel) descargás al instante un archivo .xlsx con todos los equipos alojados en este hotel y sus jugadores y entrenadores.

  • Una pestaña por equipo, con el título Club Letra · Categoría para identificarlos rápido (p. ej. CB Pinto A · Cadete).
  • Cabecera con club, equipo y categoría sobre fondo claro.
  • Columnas: Rol, Nombre, Apellidos, DNI, Fecha de nacimiento, Observaciones (notas de inscripción de la persona) y Notas médicas.
  • Primero los jugadores, luego los entrenadores, ordenados por apellidos.

Detalles a tener en cuenta:

  • El dorsal no se exporta a propósito — esta exportación está pensada para registro / control (recepción de hotel, lista médica, etc.), no para fichas deportivas.
  • Los acompañantes (familiares) no aparecen — solo jugadores y entrenadores.
  • Si un equipo tiene habitación en el hotel pero todavía no tiene personas inscritas, su pestaña existe igualmente con el aviso Sin personas inscritas.
  • Los DNIs se conservan tal cual (con letra final o ceros iniciales) porque las celdas son texto.

El menú Exportar solo aparece si el hotel tiene habitaciones asignadas. Si no lo ves, primero asigna habitaciones a equipos en este hotel.

Exportar extras del hotel (ZIP por club, con selección)

Algunos extras se cobran a través del propio hotel (típicamente la Tasa turística). Para esos casos puedes generar un ZIP con un PDF por equipo, eligiendo qué extras incluir.

  1. Entra en el detalle del hotel (botón Detalle).
  2. Arriba a la derecha, abre el menú Exportar → Extras por equipo (PDF).
  3. El modal muestra los extras que alguien del hotel ya tiene asignado (no el catálogo entero). Marca solo los que aplican al hotel (ej. Tasa turística sí; PortAventura o Bus no).
  4. Pulsa Generar PDF. Recibirás un email con el enlace de descarga: un ZIP con carpetas por club y un PDF por equipo.

El ítem solo aparece si hay alguna asignación de extras a personas alojadas en el hotel. Si no lo ves, primero asigna los extras correspondientes desde Acciones → Asignar extras del hotel o desde la página del equipo.

Detalle completo en la guía de Extras, sección 2 ter.

Lo que sigue funcionando igual

Nada del módulo de venta (lo que cobras a los clubes) ha cambiado:

  • El precio de venta sigue dependiendo de las reglas de precio del torneo (Reglas de precio en la cabecera), los packs/ofertas y los overrides manuales en habitación o equipo.
  • Los torneos que no usen hoteles pueden seguir funcionando exactamente como antes. El hotel es opcional.
  • Las habitaciones ya creadas no se tocan. Si algún día se asocian a un hotel, consumen stock. Si no, siguen siendo válidas.