24 Módulo de Compras en Laravel Migración y Relaciones para Gestión de Inventario Sistema deFarmacia

Duración: 13 min
Módulo: Módulo Compras Lección 1 de 1

Descripción

📦 Lección 24: Arquitectura y Migraciones del Módulo de Compras

En esta lección entramos oficialmente al corazón del negocio. Dejamos atrás las tablas independientes para construir el ecosistema de Compras, la base indispensable para abastecer el inventario y habilitar las ventas en las sucursales.

🏛️ 1. El Tridente de Tablas para la Gestión de Compras

Para procesar un abastecimiento de manera profesional y segura, no basta con una sola tabla. Hemos diseñado una arquitectura compuesta por tres entidades clave: [03:19]

  1. compras (Tabla Maestra): Almacena la cabecera del proceso (quién compra, a quién y dónde).
  2. compra_detalles (Tabla de Desglose): Registra cada producto específico que incluye la compra, sus cantidades y costos.
  3. compra_tmps (Tabla Temporal): Una tabla intermedia crucial que servirá como borrador dinámico mientras el usuario añade productos en el "carrito de compras" antes de consolidar la transacción definitiva.

🔗 2. Diseño Relacional de la Tabla Cabecera (compras)

La tabla de compras conecta múltiples actores del sistema mediante llaves foráneas (Foreign Keys). Su estructura en la migración incluye: [04:46]

  • sucursal_id: Define a qué sucursal física ingresará la mercadería.
  • proveedor_id: Identifica al proveedor que distribuye los medicamentos.
  • usuario_id: Rastrea qué usuario (empleado/administrador) ejecutó la orden.
  • fecha_compra: Campo de tipo date para el control de tiempos de adquisición.
  • total: Campo de tipo decimal(12, 2) con capacidad extendida para soportar montos altos según la moneda local. [07:08]
  • estado: Controla el flujo de la compra (ej. completado, pendiente, cancelado).
  • comprobante: Almacena el número de factura o documento físico de respaldo.
  • nota: Campo de tipo texto (nullable) para observaciones adicionales.

🛠️ 3. Comandos Artisan y Generación de Componentes

Generamos la estructura inicial utilizando comandos Artisan masivos para agilizar el backend: [01:46]

🐞 4. Depuración de Migraciones en Caliente

Durante la ejecución del comando php artisan migrate, corregimos un error común de sintaxis relacional: [10:25]

  • El Error: Discordancia en el nombre de la tabla de referencia (proveedores vs proveedors por pluralización automática de Laravel).
  • Solución Práctica: Modificamos explícitamente el constrained('proveedores') en el archivo de migración, eliminamos manualmente la tabla intermedia afectada desde el gestor de base de datos para no perder los datos previos de otras tablas con un migrate:fresh, y volvimos a correr el comando con éxito. [11:13]

💡 Conclusión de la Lección

Al estructurar la cabecera de compras y entender la necesidad de una tabla temporal (TMP), sentamos las bases para crear una interfaz de usuario fluida y un motor de inventario robusto que responderá perfectamente en auditorías de stock.