3
This commit is contained in:
@@ -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">
|
||||
© {{ 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">
|
||||
© {{ 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,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">
|
||||
© {{ 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>
|
||||
Reference in New Issue
Block a user