← Volver a MesasLineaController

➕ Gestión de Líneas

Endpoints para la gestión CRUD completa de líneas de mesas del restaurante

Descripción General

Los endpoints de Gestión de Líneas proporcionan las operaciones fundamentales para administrar las líneas de mesas del restaurante. Estos endpoints manejan la creación, actualización y eliminación de pedidos, incluyendo cálculos automáticos de precios, IVA, validación de artículos e integración con cabeceras de mesas.

🎯 Características de la Gestión de Líneas

  • Creación completa: Crear líneas con todos los datos necesarios
  • Creación simplificada: Crear líneas con cálculos automáticos
  • Actualización controlada: Modificar líneas existentes
  • Eliminación segura: Eliminar líneas con validación
  • Identificación compuesta: Cada línea se identifica por 5 parámetros
  • Cálculos automáticos: Precios, IVA y totales calculados automáticamente
  • Validación de artículos: Verificar que el artículo existe
  • Validación de cabeceras: Verificar que existe cabecera de mesa
  • Gestión de invitaciones: Aplicar descuentos por invitación
  • Manejo de errores: Respuestas apropiadas para casos de error
  • Logging estructurado: Registro de errores y eventos
  • Validación de datos: Verificación de integridad de la información
  • Respuestas tipadas: Uso de ServiceResult para manejo de resultados

Endpoints Disponibles

POST /Working/MesasLinea/Add

Crea una nueva línea de mesa con todos los datos proporcionados. Este endpoint permite crear un pedido completo con información detallada del artículo, precios, IVA, etc.
Body (JSON):
{ "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0, "camarero": 2, "articulo": "ART001", "orden": 1, "descripcion": "Hamburguesa Clásica", "cantidad": 2, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 25.00, "totalIva": 30.26, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" }
Parámetros de consulta:
  • 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
201 Created
Línea creada exitosamente
{ "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0, "camarero": 2, "articulo": "ART001", "orden": 1, "descripcion": "Hamburguesa Clásica", "cantidad": 2, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 25.00, "totalIva": 30.26, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" }
400 Bad Request
Error al crear la línea
{ "message": "The 'initialCatalog' parameter is required and cannot be empty." }
400 Bad Request
Error de validación
{ "message": "Salon and Mesa must be positive values." }
400 Bad Request
No existe cabecera
{ "message": "No header exists for the specified room and table." }
500 Internal Server Error
Error interno del servidor

POST /Working/MesasLinea/AddSimplified

Crea una nueva línea simplificada con cálculos automáticos. Este endpoint permite crear un pedido básico automáticamente calculando precios, IVA y totales basándose en el artículo.
Parámetros de consulta:
  • salon (double, requerido): ID del salón
  • mesa (double, requerido): ID de la mesa
  • comanda (double, opcional): ID de la comanda
  • relacion (double, opcional): ID de relación
  • camarero (double, opcional): ID del camarero
  • articulo (string, requerido): Código del artículo
  • cantidad (double, requerido): Cantidad del artículo
  • invitacion (string, opcional): Indica si es invitación (S/N)
  • 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
