40 ✅ Finalizando la Venta: Guardando Detalles de Orden y Actualizando el Stock de Productos

Duración: 17 min
Módulo: 💳 Carrito, Checkout y Pasarela de Pagos 34-42 Lección 7 de 9

Descripción

Lección 40: ✅ Finalizando la Venta: Guardando Detalles de Orden y Actualizando el Stock de Productos

Este capítulo es crucial, ya que consolida todas las acciones de la venta, garantizando la integridad de los datos mediante el uso de transacciones de base de datos.

🛡️ Garantía de Integridad con Transacciones

Para asegurar que todas las operaciones se completen o ninguna lo haga, se implementa una transacción de base de datos (DB Transaction) [01:15]:

  • Inicio de Transacción 🚀: Se utiliza DB::beginTransaction() al inicio de la lógica de la función gracias del PayPalController [01:51].
  • Finalización con Commit 👍: Si las múltiples consultas se ejecutan sin errores, se usa DB::commit() para hacer permanentes todos los cambios en la base de datos [08:43].
  • Rollback en Caso de Error ⏪: Si ocurre cualquier fallo durante el proceso (ej. un error de tecleo o una excepción), se ejecuta DB::rollBack() para revertir todos los cambios realizados, manteniendo la base de datos limpia y consistente [02:23].

✍️ Registro y Procesamiento de la Venta

Dentro de la transacción, se ejecutan en orden las cuatro acciones finales del checkout [02:49]:

  1. Creación de la Orden Principal 🧾: Se insertan los datos principales en la tabla órdenes (ID de usuario, total, divisa, estados y la dirección de envío capturada de la sesión) [03:08].
  2. Registro del Detalle de la Orden 🛒: Se itera sobre los productos del carrito (obtenidos con Carritos::where('usuario_ID', $usuario_ID)) y se registra cada uno en la tabla detalle_órdenes, guardando el precio de venta fijo y la cantidad comprada [03:45].
  3. Descuento del Stock ➖: Por cada producto registrado en el detalle, se busca el producto en la tabla productos y se actualiza su campo stock descontando la cantidad vendida [07:34].
  4. Limpieza del Carrito 🗑️: Finalmente, se eliminan todos los productos del carrito del usuario, dejando el carrito vacío para futuras compras [08:16].

🎉 Notificación al Cliente

  • Ruta de Agradecimiento: Se crea una nueva ruta y vista llamada orden_completado para redirigir al usuario tras el commit exitoso [09:15].
  • Mensaje Final: El usuario es redirigido con un mensaje de éxito: "Pago realizado con éxito gracias por su compra" [10:39].