Overview
Reservation functions handle creating, updating, listing, and managing bed reservations for the Refugio mountain refuge system.Listing Functions
listar_reservas
List reservations with comprehensive filtering, pagination, sorting, and search capabilities.Database connection object
Filter options:
estado(string) - Filter by status: ‘pendiente’, ‘reservada’, ‘cancelada’id_usuario(int) - Filter by user IDfecha_inicio(string) - Filter by start date (greater than or equal)fecha_fin(string) - Filter by end date ( less than or equal)search(string) - Search in user name, email, or member numberorder_by(string) - Sort column: ‘fecha_inicio’, ‘fecha_fin’, ‘fecha_creacion’, ‘nombre’order_dir(string) - Sort direction: ‘ASC’ or ‘DESC’limit(int) - Results per pageoffset(int) - Starting position for pagination
Array of reservation objects with user, room, and bed information
SQL Query Structure
Code Example
contar_reservas
Count total reservations matching filter criteria.Database connection object
Same filter options as listar_reservas (estado, id_usuario, search)
Total count of matching reservations
Code Example
obtener_reserva
Get detailed information about a specific reservation, including companions.Database connection object
Reservation ID
Reservation object with user info, room details, bed numbers, and companions array. Returns false on error.
Code Example
Creating Reservations
crear_reserva
Create a new reservation with ‘pendiente’ status (for user-created reservations).Database connection object
Reservation data:
id_usuario(int) - User IDid_habitacion(int) - Room IDnumero_camas(int) - Number of beds to reserve (minimum 1)fecha_inicio(string) - Start date (YYYY-MM-DD)fecha_fin(string) - End date (YYYY-MM-DD)
Returns the new reservation ID on success, false on failure
Process Flow
- Validates that at least 1 bed is requested
- Finds available beds in the specified room
- Checks if sufficient beds are available
- Creates reservation with ‘pendiente’ status
- Creates bed assignments in reservas_camas table
- Updates bed status to ‘pendiente’
Code Example
crear_reserva_para_socio
Create a reservation for a member with automatic approval (admin function).Database connection object
Same as crear_reserva
Returns the new reservation ID on success, false on failure
Key Differences
- Uses transaction for data integrity
- Sets status to ‘reservada’ (not ‘pendiente’)
- Updates bed status to ‘reservada’ (not ‘pendiente’)
- Intended for admin-created reservations
Code Example
crear_reserva_especial_admin
Create a special event reservation without a specific user (admin only).Database connection object
Special reservation data:
id_habitacion(int) - Room IDnumero_camas(int) - Number of bedsfecha_inicio(string) - Start datefecha_fin(string) - End datemotivo(string) - Reason for special reservation
Returns reservation ID on success, false on failure
Code Example
The
motivo field is stored in the observaciones column. The id_usuario is set to NULL for special reservations.crear_reserva_todo_refugio
Reserve the entire refuge for a special event (all rooms, all beds).Database connection object
Full refuge reservation data:
fecha_inicio(string) - Start datefecha_fin(string) - End datemotivo(string) - Reason for full refuge reservationnumero_camas- Ignored; calculated automatically
True on success, false on failure
Special Behavior
- Counts total beds in the refuge
- Gets all available beds for the date range
- Validates that ALL beds are available - fails if even one bed is occupied
- Creates single reservation with
id_habitacion = NULL(indicates full refuge) - Assigns ALL beds to this reservation
- Prepends “TODO EL REFUGIO - ” to the motivo
Code Example
Updating Reservations
actualizar_estado_reserva
Update the status of a reservation and its associated beds.Database connection object
Reservation ID
New status: ‘pendiente’, ‘reservada’, or ‘cancelada’
True on success, false on failure
Status Mapping
'reservada'→ Beds set to ‘reservada’'pendiente'→ Beds set to ‘pendiente’'cancelada'→ Beds set to ‘libre’
Code Example
cancelar_reserva
Cancel a reservation (wrapper function).Database connection object
Reservation ID
True on success, false on failure
Code Example
editar_reserva_usuario
Edit a user’s reservation (pendiente status only).Database connection object
Reservation ID to edit
New start date
New end date
New room ID
New number of beds
True on success, throws Exception on failure
Process
- Updates reservation basic data
- Deletes old bed assignments
- Gets available beds in new room/dates (excluding current reservation)
- Creates new bed assignments
Code Example
editar_reserva_admin
Edit any reservation as admin (including full refuge reservations).Database connection object
Reservation ID to edit
New start date
New end date
New room ID (ignored for full refuge reservations)
New number of beds (ignored for full refuge reservations)
True on success, false on failure (uses transactions)
Special Logic
- Detects if reservation is for entire refuge (
id_habitacion IS NULL) - For full refuge: only updates dates
- For regular reservations: updates all fields and reassigns beds