30 Confirmar Orden de Compra en Laravel 13: Transacciones y Guardado en la BD Sistema de Farmacia
Duración: 14 minDescripción
🚀 Lección 30: Procesamiento de Transacciones y Consolidación de la Orden de Compra en la Base de Datos
En este capítulo cerramos el círculo del flujo de compras en nuestro sistema de farmacia. Pasamos de tener un carrito dinámico y volátil en la interfaz a consolidar y guardar formalmente toda esa información en las tablas definitivas del servidor, aplicando los más altos estándares de seguridad en el manejo de datos.
🎯 El Objetivo Central
El propósito de esta lección es programar el método encargado de procesar el formulario del carrito para crear la orden de compra oficial. Aprendemos a tomar la información dispersa del frente de la aplicación, validar su integridad, distribuirla en múltiples tablas de la base de datos y limpiar el espacio temporal para dejar el sistema listo para una nueva transacción.
🛡️ El Uso de Transacciones en la Base de Datos
Uno de los puntos más importantes de este video es la introducción de las transacciones en los modelos de base de datos. Cuando un proceso afecta a múltiples tablas al mismo tiempo, el riesgo de que algo falle a mitad de camino y deje información incompleta es alto.
🔑 Asegurando la Integridad: Implementamos el mecanismo que garantiza que si la cabecera de la compra se registra, pero el detalle falla por cualquier motivo, el sistema borra automáticamente lo que alcanzó a escribir (operación de reversión) para evitar datos huérfanos o corrompidos. Solo si todo el proceso es exitoso, la transacción se confirma de forma definitiva en el servidor.
🏢 El Impacto y Distribución en las Tablas del Sistema
Al hacer clic en el botón de confirmación, la lógica del backend toma el control y distribuye la información de la siguiente manera:
📦 Tabla de Compras Principales: Se genera un nuevo registro que guarda los datos generales de la orden, como la sucursal de destino, el proveedor seleccionado, el usuario que realiza la operación, la fecha exacta y el monto total. El estado de este registro se marca inicialmente como "Pendiente", ya que la mercadería aún no llega físicamente. Campos como el número de comprobante o notas adicionales se guardan vacíos temporalmente.
📋 Tabla de Detalles de Compra: El sistema recorre uno a uno los productos que estaban en el carrito y crea sus registros enlazados a la compra principal. Aquí se almacena el ID del medicamento, la cantidad solicitada, el costo pactado y las proyecciones de precio de venta y ganancia. El número de lote se deja vacío debido a que se asignará únicamente cuando el producto real ingrese al almacén.
🧹 Limpieza Automática: Una vez que la información está segura en sus nuevas tablas, el controlador ejecuta una orden para vaciar por completo la tabla de compras temporales vinculada al usuario, dejando el carrito impecable para el siguiente uso.
🔗 Sincronización y Relaciones de los Modelos
Para mostrar el listado de las órdenes de compra de forma elegante en la interfaz de usuario, conectamos los cables en el backend definiendo las relaciones estructurales entre nuestros modelos:
🤝 Relación de Pertenencia: Le enseñamos al sistema que una compra pertenece de forma obligatoria a una sucursal, a un proveedor específico y a un usuario del personal de la farmacia.
🔄 Relación Inversa: Configuramos los modelos de sucursales, proveedores y usuarios para que reconozcan que pueden estar vinculados a múltiples registros de compra a lo largo del tiempo.
🎨 Ajustes en la Vista: Corregimos la tabla de visualización principal para que, en lugar de mostrar códigos numéricos confusos, renderice de manera limpia los nombres reales de los proveedores, las sucursales y el empleado encargado del pedido.
Al finalizar este capítulo, el sistema ya es capaz de procesar, asegurar y listar órdenes de compra completas con un comportamiento robusto y profesional. ¡Todo queda listo para desarrollar las pantallas de visualización detallada, edición y eliminación de pedidos en los siguientes videos!
Lecciones
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️