toDateString(); $tickets = Ticket::whereDate('due_date', $today) ->whereNull('deleted_at') ->get(); if ($tickets->isEmpty()) { Log::info('No tickets due today.'); return; } foreach ($tickets as $ticket) { Log::info("Ticket Due Today: ID {$ticket->id}, Due Date: {$ticket->due_date}"); $recipients = []; // ===== Owner is USER ===== if ($ticket->getOwner() instanceof User) { Log::info("Sending notification to Ticket Owner: ID {$ticket->owner->id}, Name: {$ticket->owner->name}"); $recipients[] = $ticket->owner; } // ===== Owner is GROUP ===== if ($ticket->getOwner() instanceof Group) { Log::info("Sending notifications to Group Users for Ticket ID {$ticket->id}"); foreach ($ticket->getOwner()->users as $user) { $recipients[] = $user; } } if (empty($recipients)) { Log::warning("Ticket ID {$ticket->id} does not have a valid owner or group."); continue; } // ======= Build Common Notification Content ======= try { $commentOn = ' is due today'; } catch (\Exception $exception) { $commentOn = ''; } $creator = User::find($ticket->ticket_owner_id); foreach ($recipients as $recipient) { $placeholder = new NotificationPlaceholder(); $placeholder->setRecipient($recipient); $placeholder->setAuthorUser($creator); $placeholder->setAuthor($creator->name); $placeholder->setColor('bg-green'); $placeholder->setIcon('cake'); $placeholder->setContent( trans('notifications::notifications.new_record', ['user' => $creator->name]) . $commentOn ); $placeholder->setUrl(route('tickets.tickets.show', $ticket->id)); $recipient->notify(new GenericNotification($placeholder)); } } } }