todo mal
This commit is contained in:
@@ -1,106 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use App\Models\Evento;
|
||||
use App\Models\Configuracion;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ReporteSemanal extends Command
|
||||
{
|
||||
protected $signature = 'reportes:semanal {--dry-run : Solo muestra el contenido sin enviar}';
|
||||
protected $description = 'Genera y envía el reporte semanal de actividad a los administradores';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$ahora = Carbon::now();
|
||||
$semanaAnteriorDesde = $ahora->copy()->subDays(7)->startOfDay();
|
||||
$semanaAnteriorHasta = $ahora->copy()->subDay()->endOfDay();
|
||||
$proximaSemanaHasta = $ahora->copy()->addDays(7)->endOfDay();
|
||||
|
||||
// ── Partidos jugados la semana anterior ──
|
||||
$jugados = Evento::with(['equipoLocal.club', 'equipoVisitante.club'])
|
||||
->whereBetween('fecha_evento', [$semanaAnteriorDesde->toDateString(), $semanaAnteriorHasta->toDateString()])
|
||||
->whereNotNull('marcador_local')
|
||||
->get();
|
||||
|
||||
// ── Próximos partidos ──
|
||||
$proximos = Evento::with(['equipoLocal.club', 'equipoVisitante.club'])
|
||||
->where('fecha_evento', '>=', $ahora->toDateString())
|
||||
->where('fecha_evento', '<=', $proximaSemanaHasta->toDateString())
|
||||
->orderBy('fecha_evento')
|
||||
->orderBy('hora_inicio')
|
||||
->get();
|
||||
|
||||
// ── Top goleadores ──
|
||||
$topGoleadores = DB::table('evento_jugador')
|
||||
->join('jugadores', 'evento_jugador.id_jugador', '=', 'jugadores.id_jugador')
|
||||
->selectRaw('jugadores.nombre, jugadores.apellido, SUM(evento_jugador.puntos) as total_puntos, COUNT(evento_jugador.id_evento) as partidos')
|
||||
->groupBy('jugadores.id_jugador', 'jugadores.nombre', 'jugadores.apellido')
|
||||
->orderByDesc('total_puntos')
|
||||
->limit(10)
|
||||
->get();
|
||||
|
||||
// ── QRs de la semana ──
|
||||
$qrsSemana = DB::table('qr_codes')
|
||||
->where('creado', '>=', $semanaAnteriorDesde)
|
||||
->count();
|
||||
|
||||
$qrsValidados = DB::table('qr_codes')
|
||||
->where('creado', '>=', $semanaAnteriorDesde)
|
||||
->where('escaneos_restantes', 0)
|
||||
->count();
|
||||
|
||||
$data = compact('jugados', 'proximos', 'topGoleadores', 'qrsSemana', 'qrsValidados', 'semanaAnteriorDesde', 'semanaAnteriorHasta');
|
||||
|
||||
if ($this->option('dry-run')) {
|
||||
$this->info('=== REPORTE SEMANAL (DRY RUN) ===');
|
||||
$this->line("Partidos jugados: {$jugados->count()}");
|
||||
$this->line("Próximos partidos: {$proximos->count()}");
|
||||
$this->line("Top goleador: " . ($topGoleadores->first() ? $topGoleadores->first()->apellido . ' (' . $topGoleadores->first()->total_puntos . ' pts)' : 'N/A'));
|
||||
$this->line("QRs generados: {$qrsSemana} | Validados: {$qrsValidados}");
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
// 1. Priorizar email configurado en sistema
|
||||
$emails = [];
|
||||
$configEmail = \App\Models\Configuracion::get('email_reportes');
|
||||
if ($configEmail) {
|
||||
$emails[] = $configEmail;
|
||||
}
|
||||
|
||||
// 2. Si no hay, buscar superadmins (rol=1)
|
||||
if (empty($emails)) {
|
||||
$emails = DB::table('admin_users')->where('rol', 1)->whereNotNull('email')->pluck('email')->toArray();
|
||||
}
|
||||
|
||||
// 3. Fallback: email del .env
|
||||
if (empty($emails)) {
|
||||
$fallback = config('mail.from.address');
|
||||
if ($fallback) $emails = [$fallback];
|
||||
}
|
||||
|
||||
if (empty($emails)) {
|
||||
$this->error('No hay destinatarios configurados para enviar el reporte.');
|
||||
return self::FAILURE;
|
||||
}
|
||||
|
||||
try {
|
||||
Mail::send('emails.reporte_semanal', $data, function ($mail) use ($emails, $ahora) {
|
||||
$mail->to($emails)
|
||||
->subject("📊 Reporte Semanal ONAPB — Semana del " . $ahora->startOfWeek()->format('d/m'));
|
||||
});
|
||||
$this->info("✅ Reporte enviado a: " . implode(', ', $emails));
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Error enviando reporte semanal: ' . $e->getMessage());
|
||||
$this->error('Error: ' . $e->getMessage());
|
||||
return self::FAILURE;
|
||||
}
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user