whereBetween('warranty_end', [$today, $today->clone()->addDays($warrantyDays)]) ->count(); $maintenanceDue = AssetMaintenance::whereIn('status', ['planned', 'in_progress']) ->whereDate('performed_at', '<=', $today) ->count(); $auditThresholdDays = 90; $auditOverdue = Asset::whereDoesntHave('audits', function ($q) use ($today, $auditThresholdDays) { $q->whereDate('audited_at', '>=', $today->clone()->subDays($auditThresholdDays)); })->count(); $message = sprintf( 'Reminder: warranty due %d, maintenance due %d, audit overdue %d', $warrantyDue, $maintenanceDue, $auditOverdue ); Log::channel('asset_activity')->info($message, [ 'warranty_due_in_days' => $warrantyDays, 'audit_threshold_days' => $auditThresholdDays, ]); $this->info($message); return self::SUCCESS; } }