From 37e8f498be0dabfa18fda6926bde9ab7ca36fa32 Mon Sep 17 00:00:00 2001 From: BryamE Date: Wed, 7 Jan 2026 17:26:16 -0300 Subject: [PATCH] Creacion de index de ventas y mejora de vistas de catalogo, productos, y mejoras de ruteo a diferentes paginas, entre otros. --- app/Http/Controllers/ProductosController.php | 19 ++++ app/Http/Controllers/SaleController.php | 12 ++- resources/views/catalogo.blade.php | 8 +- resources/views/components/navbar.blade.php | 9 +- resources/views/dashboard.blade.php | 2 +- resources/views/productos/index.blade.php | 22 +++-- resources/views/productos/show.blade.php | 12 +-- resources/views/sales/index.blade.php | 96 +++++++++++++++++--- routes/web.php | 10 +- 9 files changed, 156 insertions(+), 34 deletions(-) diff --git a/app/Http/Controllers/ProductosController.php b/app/Http/Controllers/ProductosController.php index 5a06fae..7ba1847 100644 --- a/app/Http/Controllers/ProductosController.php +++ b/app/Http/Controllers/ProductosController.php @@ -16,6 +16,7 @@ class ProductosController extends Controller { // Recuperamos lo que el usuario escribió en el buscador (si escribió algo) $query = $request->input('search'); + $status = $request->input('stock_status'); // Construimos la consulta $products = Product::query() @@ -24,6 +25,24 @@ class ProductosController extends Controller return $q->where('name', 'like', "%{$query}%") ->orWhere('sku', 'like', "%{$query}%"); }) + ->when($status, function ($q) use ($status) { + if ($status === 'low') { + // Rojo: Menor o igual a la alerta + return $q->whereColumn('stock_quantity', '<', 'min_stock_alert') + ->where('type', '!=', 'service'); // Ignoramos servicios + } + elseif ($status === 'medium') { + // Amarillo: Mayor a alerta PERO menor o igual a alerta + 2 (margen pequeño) + return $q->whereColumn('stock_quantity', '>=', 'min_stock_alert') + ->whereRaw('stock_quantity <= (min_stock_alert + 1)') // Ajusta este "+ 5" según tu criterio de "amarillo" + ->where('type', '!=', 'service'); + } + elseif ($status === 'ok') { + // Verde: Stock saludable + return $q->whereRaw('stock_quantity > (min_stock_alert + 1)') + ->where('type', '!=', 'service'); + } + }) ->orderBy('stock_quantity', 'asc') // Ordenamos primero los que tienen poco stock (Alerta visual) ->paginate(10) // Paginamos de a 10 ->withQueryString(); // Mantiene el filtro de búsqueda al cambiar de página diff --git a/app/Http/Controllers/SaleController.php b/app/Http/Controllers/SaleController.php index 8e8a7f7..c7e0f79 100644 --- a/app/Http/Controllers/SaleController.php +++ b/app/Http/Controllers/SaleController.php @@ -7,17 +7,25 @@ use App\Models\Product; use App\Models\Sale; use App\Models\SaleDetail; use Illuminate\Support\Facades\DB; -// use App\Models\Client; class SaleController extends Controller { + public function index() + { + $sales = Sale::with('client') + ->orderBy('created_at', 'desc') + ->paginate(15); + + return view('sales.index', compact('sales')); + } + public function create() { // Buscamos productos que tengan stock mayor a 0 para mostrar en el selector $products = Product::where('stock_quantity', '>', 0)->get(); - $clients = \App\Models\Client::orderBy('name')->get(); + $clients = Client::orderBy('name')->get(); return view('sales.create', compact('products', 'clients')); } diff --git a/resources/views/catalogo.blade.php b/resources/views/catalogo.blade.php index 9ce1432..0d33c3b 100644 --- a/resources/views/catalogo.blade.php +++ b/resources/views/catalogo.blade.php @@ -10,8 +10,8 @@ @foreach ($products as $prod)
{{-- Imagen si existe --}} - @if (!empty($prod->img)) - {{ $prod->name }}image_path)) + {{ $prod->name }} @else
@@ -46,5 +46,9 @@ @else

No hay productos disponibles.

