@extends('admin.reportes.pdf.base') @section('title', 'Reporte de Usuarios') @section('content')
Período: {{ date('d/m/Y', strtotime($fechaInicio)) }} - {{ date('d/m/Y', strtotime($fechaFin)) }}
@if($tipoUsuario)
Tipo de Usuario: {{ ucfirst($tipoUsuario) }}
@endif

{{ $totalUsuarios }}

Total Usuarios

{{ $usuariosActivos }}

Usuarios Activos

{{ $simboloMoneda }}{{ number_format($gastoTotal, 2) }}

Gasto Total

Lista de Usuarios

@forelse($usuarios as $usuario) @empty @endforelse @if($usuarios->count() > 0) @endif
Nombre Email Tipo Fecha Registro Reservas Total Gastado Estado
{{ $usuario->name }} {{ $usuario->email }} @if($usuario->tipo_usuario == 'admin') Administrador @elseif($usuario->tipo_usuario == 'propietario') Propietario @else Cliente @endif {{ date('d/m/Y', strtotime($usuario->created_at)) }} {{ $usuario->reservas_count ?? 0 }} {{ $simboloMoneda }}{{ number_format($usuario->reservas_sum_precio_total ?? 0, 2) }} @if($usuario->email_verified_at) Verificado @else Sin Verificar @endif
No se encontraron usuarios para el período seleccionado
TOTALES {{ $usuarios->sum('reservas_count') }} {{ $simboloMoneda }}{{ number_format($usuarios->sum('reservas_sum_precio_total'), 2) }} -
@if($usuarios->count() > 0)

Análisis por Tipo de Usuario

@php $usuariosPorTipo = $usuarios->groupBy('tipo_usuario'); $totalUsuariosReporte = $usuarios->count(); @endphp @foreach($usuariosPorTipo as $tipo => $usuariosTipo) @php $cantidadUsuarios = $usuariosTipo->count(); $totalReservas = $usuariosTipo->sum('reservas_count'); $totalGastos = $usuariosTipo->sum('reservas_sum_precio_total'); $promedioReservas = $cantidadUsuarios > 0 ? $totalReservas / $cantidadUsuarios : 0; $promedioGastos = $cantidadUsuarios > 0 ? $totalGastos / $cantidadUsuarios : 0; $porcentaje = $totalUsuariosReporte > 0 ? ($cantidadUsuarios / $totalUsuariosReporte) * 100 : 0; @endphp @endforeach
Tipo de Usuario Cantidad Porcentaje Reservas Promedio Gasto Promedio
@if($tipo == 'admin') Administrador @elseif($tipo == 'propietario') Propietario @else Cliente @endif {{ $cantidadUsuarios }} {{ number_format($porcentaje, 1) }}% {{ number_format($promedioReservas, 1) }} {{ $simboloMoneda }}{{ number_format($promedioGastos, 2) }}

Top 10 Usuarios por Actividad

@foreach($usuarios->sortByDesc('reservas_count')->take(10) as $index => $usuario) @php $promedioGasto = ($usuario->reservas_count ?? 0) > 0 ? ($usuario->reservas_sum_precio_total ?? 0) / $usuario->reservas_count : 0; @endphp @endforeach
Posición Usuario Email Reservas Total Gastado Promedio por Reserva
{{ $index + 1 }} {{ $usuario->name }} {{ $usuario->email }} {{ $usuario->reservas_count ?? 0 }} {{ $simboloMoneda }}{{ number_format($usuario->reservas_sum_precio_total ?? 0, 2) }} {{ $simboloMoneda }}{{ number_format($promedioGasto, 2) }}

Registros por Mes

@php $usuariosPorMes = $usuarios->groupBy(function($usuario) { return date('Y-m', strtotime($usuario->created_at)); })->sortKeys(); @endphp @foreach($usuariosPorMes as $mes => $usuariosMes) @php $cantidadUsuarios = $usuariosMes->count(); $usuariosVerificados = $usuariosMes->whereNotNull('email_verified_at')->count(); $tasaVerificacion = $cantidadUsuarios > 0 ? ($usuariosVerificados / $cantidadUsuarios) * 100 : 0; @endphp @endforeach
Mes Nuevos Usuarios Usuarios Verificados Tasa de Verificación
{{ \Carbon\Carbon::createFromFormat('Y-m', $mes)->format('F Y') }} {{ $cantidadUsuarios }} {{ $usuariosVerificados }} {{ number_format($tasaVerificacion, 1) }}%
TOTALES {{ $usuarios->count() }} {{ $usuarios->whereNotNull('email_verified_at')->count() }} {{ $usuarios->count() > 0 ? number_format(($usuarios->whereNotNull('email_verified_at')->count() / $usuarios->count()) * 100, 1) : '0.0' }}%

