@extends('layouts.app') @section('title','Dashboard Gerencial') @section('page-title','Dashboard Gerencial') @section('content') {{-- ===== BANNER BIENVENIDA ===== --}}
{{-- Izquierda: saludo --}}

Bienvenido al Panel Ejecutivo

{{ auth()->user()->name }}

{{ auth()->user()->cargo ?? 'Gerencia General' }}
{{-- Centro: empresa --}}
Sabores MAYBELL S.A.C.
Sistema ERP Integral
Módulos activos: 9  ·  Versión 2026
{{-- Derecha: fecha y hora --}}
Fecha y hora local
Zona horaria: America/Lima
{{-- Línea inferior: período activo --}}
Período analizado: {{ \Carbon\Carbon::parse($desde)->format('d/m/Y') }} al {{ \Carbon\Carbon::parse($hasta)->format('d/m/Y') }}
Datos en tiempo real desde la base de datos
{{-- Filtro período --}}
Período: {{ \Carbon\Carbon::parse($desde)->format('d/m/Y') }} al {{ \Carbon\Carbon::parse($hasta)->format('d/m/Y') }}
{{-- Alertas --}} @foreach($alertas as [$color, $msg])
{{ $msg }}
@endforeach {{-- ===== BANDEJA DE APROBACIONES ===== --}} @php $totalPendientes = $pendientes['oc']->count() + $pendientes['os']->count() + $pendientes['req']->count() + $pendientes['cert']->count() + $pendientes['permisos']->count() + $pendientes['planillas']->count(); @endphp

Bandeja de Firmas y Aprobaciones @if($totalPendientes > 0) {{ $totalPendientes }} @endif

@if($totalPendientes === 0)

No hay documentos pendientes de aprobación. ¡Todo al día!
@else {{-- Tabs --}}
{{-- OC --}} @if($pendientes['oc']->count())
@foreach($pendientes['oc'] as $oc) @endforeach
N° OCProveedorFechaTotalEstado
{{ $oc->numero }} {{ $oc->proveedor?->razon_social ?? '—' }} {{ $oc->fecha_pedido?->format('d/m/Y') ?? '—' }} S/ {{ number_format($oc->total,2) }} @php $estadoLabel = ['pend_jefe'=>'Pend. Jefe','pend_adm'=>'Pend. Adm','pend_gerencia'=>'Pend. Gerencia']; @endphp {{ $estadoLabel[$oc->estado] ?? $oc->estado }} Ver / Firmar @if($oc->estado === 'pend_gerencia')
@csrf
@endif
@endif {{-- OS --}} @if($pendientes['os']->count())
@foreach($pendientes['os'] as $os) @endforeach
N° OSProveedorFechaTotalEstado
{{ $os->numero }} {{ $os->proveedor?->razon_social ?? '—' }} {{ $os->fecha_pedido?->format('d/m/Y') ?? '—' }} S/ {{ number_format($os->total,2) }} {{ $estadoLabel[$os->estado] ?? $os->estado }} Ver / Firmar @if($os->estado === 'pend_gerencia')
@csrf
@endif
@endif {{-- Requerimientos --}} @if($pendientes['req']->count())
@foreach($pendientes['req'] as $req) @endforeach
CódigoSolicitanteFechaMotivo
{{ $req->codigo }} {{ $req->solicitante?->name ?? '—' }} {{ $req->created_at->format('d/m/Y') }} {{ Str::limit($req->motivo ?? '—', 50) }} Ver / Aprobar
@endif {{-- Certificados de Calidad --}} @if($pendientes['cert']->count())
@foreach($pendientes['cert'] as $cert) @endforeach
N° Cert.FrutaLoteInspectorFecha
{{ $cert->numero }} {{ $cert->fruta?->nombre ?? '—' }} {{ $cert->lote?->numero ?? '—' }} {{ $cert->firma_inspector_nombre }} {{ $cert->created_at->format('d/m/Y') }} Firmar Gerencia
@endif {{-- Permisos --}} @if($pendientes['permisos']->count())
@foreach($pendientes['permisos'] as $perm) @endforeach
CódigoEmpleadoTipoFechasDías
{{ $perm->codigo }} {{ $perm->empleado?->nombre_completo ?? '—' }} {{ \App\Models\PermisoLicencia::$TIPOS[$perm->tipo] ?? $perm->tipo }} {{ $perm->fecha_inicio->format('d/m') }} al {{ $perm->fecha_fin->format('d/m/Y') }} {{ $perm->dias_solicitados }} Ver
@csrf
@csrf
@endif {{-- Planillas --}} @if($pendientes['planillas']->count())
@foreach($pendientes['planillas'] as $plan) @endforeach
CódigoPeríodoTipoTotal NetoEstado
{{ $plan->codigo }} {{ $plan->fecha_inicio->format('d/m/Y') }} — {{ $plan->fecha_fin->format('d/m/Y') }} {{ ucfirst($plan->tipo) }} S/ {{ number_format($plan->total_neto,2) }} Revisada Ver
@csrf
@endif
{{-- /tab-content --}} @endif
{{-- KPIs --}}

