From 998a799c3a0ce7eed9dd7b2424fb29505b865716 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20G=C3=BCnther?=
Date: Sat, 23 May 2026 19:27:20 +0200
Subject: [PATCH] Fixed issue Crons running for tenants
---
app/Models/CronTask.php | 3 ++-
app/Providers/CronTaskHandleProvider.php | 15 +++++++++------
app/Tasks/CloseEvent.php | 1 +
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/app/Models/CronTask.php b/app/Models/CronTask.php
index e6c48fb..04108ac 100644
--- a/app/Models/CronTask.php
+++ b/app/Models/CronTask.php
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Scopes\CommonModel;
+use Illuminate\Database\Eloquent\Casts\AsArrayObject;
class CronTask extends CommonModel
{
@@ -11,6 +12,6 @@ class CronTask extends CommonModel
protected $dates = ['last_run'];
protected $casts = [
- 'last_run' => 'datetime',
+ 'last_run' => AsArrayObject::class,
];
}
diff --git a/app/Providers/CronTaskHandleProvider.php b/app/Providers/CronTaskHandleProvider.php
index 31283c6..fc966e7 100644
--- a/app/Providers/CronTaskHandleProvider.php
+++ b/app/Providers/CronTaskHandleProvider.php
@@ -17,7 +17,6 @@ class CronTaskHandleProvider extends CommonController
$now = Carbon::now();
$tenants = Tenant::where('has_active_instance', true)->get();
-
foreach ($tenants as $tenant) {
app()->instance('tenant', $tenant);
$this->runTenantTasks($tenant, $now);
@@ -31,7 +30,6 @@ class CronTaskHandleProvider extends CommonController
private function runTenantTasks(Tenant $tenant, Carbon $now) {
$tasks = CronTask::all();
-
foreach ($tasks as $task) {
// --- Every-Time Tasks ---
@@ -41,11 +39,12 @@ class CronTaskHandleProvider extends CommonController
// --- Daily Tasks ---
if ($task->execution_type === CronTaskType::CRON_TASK_TYPE_DAILY) {
+ $tenantLastRun = $task->last_run?->get($tenant->slug);
+
$scheduledTime = \DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d ') . $task->schedule_time);
$now = Carbon::now();
-
- $alreadyRunToday = $task->last_run?->isToday() ?? false;
+ $alreadyRunToday = $tenantLastRun == null ? true : $tenantLastRun->isToday() ?? false;
if (!$alreadyRunToday && $now >= $scheduledTime) {
$this->runTask($task);
@@ -59,14 +58,18 @@ class CronTaskHandleProvider extends CommonController
$logger = $this->taskLogger($task->name, app('tenant'));
app()->instance('taskLogger', $logger);
-
$taskClass = "\\App\\Tasks\\" . $task->name;
if (class_exists($taskClass)) {
$instance = new $taskClass();
$instance->handle();
+ $lastRun = $task->last_run;
+ if ($lastRun === null) {
+ $lastRun = [];
+ }
+ $lastRun[app('tenant')->slug] = now();
// Update last_run
- $task->last_run = now();
+ $task->last_run = $lastRun;
$task->save();
}
}
diff --git a/app/Tasks/CloseEvent.php b/app/Tasks/CloseEvent.php
index 575578d..13634d1 100644
--- a/app/Tasks/CloseEvent.php
+++ b/app/Tasks/CloseEvent.php
@@ -12,6 +12,7 @@ class CloseEvent implements CronTask {
$eventRepository = new EventRepository();
/** @var Event $event */
foreach ($eventRepository->getAvailable(false) as $event) {
+ echo $event->id . $event->tenant .'
';
if ($event->registration_final_end <= $now ) {
$event->registration_allowed = false;
$event->save();