Análisis de Actividad

@php $usuarioConMasReservas = $usuarios->sortByDesc('reservas_count')->first(); $usuarioConMasGastos = $usuarios->sortByDesc('reservas_sum_precio_total')->first(); $promedioReservasPorUsuario = $usuarios->count() > 0 ? $usuarios->sum('reservas_count') / $usuarios->count() : 0; $promedioGastosPorUsuario = $usuarios->count() > 0 ? $usuarios->sum('reservas_sum_precio_total') / $usuarios->count() : 0; $usuariosConReservas = $usuarios->where('reservas_count', '>', 0)->count(); $tasaActividad = $usuarios->count() > 0 ? ($usuariosConReservas / $usuarios->count()) * 100 : 0; $usuariosVerificados = $usuarios->whereNotNull('email_verified_at')->count(); $tasaVerificacionGeneral = $usuarios->count() > 0 ? ($usuariosVerificados / $usuarios->count()) * 100 : 0; @endphp
Usuario más activo: {{ $usuarioConMasReservas->name ?? 'N/A' }} ({{ $usuarioConMasReservas->reservas_count ?? 0 }} reservas)
Usuario con mayor gasto: {{ $usuarioConMasGastos->name ?? 'N/A' }} ({{ $simboloMoneda }}{{ number_format($usuarioConMasGastos->reservas_sum_precio_total ?? 0, 2) }})
Promedio de reservas por usuario: {{ number_format($promedioReservasPorUsuario, 1) }}
Promedio de gastos por usuario: {{ $simboloMoneda }}{{ number_format($promedioGastosPorUsuario, 2) }}
Usuarios con actividad: {{ $usuariosConReservas }} de {{ $usuarios->count() }} ({{ number_format($tasaActividad, 1) }}%)
Tasa de verificación general: {{ number_format($tasaVerificacionGeneral, 1) }}%

Segmentación de Usuarios por Actividad

@php $usuariosAlta = $usuarios->where('reservas_count', '>=', 10); $usuariosMedia = $usuarios->where('reservas_count', '>=', 3)->where('reservas_count', '<', 10); $usuariosBaja = $usuarios->where('reservas_count', '>=', 1)->where('reservas_count', '<', 3); $usuariosInactivos = $usuarios->where('reservas_count', 0); @endphp
Segmento Criterio Cantidad Porcentaje Ingresos Generados
Alta Actividad 10+ reservas {{ $usuariosAlta->count() }} {{ $usuarios->count() > 0 ? number_format(($usuariosAlta->count() / $usuarios->count()) * 100, 1) : '0.0' }}% {{ $simboloMoneda }}{{ number_format($usuariosAlta->sum('reservas_sum_precio_total'), 2) }}
Media Actividad 3-9 reservas {{ $usuariosMedia->count() }} {{ $usuarios->count() > 0 ? number_format(($usuariosMedia->count() / $usuarios->count()) * 100, 1) : '0.0' }}% {{ $simboloMoneda }}{{ number_format($usuariosMedia->sum('reservas_sum_precio_total'), 2) }}
Baja Actividad 1-2 reservas {{ $usuariosBaja->count() }} {{ $usuarios->count() > 0 ? number_format(($usuariosBaja->count() / $usuarios->count()) * 100, 1) : '0.0' }}% {{ $simboloMoneda }}{{ number_format($usuariosBaja->sum('reservas_sum_precio_total'), 2) }}
Inactivos 0 reservas {{ $usuariosInactivos->count() }} {{ $usuarios->count() > 0 ? number_format(($usuariosInactivos->count() / $usuarios->count()) * 100, 1) : '0.0' }}% {{ $simboloMoneda }}0.00
@endif @endsection