← Volver a TableManagerController

🚪 Gestión de Apertura y Cierre

Endpoints para la apertura de nuevas mesas y cancelación de mesas existentes

Descripción General

Los endpoints de Gestión de Apertura y Cierre proporcionan las operaciones fundamentales para administrar el ciclo de vida de las mesas en el sistema RestMaster. Estos endpoints manejan la apertura de nuevas mesas con validación completa de recursos y la cancelación de mesas existentes con limpieza de datos.

🎯 Características de la Gestión de Apertura y Cierre

  • Validación completa: Verificación de camareros, clientes y repartidores
  • Control de estados: Gestión automática de estados de mesa
  • Configuración de propinas: Gestión de porcentajes de propina
  • Limpieza de datos: Eliminación completa de datos asociados
  • Integración con facturación: Control de documentos asociados
  • Validación de disponibilidad: Verificación de que la mesa esté disponible
  • Asignación automática: Asignación de relaciones y comandas

Endpoints Disponibles

POST /api/TableManager/open

Abre una nueva mesa o activa una existente en el salón especificado. Este endpoint valida que la mesa esté disponible y que el camarero, cliente y repartidor (si se proporcionan) existan. Crea una nueva cabecera de mesa (MesasCabecera) y establece el estado de la mesa como 'En Servicio'.
Body (JSON):
{ "salon": 1, "mesa": 1, "camarero": 1, "pax": 4, "tarifa": 1, "cliente": 123, "repartidor": null, "pedido": null, "porcentajePropina": 10.0 }
Headers:
  • initialCatalog (string, requerido): Nombre de la base de datos
  • userID (string, opcional): ID de usuario de la base de datos
  • password (string, opcional): Contraseña de la base de datos
200 OK
Mesa abierta exitosamente
{ "cabecera": { "salon": 1.0, "mesa": 1.0, "relacion": 1.0, "camarero": 1.0, "pax": 4.0, "tarifa": 1.0, "fecha": "2024-01-15T00:00:00", "hora": "2024-01-15T10:30:00", "dividida": "N", "tipoDocumento": null, "serie": null, "factura": null, "cliente": 123.0, "repartidor": null, "pedido": null, "propina": "S", "porcentajePropina": 10.0 }, "estado": { "salon": 1.0, "mesa": 1.0, "bloqueada": "N", "estado": "E", "repartidor": null, "camarero": 1.0, "nombreAsignado": "Juan Pérez", "subestado": null }, "lineas": [] }
400 Bad Request
Error de validación o mesa no disponible
{ "message": "La mesa 1 en el salón 1 no está disponible para abrir" }

DELETE /api/TableManager/{salon}/{mesa}

Cancela una mesa y elimina todos sus datos asociados. Este endpoint elimina todas las líneas de mesa (MesasLinea) asociadas a la mesa, elimina la cabecera de mesa (MesasCabecera) y establece el estado de la mesa como 'Disponible' en MesasEstado.
Parámetros de ruta:
  • salon (double, requerido): ID del salón
  • mesa (double, requerido): ID de la mesa
Headers:
  • initialCatalog (string, requerido): Nombre de la base de datos
  • userID (string, opcional): ID de usuario de la base de datos
  • password (string, opcional): Contraseña de la base de datos
200 OK
Mesa cancelada exitosamente
{ "message": "Mesa cancelada correctamente" }
404 Not Found
Mesa no encontrada
{ "message": "No se encontró la mesa 1 en el salón 1 para cancelar", "details": { "salon": 1.0, "mesa": 1.0 } }
400 Bad Request
Mesa no puede ser cancelada por su estado actual
{ "message": "La mesa 1 en el salón 1 no puede ser cancelada porque está facturada" }

Modelo de Datos - TableOpenRequest

Propiedades del modelo TableOpenRequest:
  • Salon (double): ID del salón donde se abrirá la mesa
  • Mesa (double): ID de la mesa a abrir
  • Camarero (double?): ID del camarero asignado
  • Pax (double?): Número de personas en la mesa
  • Tarifa (double?): ID de la tarifa aplicable
  • Cliente (double?): ID del cliente (opcional)
  • Repartidor (double?): ID del repartidor (para servicio a domicilio)
  • Pedido (double?): Número de pedido (para delivery)
  • PorcentajePropina (double?): Porcentaje de propina aplicable

Modelo de Datos - TableDto

Propiedades del modelo TableDto:
  • Cabecera (MesasCabecera): Información de la cabecera de mesa
  • Estado (MesasEstado): Estado actual de la mesa
  • Lineas (List<MesasLinea>): Lista de líneas de pedidos

📋 Propiedades de MesasCabecera:

  • Salon (double): ID del salón
  • Mesa (double): ID de la mesa
  • Relacion (double): ID de relación de la comanda
  • Camarero (double?): ID del camarero asignado
  • Pax (double?): Número de personas
  • Tarifa (double?): ID de la tarifa
  • Fecha (DateTime?): Fecha de apertura
  • Hora (DateTime?): Hora de apertura
  • Dividida (string): Indica si la mesa está dividida
  • TipoDocumento (string): Tipo de documento (F=Factura, T=Ticket)
  • Serie (string): Serie del documento
  • Factura (double?): Número de factura
  • Cliente (double?): ID del cliente
  • Repartidor (double?): ID del repartidor
  • Pedido (double?): Número de pedido
  • Propina (string): Indica si aplica propina (S/N)
  • PorcentajePropina (double?): Porcentaje de propina

📋 Propiedades de MesasEstado:

  • Salon (double): ID del salón
  • Mesa (double): ID de la mesa
  • Bloqueada (string): Indica si está bloqueada (S/N)
  • Estado (string): Estado actual (D=Disponible, E=En Servicio, F=Facturada)
  • Repartidor (double?): ID del repartidor asignado
  • Camarero (double?): ID del camarero asignado
  • NombreAsignado (string): Nombre del camarero asignado
  • Subestado (string): Subestado adicional

Servicio Utilizado

ITableManagerService - Servicio para la gestión de mesas
  • OpenTable(): Abre una nueva mesa o activa una existente
  • CancelTable(): Cancela una mesa y elimina todos sus datos

Casos de Uso Comunes

🎯 Escenarios de Aplicación

  • Apertura de mesa para nuevos clientes: Crear nueva comanda en el POS
  • Reactivación de mesa: Reabrir mesa previamente cerrada
  • Inicio de servicio: Comenzar atención para nuevo grupo
  • Cancelación por salida de clientes: Limpiar mesa después de que los clientes se van
  • Limpieza de datos: Eliminar información asociada a mesa
  • Reset de mesa: Preparar mesa para nuevos clientes
  • Gestión de errores: Cancelar mesa con datos incorrectos

⚠️ Consideraciones de Seguridad

  • Validar que el usuario tenga permisos para abrir/cancelar mesas
  • Verificar que la mesa esté disponible antes de abrirla
  • Controlar que no se cancelen mesas facturadas sin autorización
  • Validar existencia de camareros, clientes y repartidores
  • Implementar auditoría de operaciones de apertura/cierre
  • Controlar acceso a mesas de otros camareros

📝 Consideraciones Técnicas

  • Transacciones: Operaciones atómicas para mantener consistencia
  • Estados de mesa: Control automático de estados (D, E, F)
  • Relaciones: Asignación automática de IDs de relación
  • Timestamps: Registro automático de fecha y hora
  • Validaciones: Verificación completa antes de operaciones
  • Limpieza: Eliminación completa de datos asociados
  • Integración: Control de documentos de facturación