@endif + +
+ {{ $products->links() }} +
diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 61a108a..5bc8c95 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -2,7 +2,12 @@
- + @auth + + @endauth + @guest + + @endguest
@@ -43,7 +48,7 @@
  • - Ventas diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 4be0926..7063627 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -4,7 +4,7 @@ diff --git a/resources/views/productos/index.blade.php b/resources/views/productos/index.blade.php index 1eed7ef..bd97bde 100644 --- a/resources/views/productos/index.blade.php +++ b/resources/views/productos/index.blade.php @@ -9,8 +9,8 @@
    -
    -
    + +
    + +
    + +
    + @@ -27,7 +38,6 @@ + Nuevo Producto
    -
    @@ -58,8 +68,10 @@
    @if($product->type === 'service') - - @elseif($product->stock_quantity <= $product->min_stock_alert) + @elseif($product->stock_quantity < $product->min_stock_alert) {{ $product->stock_quantity }} + @elseif($product->stock_quantity <= $product->min_stock_alert+1) + {{ $product->stock_quantity }} @else {{ $product->stock_quantity }} @endif @@ -78,10 +90,8 @@
    -
    {{ $products->links() }}
    - \ No newline at end of file diff --git a/resources/views/productos/show.blade.php b/resources/views/productos/show.blade.php index 32ac6c8..2ed4516 100644 --- a/resources/views/productos/show.blade.php +++ b/resources/views/productos/show.blade.php @@ -10,27 +10,27 @@
    {{$product->name}}
    -
    Modelo
    +
    SKU
    {{$product->sku}}
    -
    Color
    +
    Descripcion
    {{$product->description}}
    -
    Rodado
    +
    Costo
    {{$product->cost}}
    -
    Tipo
    +
    Precio
    {{$product->price}}
    -
    Descripcion
    +
    Cantidad en Stock
    {{$product->stock_quantity}}
    -
    Precio
    +
    Tipo
    {{$product->type}}
    diff --git a/resources/views/sales/index.blade.php b/resources/views/sales/index.blade.php index 8174db7..a19df33 100644 --- a/resources/views/sales/index.blade.php +++ b/resources/views/sales/index.blade.php @@ -1,12 +1,84 @@ - - - - - - - Document - - -

    Gwssssssssssssssss

    - - \ No newline at end of file + + + + + +
    + +
    + +
    + + + + + Registrar Venta + +
    + + +
    + + + + + + + + + + + + + @forelse($sales as $sale) + + + + + + + + + @empty + + + + @endforelse + +
    # RefFechaClienteMétodo PagoTotalAcciones
    + #{{ str_pad($sale->id, 5, '0', STR_PAD_LEFT) }} + +
    {{ $sale->created_at->format('d/m/Y') }}
    +
    {{ $sale->created_at->format('H:i') }} hs
    +
    + @if($sale->client) +
    {{ $sale->client->name }}
    +
    Cli. Registrado
    + @else + Consumidor Final + @endif +
    + + {{ $sale->payment_method }} + + + ${{ number_format($sale->total, 2, ',', '.') }} + + +
    +
    + +

    No hay ventas registradas aún.

    +

    Realiza tu primera venta desde el botón verde.

    +
    +
    +
    + + +
    + {{ $sales->links() }} +
    + +
    \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ea79e8f..50590bc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,9 +45,13 @@ Route::middleware(['auth'])->group(function () { Route::resource('clients', ClientController::class); Route::get('/checker', [ProductosController::class, 'checker'])->name('productos.checker'); - //Route::get('/sales', [SaleController::class, 'index'])->name('sales.index'); - Route::get('/sales/create', [SaleController::class, 'create'])->name('sales.create'); - Route::get('/sales/store', [SaleController::class, 'store'])->name('sales.store'); + Route::controller(SaleController::class)->prefix('sales')->name('sales.')->group(function () { + Route::get('/', 'index')->name('index'); // Historial (Nueva) + Route::get('/create', 'create')->name('create'); // Formulario (Existente) + Route::post('/', 'store')->name('store'); // Guardar (CORREGIDO a POST) + Route::get('/{sale}', 'show')->name('show'); // Ver detalle de una venta (Opcional futura) + }); + });