This commit is contained in:
Laucha1312
2026-06-04 15:20:26 -03:00
parent fdd0fef3f0
commit cc049c6cb6
64 changed files with 8914 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tus QRs para el Evento - OnAPB</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 0; background-color: #f4f4f4; }
.container { max-width: 600px; margin: 20px auto; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
.header { background: linear-gradient(135deg, #198754 0%, #157347 100%); color: #fff; padding: 30px 20px; text-align: center; }
.header h1 { margin: 0; font-size: 24px; text-transform: uppercase; }
.content { padding: 30px; }
.event-card { background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 10px; padding: 20px; margin: 20px 0; text-align: center; }
.event-name { font-size: 20px; font-weight: bold; color: #198754; margin-bottom: 5px; }
.event-details { color: #666; font-size: 14px; }
.qr-count { font-size: 50px; font-weight: bold; color: #198754; margin: 15px 0; }
.footer { background: #222; color: #888; text-align: center; padding: 20px; font-size: 12px; }
.btn { display: inline-block; padding: 12px 25px; background: #198754; color: #fff; text-decoration: none; border-radius: 6px; font-weight: bold; margin-top: 10px; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>TUS ENTRADAS LISTAS</h1>
</div>
<div class="content">
<p>¡Hola, <strong>{{ $user->nombre }}</strong>!</p>
<p>Se han generado exitosamente tus QRs para el siguiente evento:</p>
<div class="event-card">
<div class="event-name">{{ $evento->nombre_evento }}</div>
<div class="event-details">
Fecha: {{ \Carbon\Carbon::parse($evento->fecha_evento)->format('d/m/Y') }}<br>
Sede: {{ $evento->sede ?? 'A confirmar' }}
</div>
<div class="qr-count">{{ $cantidad }}</div>
<p>QRs Generados</p>
</div>
<p>Ya podés verlos y descargarlos desde la sección "Mis QRs" en tu panel personal:</p>
<center>
<a href="{{ route('panel.mis.qrs', ['evento' => $evento->id_evento]) }}" class="btn">VER MIS ENTRADAS</a>
</center>
<p style="margin-top:20px; font-size: 14px; color: #777;">Recordá presentar estos QRs en la entrada del estadio para su escaneo.</p>
</div>
<div class="footer">
&copy; {{ date('Y') }} OnAPB - Asociación Paranaense de Básquetbol.<br>
Este es un correo automático, por favor no lo respondas.
</div>
</div>
</body>
</html>
@@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Reporte Semanal ONAPB</title>
<style>
body { font-family: Arial, sans-serif; background: #f5f5f5; margin: 0; padding: 20px; color: #333; }
.container { max-width: 700px; margin: 0 auto; background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.15); }
.header { background: #b00000; color: white; padding: 28px 32px; }
.header h1 { margin: 0; font-size: 24px; }
.header p { margin: 6px 0 0; opacity: 0.85; font-size: 14px; }
.section { padding: 20px 32px; border-bottom: 1px solid #eee; }
.section h2 { font-size: 16px; color: #b00000; margin: 0 0 14px; border-left: 4px solid #b00000; padding-left: 10px; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th { background: #f0f0f0; text-align: left; padding: 8px 10px; font-size: 12px; text-transform: uppercase; color: #666; }
td { padding: 8px 10px; border-bottom: 1px solid #f0f0f0; }
tr:last-child td { border-bottom: none; }
.stat-row { display: flex; gap: 16px; flex-wrap: wrap; }
.stat-box { flex: 1; min-width: 120px; background: #f9f9f9; border-radius: 6px; padding: 14px 16px; text-align: center; border: 1px solid #eee; }
.stat-box .num { font-size: 28px; font-weight: bold; color: #b00000; }
.stat-box .lbl { font-size: 12px; color: #666; margin-top: 4px; }
.footer { padding: 16px 32px; font-size: 12px; color: #999; text-align: center; }
.empty { color: #aaa; font-style: italic; padding: 10px 0; font-size: 13px; }
.badge { display: inline-block; padding: 2px 8px; border-radius: 12px; font-size: 11px; font-weight: bold; }
.badge-win { background: #e8f5e9; color: #2e7d32; }
.badge-lose { background: #ffebee; color: #c62828; }
.badge-draw { background: #fff3e0; color: #e65100; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>📊 Reporte Semanal ONAPB</h1>
<p>Semana del {{ $semanaAnteriorDesde->format('d/m/Y') }} al {{ $semanaAnteriorHasta->format('d/m/Y') }}</p>
</div>
{{-- Estadísticas rápidas --}}
<div class="section">
<h2>Resumen</h2>
<div class="stat-row">
<div class="stat-box">
<div class="num">{{ $jugados->count() }}</div>
<div class="lbl">Partidos jugados</div>
</div>
<div class="stat-box">
<div class="num">{{ $proximos->count() }}</div>
<div class="lbl">Próximos partidos</div>
</div>
<div class="stat-box">
<div class="num">{{ $qrsSemana }}</div>
<div class="lbl">QRs generados</div>
</div>
<div class="stat-box">
<div class="num">{{ $qrsValidados }}</div>
<div class="lbl">QRs validados</div>
</div>
</div>
</div>
{{-- Resultados de la semana --}}
<div class="section">
<h2>Resultados de la Semana</h2>
@if($jugados->isEmpty())
<p class="empty">No hubo partidos con resultado cargado esta semana.</p>
@else
<table>
<thead>
<tr>
<th>Fecha</th>
<th>Local</th>
<th>Resultado</th>
<th>Visitante</th>
</tr>
</thead>
<tbody>
@foreach($jugados as $e)
@php
$ml = $e->marcador_local;
$mv = $e->marcador_visitante;
$badgeLocal = $ml > $mv ? 'badge-win' : ($ml < $mv ? 'badge-lose' : 'badge-draw');
$badgeVisitante= $mv > $ml ? 'badge-win' : ($mv < $ml ? 'badge-lose' : 'badge-draw');
@endphp
<tr>
<td>{{ $e->fecha_evento->format('d/m') }}</td>
<td><span class="badge {{ $badgeLocal }}">{{ $e->equipoLocal->club->nombre ?? '?' }}</span></td>
<td style="text-align:center; font-weight:bold;">{{ $ml }} {{ $mv }}</td>
<td><span class="badge {{ $badgeVisitante }}">{{ $e->equipoVisitante->club->nombre ?? '?' }}</span></td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
{{-- Próximos partidos --}}
<div class="section">
<h2>Próximos Partidos (7 días)</h2>
@if($proximos->isEmpty())
<p class="empty">No hay partidos programados para los próximos 7 días.</p>
@else
<table>
<thead>
<tr><th>Fecha</th><th>Hora</th><th>Partido</th><th>Sede</th></tr>
</thead>
<tbody>
@foreach($proximos as $e)
<tr>
<td>{{ $e->fecha_evento->format('d/m') }}</td>
<td>{{ $e->hora_inicio ? \Carbon\Carbon::parse($e->hora_inicio)->format('H:i') : '—' }}</td>
<td>{{ $e->equipoLocal->club->nombre ?? '?' }} vs {{ $e->equipoVisitante->club->nombre ?? '?' }}</td>
<td>{{ $e->sede ?: '—' }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
{{-- Top goleadores --}}
<div class="section">
<h2>🏆 Top Goleadores</h2>
@if($topGoleadores->isEmpty())
<p class="empty">Sin estadísticas de puntos cargadas aún.</p>
@else
<table>
<thead>
<tr><th>#</th><th>Jugador</th><th>Pts totales</th><th>Partidos</th></tr>
</thead>
<tbody>
@foreach($topGoleadores as $i => $g)
<tr>
<td>{{ $i + 1 }}</td>
<td>{{ $g->apellido }}, {{ $g->nombre }}</td>
<td><strong>{{ $g->total_puntos }}</strong></td>
<td>{{ $g->partidos }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
<div class="footer">
Este reporte fue generado automáticamente por el sistema OnAPB el {{ now()->format('d/m/Y H:i') }}.<br>
<a href="https://onapb.com/admin" style="color:#b00000;">Ir al panel de administración</a>
</div>
</div>
</body>
</html>
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recuperar Contraseña - OnAPB</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 0; background-color: #f4f4f4; }
.container { max-width: 600px; margin: 20px auto; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
.header { background: linear-gradient(135deg, #cc0000 0%, #aa0000 100%); color: #fff; padding: 40px 20px; text-align: center; }
.header h1 { margin: 0; font-size: 28px; text-transform: uppercase; letter-spacing: 2px; }
.content { padding: 30px; }
.content h2 { color: #cc0000; margin-top: 0; }
.footer { background: #222; color: #888; text-align: center; padding: 20px; font-size: 12px; }
.btn { display: inline-block; padding: 12px 25px; background: #cc0000; color: #fff; text-decoration: none; border-radius: 6px; font-weight: bold; margin-top: 20px; text-transform: uppercase; }
.info-box { background: #fff8f8; padding: 15px; border-radius: 8px; border: 1px solid #ffcccc; margin: 20px 0; color: #660000; font-size: 14px; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>ONAPB</h1>
<p>Recuperación de Acceso</p>
</div>
<div class="content">
<h2>Hola, {{ $user->nombre }}</h2>
<p>Hemos recibido una solicitud para restablecer la contraseña de tu cuenta en <strong>OnAPB</strong>.</p>
<p>Para continuar con el proceso, hacé clic en el siguiente botón:</p>
<center>
<a href="{{ url('/reset-password/' . $token) }}" class="btn">RESTABLECER CONTRASEÑA</a>
</center>
<div class="info-box">
<strong>Importante:</strong> Este enlace vencerá en 1 hora por razones de seguridad. Si vos no solicitaste este cambio, podés ignorar este correo; tu contraseña seguirá siendo la misma.
</div>
<p>Si tenés problemas con el botón, copiá y pegá el siguiente enlace en tu navegador:</p>
<p style="word-break: break-all; font-size: 12px; color: #666;">
{{ url('/reset-password/' . $token) }}
</p>
</div>
<div class="footer">
&copy; {{ date('Y') }} OnAPB - Asociación Paranaense de Básquetbol.<br>
Este es un correo automático, por favor no lo respondas.
</div>
</div>
</body>
</html>
+49
View File
@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bienvenido a OnAPB</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 0; background-color: #f4f4f4; }
.container { max-width: 600px; margin: 20px auto; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
.header { background: linear-gradient(135deg, #cc0000 0%, #aa0000 100%); color: #fff; padding: 40px 20px; text-align: center; }
.header h1 { margin: 0; font-size: 28px; text-transform: uppercase; letter-spacing: 2px; }
.content { padding: 30px; }
.content h2 { color: #cc0000; margin-top: 0; }
.footer { background: #222; color: #888; text-align: center; padding: 20px; font-size: 12px; }
.btn { display: inline-block; padding: 12px 25px; background: #cc0000; color: #fff; text-decoration: none; border-radius: 6px; font-weight: bold; margin-top: 20px; }
.details { background: #f9f9f9; padding: 15px; border-radius: 8px; border-left: 4px solid #cc0000; margin: 20px 0; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>ONAPB</h1>
<p>La nueva forma de vivir el básquet</p>
</div>
<div class="content">
<h2>¡Hola, {{ $user->nombre }}!</h2>
<p>Es un gusto darte la bienvenida a <strong>OnAPB</strong>, la plataforma oficial de la Asociación Paranaense de Básquetbol.</p>
<p>Te has registrado correctamente como <strong>{{ ucfirst($tipo) }}</strong>. Ya podés acceder a tu panel para ver tus QRs, noticias y beneficios exclusivos.</p>
<div class="details">
<strong>Tus datos registrados:</strong><br>
Nombre: {{ $user->nombre }} {{ $user->apellido }}<br>
DNI: {{ $user->dni ?? $user->documento }}<br>
Email: {{ $user->email }}
</div>
<p>Para ingresar al sistema, hacé clic en el siguiente botón:</p>
<center>
<a href="{{ url('/') }}" class="btn">INGRESAR AL PANEL</a>
</center>
</div>
<div class="footer">
&copy; {{ date('Y') }} OnAPB - Asociación Paranaense de Básquetbol.<br>
Este es un correo automático, por favor no lo respondas.
</div>
</div>
</body>
</html>