201 Created
Línea simplificada creada exitosamente
{ "salon": 1, "mesa": 5, "comanda": 0, "relacion": 1, "relacionSubarticulo": 0, "camarero": 0, "articulo": "ART001", "orden": 0, "descripcion": "Hamburguesa Clásica", "cantidad": 2, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 25.00, "totalIva": 30.26, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" }
400 Bad Request
Artículo no existe
{ "message": "The specified article does not exist." }
500 Internal Server Error
Error interno del servidor

PUT /Working/MesasLinea/Update/{salon}/{mesa}/{comanda}/{relacion}/{relacionSubarticulo}

Actualiza una línea existente por salón, mesa, comanda, relación y subartículo. Este endpoint permite modificar la información de un pedido ya creado.
Parámetros de ruta:
  • salon (double, requerido): ID del salón
  • mesa (double, requerido): ID de la mesa
  • comanda (double, requerido): ID de la comanda
  • relacion (double, requerido): ID de relación
  • relacionSubarticulo (double, requerido): ID de relación del subartículo
Body (JSON):
{ "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0, "camarero": 2, "articulo": "ART001", "orden": 1, "descripcion": "Hamburguesa Clásica", "cantidad": 3, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 37.50, "totalIva": 45.39, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" }
Parámetros de consulta:
  • 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
Línea actualizada exitosamente
{ "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0, "camarero": 2, "articulo": "ART001", "orden": 1, "descripcion": "Hamburguesa Clásica", "cantidad": 3, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 37.50, "totalIva": 45.39, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" }
404 Not Found
No se encontró la línea para actualizar
{ "message": "Cannot update: Table line not found with order 1 for table 5 in room 1 (relation: 1, sub-article relation: 0)", "details": { "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0 } }
500 Internal Server Error
Error interno del servidor

DELETE /Working/MesasLinea/Delete/{salon}/{mesa}/{comanda}/{relacion}/{relacionSubarticulo}

Elimina una línea específica por salón, mesa, comanda, relación y subartículo. Este endpoint permite eliminar un pedido, útil para cancelar pedidos o corregir errores.
Parámetros de ruta:
  • salon (double, requerido): ID del salón
  • mesa (double, requerido): ID de la mesa
  • comanda (double, requerido): ID de la comanda
  • relacion (double, requerido): ID de relación
  • relacionSubarticulo (double, requerido): ID de relación del subartículo
Parámetros de consulta:
  • 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
Línea eliminada exitosamente
{ "message": "Table line deleted successfully.", "mesasLinea": { "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0, "camarero": 2, "articulo": "ART001", "orden": 1, "descripcion": "Hamburguesa Clásica", "cantidad": 2, "precio": 12.50, "precioIva": 15.13, "iva": 21.0, "total": 25.00, "totalIva": 30.26, "familia": "HAMBURGUESAS", "gramos": 200, "invitacion": "N", "cantidadComanda": 0, "impresoraComanda": "COCINA", "anulada": "N", "pedido": 0, "agrupar": "N", "subarticulo": "" } }
404 Not Found
No se encontró la línea para eliminar
{ "message": "Cannot delete: Table line not found with order 1 for table 5 in room 1 (relation: 1, sub-article relation: 0)", "details": { "salon": 1, "mesa": 5, "comanda": 1, "relacion": 1, "relacionSubarticulo": 0 } }
500 Internal Server Error
Error interno del servidor

Cálculos Automáticos - Creación Simplificada

📝 Proceso de Cálculo en AddSimplified

  1. Validación de artículo: Verificar que el artículo existe
  2. Obtención de tipo IVA: Obtener el tipo de IVA del artículo
  3. Cálculo de relación: Máximo relación + 1 (autogenerado)
  4. Cálculo de precios:
    • Precio = Tarifa1 del artículo
    • PrecioIva = Precio * (1 + IVA / 100)
  5. Cálculo de totales:
    • Total = Cantidad * Precio
    • TotalIva = Cantidad * PrecioIva
  6. Gestión de invitaciones: Si invitacion = "S", Total = 0 y TotalIva = 0
  7. Asignación de valores por defecto:
    • Comanda = 0 (si es null)
    • Camarero = 0 (si es null)
    • Orden = 0
    • RelacionSubarticulo = 0
    • Invitacion = "N" (si es null)
    • Anulada = "N"
    • Pedido = 0
    • Agrupar = "N"
    • Subarticulo = ""

Servicios Utilizados

Servicios principales para la gestión de líneas:
  • IMesasLineaService - Servicio principal de líneas de mesas
    • Add(): Crea una nueva línea completa
    • GetMaxRelacionBySalonMesa(): Obtiene el máximo relación para una mesa
    • Update(): Actualiza una línea existente
    • Delete(): Elimina una línea específica
  • IArticulosService - Servicio de artículos
    • GetArticuloById(): Obtiene información del artículo
  • ITipoIvaService - Servicio de tipos de IVA
    • GetTipoIva(): Obtiene información del tipo de IVA
  • IMesasCabeceraService - Servicio de cabeceras
    • GetBySalonMesa(): Verifica que existe cabecera

🔍 Casos de Uso Comunes

📋 Escenarios de Aplicación

  • Tomar pedido completo: Crear línea con todos los datos
  • Pedido rápido: Crear pedido simplificado con cálculos automáticos
  • Modificar cantidad: Actualizar cantidad de un pedido
  • Cambiar artículo: Actualizar artículo de un pedido
  • Cancelar pedido: Eliminar línea de pedido
  • Aplicar invitación: Marcar pedido como invitación
  • Gestión de descuentos: Aplicar descuentos por invitación
  • Cálculo automático de precios: Calcular precios con IVA
  • Validación de artículos: Verificar que el artículo existe
  • Integración con cabeceras: Verificar que existe cabecera
  • Asignación de camareros: Asignar camarero al pedido
  • Control de impresoras: Configurar impresora por artículo
  • Gestión de subartículos: Manejar pedidos con subartículos
  • Auditoría de pedidos: Revisar pedidos para reportes
  • Integración con POS: Conectar con sistemas de punto de venta

🔒 Consideraciones de Seguridad

⚠️ Protección de Datos de Negocio

  • Auditoría completa: Todas las operaciones deben ser auditadas
  • Validación de permisos: Solo usuarios autorizados pueden gestionar líneas
  • Validación de precios: Verificar que los precios sean correctos
  • Validación de artículos: Verificar que el artículo existe y está activo
  • Validación de cabeceras: Verificar que existe cabecera válida
  • Control de invitaciones: Validar permisos para aplicar invitaciones
  • Prevención de fraudes: Controlar modificaciones de precios
  • Integridad de datos: Verificar que los datos sean consistentes
  • Control de acceso: Restringir acceso según roles de usuario
  • Logs de transacciones: Mantener registro completo de todas las operaciones
  • Validación de entrada: Verificar que los datos de entrada sean válidos
  • Backup de datos: Mantener respaldo antes de operaciones críticas
  • Control de modificaciones: Registrar quién modifica qué pedidos
  • Validación de cálculos: Verificar que los cálculos sean correctos