{{-- Sweet Works ERP | app/Modules/Warehouse/Resources/Views/inventory/stock-overview.blade.php | v1.4 | 29/09/2026 --}} {{-- v1.4 — Ventana Estructural VB-2 (Punto 3): modal de detalle de bin agrega enlace "Ver Lote" hacia la nueva pantalla warehouse.lots.show — antes no había forma de llegar a esa pantalla desde la UI. --}} {{-- v1.3 — Ajustes de VB-1 (decisión de Israel, equivalente MMBE de SAP): la consulta muestra TODA la existencia desglosada por tipo por defecto (antes excluía no-disponibles por defecto) — el filtro de disponibilidad es para operaciones, no para consultar. Totales por tipo dinámicos ($summary['by_type'], uno por cada fila activa de warehouse_stock_types) en vez de las 2 tarjetas fijas unrestricted/blocked. --}} {{-- v1.2 — Ventana Estructural VB (Punto 2): filtro stock_type (texto, 5 opciones fijas) → stock_type_id (catálogo, @foreach($stockTypes)). Badges/colores ya no usan un mapa bootstrap-color duplicado — vienen de WarehouseStockType::color/name (catálogo). Badge "Reservado" del encabezado de producto reemplazado por "Calidad" (el stock_type reserved se elimina — ver CLAUDE.md). --}} {{-- v1.1 — Fase 1E-E6 P2 (regla A.5 + header audit): header corregido de "New-Unity ERP" a "Sweet Works ERP". Badge FIFO "Next" usaba $zoneCode !== 'SV' (código hardcodeado) — ahora usa $zoneData['is_quality_hold'] (bandera real del catálogo). --}} {{-- v1.0 — Stock Overview (MMBE equivalent). Vista jerarquica: Empresa > Almacen > Zona > Lote > Bin --}} @extends('layouts.vertical', ['pageTitle' => __('warehouse.stock-overview')]) @section('page-title')

{{ __('warehouse.stock-overview') }} {{ __('warehouse.mmbe-sub') }}

{{ __('warehouse.back-to-inventory') }}
@endsection @section('content') {{-- Filtro por producto --}}
{{-- Totales empresa — equivalente MMBE: un total por tipo de existencia + total general --}}
{{ __('warehouse.total-products-caps') }}
{{ $summary['total_products'] }}
@foreach($summary['by_type'] as $typeSummary)
{{ strtoupper($typeSummary['name']) }}
{{ number_format($typeSummary['qty'], 2) }}
@endforeach
{{ __('warehouse.total-value-caps') }}
${{ number_format($summary['total_value'], 2) }}
{{-- Vista jerarquica MMBE --}} @forelse($stockData as $productId => $productData)
{{-- Product Header --}}

{{ $productData['product_name'] }} {{ $productData['sku'] }}

{{-- Stock type badges --}} @if($productData['unrestricted'] > 0) {{ number_format($productData['unrestricted'], 2) }} {{ __('warehouse.available') }} @endif @if($productData['blocked'] > 0) {{ number_format($productData['blocked'], 2) }} {{ __('warehouse.blocked-lower') }} @endif @if($productData['quality'] > 0) {{ number_format($productData['quality'], 2) }} {{ __('warehouse.opt-quarantine') }} @endif ${{ number_format($productData['total_value'], 2) }} {{ __('warehouse.kardex') }}
{{-- Por almacen --}} @foreach($productData['warehouses'] as $whCode => $whData)
{{ $whCode }} {{ $whData['name'] }}
@if($whData['unrestricted'] > 0) {{ number_format($whData['unrestricted'], 2) }} {{ __('warehouse.avail-lower') }} @endif @if($whData['blocked'] > 0) {{ number_format($whData['blocked'], 2) }} {{ __('warehouse.blocked-lower') }} @endif ${{ number_format($whData['value'], 2) }}
{{-- Por zona --}} @foreach($whData['zones'] as $zoneCode => $zoneData)
{{ $zoneCode }} {{ $zoneData['zone_name'] }}
{{ number_format($zoneData['total_qty'], 2) }} {{ __('warehouse.units-lower') }}
{{-- Lotes --}} @foreach($zoneData['lots'] as $lot)
{{-- FIFO indicator --}} @if($loop->first && !($zoneData['is_quality_hold'] ?? false)) {{ __('warehouse.next') }} @else {{ $loop->iteration }} @endif {{-- Lot number --}} {{ $lot['lot_number'] }} {{-- Stock type — color y nombre vienen del catálogo warehouse_stock_types (regla 6) --}} {{ $lot['stock_type_name'] }} {{-- Bin --}} @if($lot['bin_id']) {{ $lot['bin_id'] }} {{ $lot['bin_code'] }} @endif {{-- Qty --}} {{ number_format($lot['quantity'], 2) }} {{-- Cost --}} ${{ number_format($lot['unit_cost'], 2) }} {{-- Entry date --}} {{ $lot['entry_date'] }} {{-- Block reason --}} @if($lot['block_reason']) @endif
@endforeach
@endforeach
@endforeach
@empty
{{ __('warehouse.no-stock-found') }}
@endforelse {{-- Modal detalle del bin/lote --}} @endsection @section('scripts') @endsection