50 lines
1.4 KiB
PHP
50 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Mail\MembershipExpiryReminderMail;
|
|
use App\Models\Member;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
class SendMembershipExpiryReminders extends Command
|
|
{
|
|
protected $signature = 'members:send-expiry-reminders {--days=30 : Number of days before expiry to send reminders}';
|
|
|
|
protected $description = 'Send membership expiry reminder emails';
|
|
|
|
public function handle(): int
|
|
{
|
|
$days = (int) $this->option('days');
|
|
$targetDate = now()->addDays($days)->toDateString();
|
|
|
|
$members = Member::whereDate('membership_expires_at', $targetDate)
|
|
->where(function ($q) {
|
|
$q->whereNull('last_expiry_reminder_sent_at')
|
|
->orWhere('last_expiry_reminder_sent_at', '<', now()->subDays(1));
|
|
})
|
|
->get();
|
|
|
|
if ($members->isEmpty()) {
|
|
$this->info('No members to remind.');
|
|
|
|
return static::SUCCESS;
|
|
}
|
|
|
|
foreach ($members as $member) {
|
|
if (! $member->email) {
|
|
continue;
|
|
}
|
|
|
|
Mail::to($member->email)->queue(new MembershipExpiryReminderMail($member));
|
|
$member->last_expiry_reminder_sent_at = now();
|
|
$member->save();
|
|
}
|
|
|
|
$this->info('Reminders sent to '.$members->count().' member(s).');
|
|
|
|
return static::SUCCESS;
|
|
}
|
|
}
|
|
|