Initial commit
This commit is contained in:
49
app/Console/Commands/SendMembershipExpiryReminders.php
Normal file
49
app/Console/Commands/SendMembershipExpiryReminders.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user