diff --git a/app/Http/Controllers/SaleController.php b/app/Http/Controllers/SaleController.php index 6b3600e..b961420 100644 --- a/app/Http/Controllers/SaleController.php +++ b/app/Http/Controllers/SaleController.php @@ -41,7 +41,8 @@ class SaleController extends Controller ]); try { - DB::transaction(function () use ($request) { + // Variable para guardar el objeto venta y usarlo fuera del closure + $sale = DB::transaction(function () use ($request) { $totalSale = 0; foreach ($request->items as $item) { @@ -54,7 +55,7 @@ class SaleController extends Controller } //cabecera - $sale = Sale::create([ + $newSale = Sale::create([ //'user_id' => auth()->id(), //empleado logueado 'client_id' => $request->client_id, 'total' => $totalSale, @@ -65,7 +66,7 @@ class SaleController extends Controller $product = Product::find($item['product_id']); SaleDetail::create([ - 'sale_id' => $sale->id, + 'sale_id' => $newSale->id, 'product_id' => $product->id, 'quantity' => $item['quantity'], 'price' => $product->price, @@ -74,15 +75,27 @@ class SaleController extends Controller $product->stock_quantity = $nuevoStock; $product->save(); } + return $newSale; // Retornamos la venta creada fuera de la transacción }); - // 5. REDIRECCIÓN DE ÉXITO - // Redirigimos al usuario con un mensaje flash [cite: 668] - return redirect()->route('sales.create')->with('success', '¡Venta registrada correctamente!'); + // 4. REDIRECCIÓN AL DETALLE (FACTURA) + // Usamos la variable $sale que nos devolvió la transacción + return redirect()->route('sales.show', $sale)->with('success', '¡Venta registrada exitosamente!'); } 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()); } } + + /** + * Muestra el detalle de una venta específica. + */ + public function show(Sale $sale) + { + // Cargamos la venta con el cliente y los detalles + $sale->load(['client', 'details.product']); + + return view('sales.show', compact('sale')); + } } diff --git a/resources/views/sales/index.blade.php b/resources/views/sales/index.blade.php index a19df33..99e0e22 100644 --- a/resources/views/sales/index.blade.php +++ b/resources/views/sales/index.blade.php @@ -56,9 +56,7 @@ ${{ number_format($sale->total, 2, ',', '.') }} - + Ver Detalle @empty diff --git a/resources/views/sales/show.blade.php b/resources/views/sales/show.blade.php new file mode 100644 index 0000000..9271fa9 --- /dev/null +++ b/resources/views/sales/show.blade.php @@ -0,0 +1,149 @@ + + + + + + +
+ + + Volver al Historial + + + +
+ + +
+ + +
+
+ +
+
+ +
+ + CICLES LAUCK + +
+

+ Av. Francisco Ramírez 1389
+ Paraná, Entre Ríos
+ Tel: 343 422-0103 +

+
+ +
+

Comprobante de Venta

+
#{{ str_pad($sale->id, 5, '0', STR_PAD_LEFT) }}
+
+ Fecha: {{ $sale->created_at->format('d/m/Y') }}
+ Hora: {{ $sale->created_at->format('H:i') }} hs +
+
+
+ + +
+
+

Facturado A:

+ @if($sale->client) +

{{ $sale->client->name }}

+

{{ $sale->client->phone }}

+

{{ $sale->client->email }}

+ @if($sale->client->address) +

{{ $sale->client->address }}

+ @endif + @else +

Consumidor Final

+

Venta anónima de mostrador

+ @endif +
+ +
+

Método de Pago:

+ + {{ $sale->payment_method }} + +
+
+ + +
+ + + + + + + + + + + @foreach($sale->details as $detail) + + + + + + + @endforeach + + + + + + + +
ProductoPrecio Unit.Cant.Subtotal
+
{{ $detail->product->name }}
+
{{ $detail->product->sku }}
+
+ ${{ number_format($detail->price, 2, ',', '.') }} + + {{ $detail->quantity }} + + ${{ number_format($detail->price * $detail->quantity, 2, ',', '.') }} +
Total a Pagar + ${{ number_format($sale->total, 2, ',', '.') }} +
+
+ + +
+

¡Gracias por tu compra!

+

Documento no valido como factura.

+
+ +
+ + + + +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 5fc113e..74304f5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -43,13 +43,7 @@ Route::middleware(['auth'])->group(function () { Route::resource('productos', ProductosController::class)->parameters([ 'productos' => 'product' ]); - - Route::controller(SaleController::class)->prefix('sales')->name('sales.')->group(function () { - Route::get('/', 'index')->name('index'); - Route::get('/create', 'create')->name('create'); - Route::post('/', 'store')->name('store'); - Route::get('/{sale}', 'show')->name('show'); - }); + Route::resource('sales', SaleController::class)->only(['index', 'create', 'store', 'show']); });