@extends('layouts.app') @section('content')

Reportes Gerenciales

Análisis detallado de rendimiento

@php $tabs = [ 'resumen' => ['label' => '📊 Resumen', 'color' => '#0d6efd'], 'diario' => ['label' => '📅 Por día', 'color' => '#0d6efd'], 'utilidad' => ['label' => '💰 Utilidad', 'color' => '#198754'], 'pagos' => ['label' => '💳 Métodos de pago','color' => '#6f42c1'], 'mesas' => ['label' => '🪑 Por mesa/área', 'color' => '#fd7e14'], 'horas' => ['label' => '⏰ Por hora', 'color' => '#0dcaf0'], 'comprobantes' => ['label' => '🧾 Comprobantes', 'color' => '#6610f2'], 'gastos' => ['label' => '💸 Gastos', 'color' => '#dc3545'], 'personal' => ['label' => '👤 Personal', 'color' => '#d63384'], ]; @endphp
@foreach($tabs as $key => $t) {{ $t['label'] }} @endforeach
@if($tipo === 'resumen')
Ventas
{{ number_format($kpiVentas) }}
Ingresos
{{ $currency }}{{ number_format($kpiIngresos, 2) }}
Ticket Promedio
{{ $currency }}{{ number_format($kpiTicketProm, 2) }}
Propinas
{{ $currency }}{{ number_format($kpiPropinas, 2) }}
Ingresos por Categoría
Top 5: Platos Estrella
@forelse($topProducts as $prod) @empty @endforelse
ProductoCant.Ingresos
{{ $prod->name }}{{ $prod->qty }}{{ $currency }}{{ number_format($prod->revenue, 2) }}
Sin datos
Ojo: Platos Menos Vendidos
@forelse($worstProducts as $prod) @empty @endforelse
ProductoCant. Vendida
{{ $prod->name }}{{ $prod->qty }}
Sin datos
@elseif($tipo === 'diario')
Ventas por día
@forelse($ventasDiarias as $d) @empty @endforelse @if($ventasDiarias->count()) @endif
FechaN° VentasIngresos
{{ \Carbon\Carbon::parse($d->dia)->format('d/m/Y') }}{{ $d->num_ventas }}{{ $currency }}{{ number_format($d->ingresos, 2) }}
Sin datos
TOTAL{{ $ventasDiarias->sum('num_ventas') }}{{ $currency }}{{ number_format($ventasDiarias->sum('ingresos'), 2) }}
@elseif($tipo === 'utilidad') @php $ti=$tc=$tu=0; @endphp
Utilidad (Ingresos − Costo de productos)
@forelse($utilidad as $d) @php $ti+=$d->ingresos; $tc+=$d->costos; $u=$d->ingresos-$d->costos; $tu+=$u; $m = $d->ingresos>0 ? round($u/$d->ingresos*100,1) : 0; $color = $u >= 0 ? 'success' : 'danger'; @endphp @empty @endforelse @if($utilidad->count()) @php $tm = $ti>0?round($tu/$ti*100,1):0; @endphp @endif
FechaIngresosCostosUtilidadMargen
{{ \Carbon\Carbon::parse($d->dia)->format('d/m/Y') }} {{ $currency }}{{ number_format($d->ingresos, 2) }} -{{ $currency }}{{ number_format($d->costos, 2) }} {{ $currency }}{{ number_format($u, 2) }} {{ $m }}%
Sin datos
TOTAL{{ $currency }}{{ number_format($ti,2) }}-{{ $currency }}{{ number_format($tc,2) }}{{ $currency }}{{ number_format($tu,2) }}{{ $tm }}%
@elseif($tipo === 'pagos')
Métodos de pago
@forelse($pagos as $p) @empty @endforelse
MétodoN° VentasTotal
{{ $p->payment_method ?? 'Sin especificar' }}{{ $p->num_ventas }}{{ $currency }}{{ number_format($p->total, 2) }}
Sin datos
@elseif($tipo === 'mesas')
Ventas por mesa
@forelse($mesas as $m) @empty @endforelse
MesaÁreaN° VentasTotal
{{ $m->mesa }}{{ $m->area }}{{ $m->num_ventas }}{{ $currency }}{{ number_format($m->total, 2) }}
Sin datos (ventas de mesón, no de mesas específicas)
@elseif($tipo === 'horas')
Ventas por hora del día — identifica tus horas pico
@elseif($tipo === 'comprobantes')
Comprobantes emitidos
@forelse($comprobantes as $c) @php $colorEstado = match($c->sunat_status) { 'ACCEPTED' => 'success', 'OBSERVED' => 'warning', 'PENDING' => 'secondary', 'ERROR', 'REJECTED' => 'danger', default => 'secondary', }; @endphp @empty @endforelse
TipoEstado SUNATCantidadTotal
{{ $c->document_type }} {{ $c->sunat_status ?? 'N/A' }} {{ $c->cantidad }} {{ $currency }}{{ number_format($c->total, 2) }}
Sin datos
@elseif($tipo === 'gastos') @php $utilidadNeta = $totalIngresos - $totalGastos; @endphp
Ingresos
{{ $currency }}{{ number_format($totalIngresos, 2) }}
Gastos
{{ $currency }}{{ number_format($totalGastos, 2) }}
Utilidad Neta
{{ $currency }}{{ number_format($utilidadNeta, 2) }}
Detalle de gastos
@forelse($gastos as $g) @empty @endforelse
FechaDescripciónRegistrado porMonto
{{ $g->created_at->format('d/m/Y') }}{{ $g->description }}{{ $g->user->name ?? '—' }}-{{ $currency }}{{ number_format($g->amount, 2) }}
Sin gastos registrados
@elseif($tipo === 'personal')
Ranking de ventas por personal
@forelse($salesByWaiter as $w) @empty @endforelse
PersonalN° VentasTotal Vendido
{{ $w->name }}{{ $w->orders_count }}{{ $currency }}{{ number_format($w->total_sales, 2) }}
Sin datos
@endif
@endsection