From 68534a760345fdac8fa81a51504f9b0c2aee6a85 Mon Sep 17 00:00:00 2001 From: GianellaDelMestre <146126967+GianellaDelMestre@users.noreply.github.com> Date: Mon, 8 Dec 2025 23:57:02 -0300 Subject: [PATCH] salecontroller en proceso creativo --- app/Http/Controllers/SaleController.php | 72 +++++++++++++++++++++++++ resources/views/sales/create.blade.php | 72 +++++++++++++++++++++++++ routes/web.php | 9 ++++ 3 files changed, 153 insertions(+) create mode 100644 app/Http/Controllers/SaleController.php create mode 100644 resources/views/sales/create.blade.php diff --git a/app/Http/Controllers/SaleController.php b/app/Http/Controllers/SaleController.php new file mode 100644 index 0000000..b96847f --- /dev/null +++ b/app/Http/Controllers/SaleController.php @@ -0,0 +1,72 @@ +', 0)->get(); + + // Retornamos la vista (que crearemos en el paso 4) pasando los productos + return view('sales.create', compact('products')); + } + + public function store(Request $request) + { + $request->validate([ + 'payment_method' => 'required|string', + 'items' => 'required|array', + 'items.*.product_id' => 'required|exists:products,id', + 'items.*.quantity' => 'required|integer|min:1', + ]); + + try { + DB::transaction(function () use ($request) { + $totalVenta = 0; + foreach ($request->items as $item) { + $producto = Product::find($item['product_id']); + $totalVenta += $producto->price * $item['quantity']; + + if ($producto->stock < $item['quantity']) { + throw new \Exception("No hay suficiente stock de " . $producto->name); + } + } + + // raro arreglar + $sale = Sale::create([ + 'user_id' => auth()->id(), // El empleado logueado + 'total' => $totalVenta, + 'payment_method' => $request->payment_method, + ]); + + foreach ($request->items as $item) { + $producto = Product::find($item['product_id']); + + SaleDetail::create([ + 'sale_id' => $sale->id, + 'product_id' => $producto->id, + 'quantity' => $item['quantity'], + 'price' => $producto->price, + ]); + $producto->decrement('stock', $item['quantity']); + } + }); + + // 5. REDIRECCIÓN DE ÉXITO + // Redirigimos al usuario con un mensaje flash [cite: 668] + return redirect()->route('sales.create')->with('success', '¡Venta registrada correctamente!'); + + } catch (\Exception $e) { + // Si algo falló (ej: falta stock), volvemos atrás con el error + return back()->with('error', 'Error en la venta: ' . $e->getMessage()); + } + } +} diff --git a/resources/views/sales/create.blade.php b/resources/views/sales/create.blade.php new file mode 100644 index 0000000..8af8f72 --- /dev/null +++ b/resources/views/sales/create.blade.php @@ -0,0 +1,72 @@ +@extends('layouts.app') + +@section('title', 'Nueva Venta') + +@section('main') +