S/ {{ number_format($kpis['ventas_pen'],0) }}

@if($kpis['ventas_usd'] > 0) + USD {{ number_format($kpis['ventas_usd'],0) }} @endif

Ventas del período

{{ number_format($kpis['kg_producidos'],0) }} kg

Pulpa producida ({{ $kpis['ordenes_prod'] }} OPs)

S/ {{ number_format($kpis['compras_pen'],0) }}

Compras registradas

S/ {{ number_format($kpis['por_pagar'],0) }}

Por pagar (cuentas pendientes)

{{ $kpis['exportaciones'] }}

Exportaciones

{{ $kpis['cotizaciones'] }}

Cotizaciones

{{-- Gráfico ventas/compras/producción por mes --}}

Ventas vs Compras — {{ $anio }}

Kg Producidos / mes

{{-- Gastos insumos por OP --}}

Gastos de Insumos por Orden de Producción

Basado en movimientos de inventario vinculados a cada OP
@forelse($gastosPorOP as $row) @php $ventaPen = $row->ped_total ?? 0; $costo = $row->costo_insumos ?? 0; $margen = $ventaPen > 0 ? round(($ventaPen - $costo) / $ventaPen * 100, 1) : null; @endphp @empty @endforelse
OPFechaFruta Kg pulpa PedidoCliente Venta Costo insumos S/. Margen
{{ $row->op_codigo }} {{ \Carbon\Carbon::parse($row->op_fecha)->format('d/m/Y') }} {{ $row->fruta }} {{ $row->kg_pulpa_obtenida ? number_format($row->kg_pulpa_obtenida,0).' kg' : '—' }} @if($row->ped_numero) {{ $row->ped_numero }} @else @endif {{ $row->cliente ?? '—' }} @if($row->ped_total) {{ $row->ped_moneda }} {{ number_format($row->ped_total,2) }} @else — @endif S/ {{ number_format($costo,2) }}
{{ $row->tipos_insumo }} tipo(s)
@if($margen !== null) {{ $margen }}% @else @endif
Sin datos. Los gastos aparecen cuando los movimientos de inventario están vinculados a una OP (referencia_tipo = 'orden_produccion').
{{-- Desglose insumos por OP (top 5) --}} @if($insumosDesglose->count())

Desglose de Insumos — Top 5 OPs del período

@foreach($insumosDesglose as $opCodigo => $items)
{{ $opCodigo }}
@foreach($items as $ins) @endforeach
InsumoCant.S/.
{{ $ins->insumo }} {{ number_format($ins->cantidad,2) }} {{ number_format($ins->costo,2) }}
Total: {{ number_format($items->sum('costo'),2) }}
@endforeach
@endif {{-- Gastos por Contenedor --}} @if($gastosPorContenedor->count())

Gastos de Insumos por Contenedor / Exportación

@foreach($gastosPorContenedor as $row) @endforeach
ExportaciónContenedorB/L DestinoClienteOP vinculada Kg Venta Insumos S/. Estado
{{ $row->exp_numero }} {{ $row->numero_contenedor ?? '—' }} {{ $row->numero_bl ?? '—' }} {{ $row->pais_destino ?? '—' }} {{ $row->cliente }} {{ $row->op_codigo }} {{ $row->kg_pulpa_obtenida ? number_format($row->kg_pulpa_obtenida,0).' kg' : '—' }} {{ $row->moneda }} {{ number_format($row->ped_venta,2) }} S/ {{ number_format($row->costo_insumos ?? 0,2) }} {{ \App\Models\Exportacion::$ESTADOS[$row->exp_estado] ?? $row->exp_estado }}
@else

Los gastos por contenedor aparecen cuando una Exportación → Pedido → Orden de Producción tiene movimientos de inventario vinculados a esa OP. Vincule la OP al crear el pedido comercial.

@endif @endsection @push('scripts') @endpush