@extends('layout.main') @section('content') @php $money = function ($v) { return '$' . number_format((float) $v, 2); }; $delta = function ($now, $before) { return $before > 0 ? round(100 * ($now - $before) / $before, 1) : null; }; $m = $data['month']; $dm = $delta($m['net'], $m['prev']); $dt = $delta($data['today']['total'], $data['yesterday']['total']); $r = $data['reservations']; $goal = $data['goal']; $isAdmin = Auth::user()->isAdminOrOwner(); $firstName = explode(' ', trim(Auth::user()->name))[0]; // Resumen del día: lo arma el software con reglas fijas (sin IA). $summary = []; $summary[] = $data['today']['count'] ? 'Hoy llevas ' . $money($data['today']['total']) . ' en ' . $data['today']['count'] . ($data['today']['count'] == 1 ? ' venta' : ' ventas') . ($dt !== null ? ', ' . abs($dt) . '% ' . ($dt >= 0 ? 'más' : 'menos') . ' que ayer.' : '.') : 'Hoy todavía no hay ventas registradas' . ($data['yesterday']['count'] ? ' (ayer: ' . $money($data['yesterday']['total']) . ').' : '.'); if ($dm !== null) $summary[] = 'En ' . $m['label'] . ' vas ' . abs($dm) . '% ' . ($dm >= 0 ? 'por encima' : 'por debajo') . ' del mes pasado a esta misma fecha.'; if ($goal['amount']) $summary[] = 'Llevas el ' . $goal['pct'] . '% de tu meta; a esta fecha lo esperado es ' . $goal['expected_pct'] . '%.'; $summary[] = count($data['attention']) ? 'Hay ' . count($data['attention']) . ' ' . (count($data['attention']) == 1 ? 'cosa' : 'cosas') . ' que revisar.' : 'Todo está en orden.'; $maxStore = collect($data['stores'])->max('total') ?: 1; $maxTop = collect($data['top'])->max('total') ?: 1; $payTotal = array_sum($data['payments']); $brand = \App\Services\Brand::settings(); @endphp
@include('reservation._alerts')
{{-- ============ HERO ============ --}}
En vivo · {{ now()->format('d/m/Y') }} @if($warehouses->count() > 1) @elseif($store) {{ $store }} @endif

Hola, {{ $firstName }}

{!! implode(' ', $summary) !!}

Ventas netas de {{ $m['label'] }}{{ $store ? ' · ' . $store : '' }}
{{ $money($m['net']) }}
@if($dm !== null) {{ abs($dm) }}% vs. mismo día del mes pasado @endif {{ $m['count'] }} ventas · ticket {{ $money($m['ticket']) }}
@if($goal['amount'])
{{ $goal['pct'] }}%de la meta
{{ $money($goal['amount']) }}
@if($isAdmin)@endif @elseif($isAdmin) @endif
Abrir POS @if(!\App\Reservation::missingSchema()) Nueva reserva@endif Cierre de caja
Ventas de los últimos 6 meses · mueve el mouse
{{-- ============ KPIs ============ --}}
Ventas de hoy
{{ $money($data['today']['total']) }}
@if($dt !== null){{ $dt >= 0 ? '+' : '−' }}{{ abs($dt) }}% vs. ayer ({{ $money($data['yesterday']['total']) }})@else Ayer: {{ $money($data['yesterday']['total']) }}@endif
Ticket promedio
{{ $money($m['ticket']) }}
{{ $m['count'] }} ventas en {{ $m['label'] }}
Por cobrar en reservas
@if($r)
{{ $money($r['balance']) }}
{{ $r['active'] }} reservas activas @if($r['overdue'])· {{ $r['overdue'] }} vencidas@endif
@else
—
Reservas no instalado
@endif
Flujo de {{ $m['label'] }}
Entra{{ $money($data['cash']['in']) }}
Sale{{ $money($data['cash']['out']) }}
@php $flowMax = max($data['cash']['in'], $data['cash']['out'], 1); @endphp
Cobros de ventas y abonos vs. pagos a proveedores y gastos
{{-- ============ Gráfico + atención ============ --}}

Ventas de los últimos 30 días

Pasa el mouse sobre el gráfico · línea punteada = 30 días anteriores
ActualAnterior

Necesita tu atención

Lo importante de hoy
@if(count($data['attention'])) @else
Todo en ordenNo hay pendientes urgentes.
@endif
{{-- ============ Tiendas, cobros, top ============ --}}

{{ $data['stores'] ? 'Ventas por tienda' : 'Reservas' }}

{{ $data['stores'] ? ucfirst($m['label']) . ', hasta hoy' : 'Del activo al paquete entregado' }}
@if($data['stores'])
    @foreach($data['stores'] as $s)
  • {{ $s['name'] }}{{ $money($s['total']) }}
    {{ $s['count'] }} ventas
  • @endforeach
@elseif($r) @include('dashboard._pipeline', ['r' => $r]) @endif

Formas de cobro

Ventas y abonos de {{ $m['label'] }}
Total cobrado{{ $money($payTotal) }}
    @foreach(['efectivo' => 'Efectivo', 'transferencia' => 'Transferencia', 'tarjeta' => 'Tarjeta', 'otros' => 'Otros'] as $k => $label)
  • {{ $label }}{{ $payTotal > 0 ? round(100 * $data['payments'][$k] / $payTotal) : 0 }}%
  • @endforeach

Lo más vendido

Top 5 de {{ $m['label'] }} por monto
@if($data['top'])
    @foreach($data['top'] as $i => $p)
  1. {{ $i + 1 }}
    {{ $p['name'] }}{{ $money($p['total']) }}
    {{ (float) $p['qty'] }} unidades
  2. @endforeach
@else

Todavía no hay ventas este mes.

@endif
{{-- ============ Reservas + actividad ============ --}}
@if($r && $data['stores'])

Reservas

Del activo al paquete entregado
Ver todas
@include('dashboard._pipeline', ['r' => $r])
@endif

Datos del sistema en tiempo real · ventas sin borradores del ambiente SRI activo · Volver al Inicio (radar) · Ver tablero clásico

@if($isAdmin) @endif @endsection