feat: Phase 5.1 - Scheduled Report Emails
Code Style & Quality / Laravel Pint (push) Waiting to run
Code Style & Quality / PHPStan Static Analysis (push) Waiting to run
Code Style & Quality / Test Suite (push) Waiting to run
Code Style & Quality / Browser Tests (Dusk) (push) Waiting to run

- Create SendScheduledReport job (runs daily 08:00)
- Create ScheduledReportMail Mailable with Blade template
- Add receive_reports boolean to users table (migration)
- Register job in routes/console.php

Tests: 101 passing (319 assertions)
This commit is contained in:
Javier Braña
2026-09-01 13:23:20 +02:00
parent a9bbf8ca57
commit c50a1a2080
5 changed files with 275 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
<?php
namespace App\Jobs;
use App\Models\Project;
use App\Models\User;
use App\Services\ReportGenerator;
use App\DTO\ReportFilters;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class SendScheduledReport implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public int $tries = 3;
public int $backoff = 60;
public function handle(): void
{
// Get users who want to receive scheduled reports
$users = User::where('receive_reports', true)
->whereHas('projects')
->with('projects')
->get();
foreach ($users as $user) {
foreach ($user->projects as $project) {
$filters = new ReportFilters();
$filters->entityTypes = ['phases', 'features', 'inspections', 'issues', 'tasks'];
$generator = new ReportGenerator($project, $filters);
$data = $generator->generate();
Mail::to($user)->send(new \App\Mail\ScheduledReportMail(
$project,
$user,
$data,
$filters
));
}
}
}
}