# ListRelated — notas

Actualizado 2026-10-01. Rama actual: `development` (PR #71 `add/tickets-and-leads` ya mergeado).

## Hecho 2026-10-01: `GET owner/booking/listRelated` (endpoint nuevo, sin commit)

Búsqueda de bookings aparte de los leads (NO filtra leads por booking). Front la llama solo cuando `withBooking=2`.

- Ruta: `routes/owner/booking.php` → `Booking\BookingListRelatedController`
- DTO: `Owner/Booking/Dto/BookingListRelatedDTO` (`email`, `name`, `lastName`, `phone`, `nameAsSearch`)
- Application: `Modules/Booking/Application/ListRelated/*`
- Criteria: `Modules/Booking/Domain/ListRelatedBooking`
  - `t_booking b INNER JOIN t_user u ON b.Id_User = u.Id_User` (cliente del booking; sin Booking_Code ni pasajeros)
  - OR: `User_Email =`, `User_Phone =`, `User_Name LIKE 'x%'`, `User_LastName LIKE 'x%'`
  - `Booking_Status IN (1, 2)` (pendiente/confirmado), orden exacto email/tel → `Booking_Date DESC`, `LIMIT 10`
  - Sin parámetros → `[]`
  - `Tours[]` por booking: 2da query (`IN` ids, patrón de `WebContactMessageDetails`) a `t_booking_tour` + `t_tour` + `t_package`, una fila por BookingTour, solo `BookingTour_Status = 2` (activo), `ORDER BY BookingTour_DateStart ASC`. Sin agrupar: el front agrupa por `BookingTour_Group` (= un package). Sin tours → `[]`.
  - Futuro: mover a un `ListBookingTourQuery` reutilizable (hoy no existe ningún List en `BookingTour/Application`).
- `nameAsSearch=2`: misma lógica que WCM (duplicada en el controller).
- Test: `tests/routes/owner/Booking/BookingListRelatedTest.php` → 8/8 OK.

Descartado: `sp_booking_passenger_search` (parte de pasajeros, duplica filas, INNER JOIN invoice/tour, sin teléfono de cliente, sin LIMIT).

## Posibles ajustes

- Nombre con `LIKE 'x%'` (no MATCH: no se sabe si `t_user` tiene FULLTEXT).
- `User_Phone` se compara sin `User_PhoneCode`.

## Otros pendientes

- Límite de mensajes 3000 (columna, SPs, validadores, HubSpot, Mother): hecho, sin commit.
- Tests de emojis `WebContactMessageInsertTest.php`: ejecutados 2026-10-01 → OK (3/3).
